Логические выражения, условные операторы и цикл
Алгебра логики
Операции сравнения, тип 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 не надо
Сравнения
Простые: == , <, !=, >= и т. п.
is , in
- Многоместные
- Таким образом,
- wait шhат?
Условные действия
Конструкция a and b or c как замена тернарной операции a ? b : c в Си
Не работает, как ожидается, если b пусто
Условная операция выражение-True if выражение-условие else выражение-false
- Блоки
- Условный оператор:
оператор … if выражение: оператор оператор оператор … оператор
- Выражение: непустое (True) или пустое (False)
Отступы в блоке одинаковые (иначе ошибка)
- Условный оператор:
- Условный оператор (общий вид):
Если бы не было elif:
Оператор сопоставления (введение)
См. pep-0634, pep-0635 и pep-0636
Это довольно сложный оператор на сопоставление структуры объекта, здесь упомянем только функцию управления потоком вычислений и прямого связывания.
Если в шаблоне присутствует константа — это сопоставление
Если в шаблоне присутствует имя — это связывание (т. н. «связанная переменная»)
Шаблон в сопоставлении может сопровождаться фильтром — клаузой if с дополнительным условием (в том числе на связанные переменные)
Если связывание не нужно и жалко тратить имя, вместо имени можно использовать «_» — оно не запоминается в пространстве имён
Обратите внимание на то, что если в примере ввод равен "1", мы сам введённый объект теряем — он ничем не связан. Как быстрее всего задать имя введённого объекта?
Цикл с предусловием
- Каноническая схема цикла:
- например
break, continue
Клауза else — не выполняется, если выход из цикла был по break:
Цикл while и операция связывания
В Python отсутствует цикл с пост-условием, потому что это было бы нарушение «блочного» принципа (cм. pep-0315). В результате стандартный шаблон «цикл по вводу» занимает все четыре секции канонической схемы цикла. В таких случаях естественно применить «моржовый оператор»:
переменная = ввод while проверка(переменная): тело переменная = ввод |
while проверка (переменная := ввод): тело |
Пример: цикл по вводу до пустой строки (ещё раз привет, Си!)
Коротко про ввод и вывод в Д/З
from math import * — математические функции
print() и print(…, end=концевая строка)
input()
int(input())/float(input())
eval(input()), что такое eval() и как работает
Д/З
Более подробные формулировки задач и интерфейс для их сдачи доступны по ссылкам вида «'Имя_задачи'»
Там же имеются советы по решению и могут появляться подсказки-спойлеры (доступны, если нажать «Комментарии» в шапке страницы).
Пользоваться составными типами данных Python (кроме преобразования ввода и множественного связывания) в этих задачах нельзя.
Прочитать и прощёлкать учебник (до функций)
EJudge: BiquadEquation 'Биквадратное уравнение'
Ввести через запятую три числа: a, b и c, вывести все вещественные решения уравнения ax⁴+bx²+c=0. При a ≠ 0 это уравнение превращается в биквадратное. Решения выводить через пробел в порядке возрастания, если решений нет, вывести 0, если их бесконечно много — -1.
1,-5,4
-2.0 -1.0 1.0 2.0
EJudge: AnyPower 'Какая-нибудь степень'
Ввести небольшое натуральное число 2⩽N⩽1000000 и проверить, является ли оно натуральной степенью (второй и выше) натурального числа. Вывести YES или NO соответственно.
1024
YES
EJudge: DotBox 'Ящик с точками'
Вводить вещественные числа x, y и z по три в строке через запятую, считая их координатами точек (не менее одной тройки). Конец ввода — пустая строка. Вывести минимальный объём содержащего все точки параллелепипеда с рёбрамии, параллельными осям координат.
3,2,1 -1.5, -1.5, -1.5 1,-1.3,1 0,0.5,0 1,2,3 …
70.875
EJudge: MaxSubseq 'Длиннейшая подпоследовательность'
Вводить по одному непустую последовательность целых чисел, не равных нулю. Ноль означает конец ввода и не учитывается. Вывести наибольшую длину неубывающей подпоследовательности подряд идущих чисел исходной последовательности. Хранить введённую последовательность или её невырожденную подпоследоватиельность запрещается.
1 2 19 10 26 27 28 2 3 14 15 1 2 0
4