Сравнения и условный оператор
(Есть подходящее по теме занятие в pythontutor)
Повтор
- алгоритм как последовательность
- именование
- ввод и преобразован типов
- вывод
- командная строка и сценарии-программы
EJudge: все зарегистрировались?
Сравнения
Условие как проверка свойств данных
Пример условия: сравнения
«==», «<», «>», «<=», «>=», «!=»
Результат сравнений — True или False
is и in — это тоже сравнения
Многоместные сравнения вида a > b > c > d и даже Length > Width != Size
То же самое, что all(a > b, b > c, c > d) и all(Length > Width, Width != Size)
BTW есть ещё any(условие1, условие2, ...)
Все сравнения — это просто выражения, их можно
print()-ать
присваивать: a = b > c
вписывать в другие выражения: a + 1 > b - c / 2
- …и всё остальное тоже можно
True и False — отдельный тип данных bool
Замечание о сравнении вещественных чисел на ==
Вместо этого isclose()
Условные операторы
- Просто условный оператор:
- Понятие блока с отступом
Клауза else
Пример про a>b vs a⩽b
Ещё примеры.
Вложенные условные операторы
Внутри блока с отступом могут встречаться условные операторы:
1 #!/usr/bin/env python3
2 a = int(input())
3 b = int(input())
4 if b != 0:
5 if a / b > 10:
6 print(a, "раз в десять больше", b)
7 else:
8 print(a, "не сильно больше или даже меньше", b)
9 else:
10 if a > b:
11 print(a, "бесконечно больше", b)
12 print("потому что любое положительное число бесконечно больше нуля")
13 elif a < b:
14 print(a, "бесконечно меньше", b)
15 print("потому что любое отрицательное число бесконечно меньше нуля")
16 else:
17 print(a, "и", b, "— нули")
Множественные одноуровневые условия: проблема «ступенек» на примере > / < или ==
Общий вид оператора if::
Ещё про условия
В Python условие — это любое выражение:
все объекты бывают либо непустые (чаще), либо пустые (реже)
пустые объекты: False, 0, 0.0, "", [], (), {}, set() и т. п.
операторы в if выполнятся, если результат выражения в условии непуст
операторы в клаузе else — если результат выражения в условии пуст
Пример для if
Условное выражение может встречаться прямо внутри формул:
выражение-для-True if условие else выражение-для False
Пример:
1 res = a / b if b != 0 else -1
Д/З
Все задачи можно решить без применения алгебры логики (т. е. без or, and и not), одними только сравнениями. Но если вы умеете в неё, то пожалуйста!
А вот составными типами данных Python, равно как и функциями min() и max(), пользоваться нельзя (хотя они и есть), потому что это упражнения на условные операторы.
Посмотрите полные варианты условий задач (по ссылкам с названиями задач). Там могут быть подсказки и советы, а в особо трудных случаях — спойлеры с алгоритмом.
- Прощёлкать
примеры из учебника «Think Python» (до рекурсии, её не надо)
EJudge: TriangleCheck 'Неравенство треугольника'
Ввести в столбик три положительных вещественных числа (проверять правильность не надо), и вывести YES, если из отрезков указанной длины можно сложить треугольник, и NO в противном случае
3 4 5
YES
EJudge: SquareEquation 'Квадратное уравнение'
Ввести в столбик три вещественных числа: a, b и c, вывести все вещественные решения уравнения $$ax^2+bx+c=0$$. При $$a\ne 0$$ это уравнение превращается в квадратное. Решения выводить через пробел в порядке возрастания, если решений нет, вывести 0, если их бесконечно много — -1.
1 -3 2
1.0 2.0
EJudge: ConfFormula 'Минимумы и максимумы'
Ввести в столбик три вещественных числа x, y и z. Вычислить формулу:
$$ (max^2(x,y,z) - 2^xmin(x,y,z)) / (sin2x + max(x,y,z)//min(x,y,z)) $$
Проверить возможное деление на 0 и вместо ответа вывести 0, если оно предвидится. В противном случае вывести результат вычислений. Последовательностями python и функциями min() и max() пользоваться нельзя!
2 3 4
6.435019351154122
Необязательное упражнение:
Функцией min() нельзя пользоваться, но с помощью тернарной операции и операции «:=» выбор минимального из трёх чисел записать несложно. Попробуйте!
EJudge: CorrectDate 'Правильная дата'
Ввести в столбик три целых заведомо положительных числа — номер года, номер месяца и номер дня в месяце. Проверить, есть ли такой день в месяце, и если да, выдать "YES", а если нет — "NO". Считать високосными все кратные 4 номера годов.
2019 2 29
NO