Логические выражения, условные операторы, рекурсия и цикл
Алгебра логики
Операции сравнения, тип bool, True и False
Алгебра логики над bool
or
and
A
B
A or B
A
B
A and B
False
False
False
False
False
False
False
True
True
False
True
False
True
False
True
True
False
False
True
True
True
True
True
True
Python3: and, or, not; низкий приоритет
- Пустые и непустые объекты Python3
- Алгебра логики над произвольными объектами Python3
- OR: если A истинно, результат истинен, вычислять B не надо
- ⇒ Python: если A истинно, результат равен A, иначе B
- AND: если A ложно, результат ложен, вычислять B не надо
- ⇒ Python: если A ложно, результат равен A, иначе B
⇒ частичное вычисление выражений A и B (например, 3+3 or 100/0)
or
and
A
B
A or B
A
B
A and B
Пусто
Пусто
B
Пусто
Пусто
A
Пусто
Непусто
B
Пусто
Непусто
A
Непусто
Пусто
A
Непусто
Пусто
B
Непусто
Непусто
A
Непусто
Непусто
B
- OR: если A истинно, результат истинен, вычислять B не надо
Выполнение, обусловленное свойствами данных
Условная операция выражение-True if выражение-условие else выражение-false
Условный оператор: if, if / else, if [/ elif [/ elif ... [else]...]]
Вложенный if и and
Рекурсивный вызов функции
- Условный оператор в функции: рекурсия
- рекурсия — «тяжелая» операция: создание/удаление контекста
- ⇒ ограничение по глубине
⇒ критерий log(N)
Актуально конечная рекурсия:
- Инициализация
- Проверка условия
- (Полезная нагрузка)
- Изменение объектов, участвующих в условии
- Примитивная рекурсия (счётчик)
Общая рекурсия (пока данные внезапно не обретут свойства)
Д/З
Прочитать и отщёлкать пятую главу учебника
Прочитать и отщёлкать шестую главу учебника
EJudge: AndOr 'Условное выражение'
Ввести два объекта Python и вывести первый непустой из них. Если оба пустые, вывести NO.
[] 123
123
EJudge: DotsInCircle 'Точки в круге'
В первой строке ввести координаты центра круга и его радиус (числа x, y, r через запятую). Во второй и последующих строках ввести пары чисел — координаты точек. Ввод заканчивается парой 0,0 (она не входит в проверку!). Вывести YES, если все точки принадлежат кругу и NO, если не все. Внимание! В этом сезоне в данной задаче необходимо использовать рекурсию! Хранить последовательность и даже пользоваться циклом нельзя.
1,1,2 1,2 1,3 2,2 0,0
YES
EJudge: IntPalindrome 'Число-палиндром'
Ввести целое положительное число и проверить, является ли оно палиндромом, т. е. совпадает ли первая цифра с последней, вторая — с предпоследней и т. д. Внимание! Представлять число в виде последовательности (строки, списка и т. п.), а в этом сезоне — ещё и использовать цикл (а не рекурсию) — нельзя. Вывести YES или NO соответственно. Лидирующие нули не учитывать (числа, заканчивающиеся на 0 — автоматически не палиндромы).
1234321
YES
EJudge: FractionRed 'Сократить дробь'
Ввести два натуральных числа через запятую — числитель и знаменатель дроби, вывести эту дробь в приведённом виде: целая часть записана отдельно, следом, через пробел — дробная; числитель не имеет общих делителей со знаменателем (и, соответственно, меньше него). Если целой или дробной части нет, они (и пробел) не выводятся. Внимание! Типом fractions.Fraction и (в этом сезоне) циклом пользоваться запрещается!
12345, 765
16 7/51