Условия и условные операторы
Допустим, если пользователь ввёл "Hello", его нужно поприветствовать. Иначе написать, что он невежлив.
Для решения подобных задач в Python (да и в других языках программирования) существует условный оператор if. Например, задача выше решается так:
say = input() if say == "Hello": print("Приветствую!") else: print("Вы невежливый. Пожалуйста, поздоровайтесь!")
Здесь использована функция input, которая считывает пользовательский ввод, и возвращает введённую строку. Затем переменная проверяется на равенство Hello, и, если равна, то печатаем Приветствую!. Иначе печатаем Вы невежливый. Пожалуйста, поздоровайтесь!
Ветка else является необязательной. Если наша программа тоже невежливая и мы не хотим ничего отвечать, если пользователь ввёл не Hello, то можно записать так:
say = input() if say == "Hello": print("Приветствую!")
Проверки на равенство
После слова if идёт условие. И только если оно истинное, выполняется блок с отступом от if. Условия могут проверяться самые разные; многие из них задаются операторами.
- == - проверка на равенство (условие верно, если выражение слева равно выражению справа)
- != - проверка на неравенство (условие верно, если выражение слева не равно выражению справа)
- > - условие верно, если выражение слева больше выражения справа
- >= - условие верно, если выражение слева больше, либо равно выражению справа
- < - условие верно, если выражение слева меньше выражения справа
- <= - условие верно, если выражение слева меньше, либо равно выражению справа
Вообще, условие может быть любым, необязательно сравнение. Например,
say = input() if say: print("Ох, вы что-то сказали? Жалко, я не смогу это понять") else: print("Не хотите разговаривать? Ну и ладно")
Здесь условием выступает просто переменная say. Условие истинно, если строка непустая, и ложно, если она пустая. Истинно также любое отличное от нуля число, и любой непустой объект (например, непустая строка).
Логические операторы
Иногда есть необходимость в сложных условиях. Например, если число больше нуля, но не равно 42. Такие условия помогают задавать логические операторы:
- and - логическое И
- or - логическое ИЛИ
- not - логическое НЕ
Задача выше имеет такое решение:
a = 33 if a > 0 and a != 42: print("YES")
Частая ошибка с логическими операторами: допустим, нам надо проверить, что переменная либо 0, либо 42. Некоторые пишут ошибочное решение
a = 33 if a == 0 or 42: # Это ОШИБКА, так условие составлять НЕЛЬЗЯ! print("YES")
Здесь условие эквивалентно (a == 0) or (42), и, если первое условие иногда истинно, то второе условие (42) истинно всегда, потому что это отличное от нуля число. Правильно писать так:
a = 33 if a == 0 or a == 42: print("YES")
Приоритет логических операторов
- Все арифметические
- Все операторы сравнения
- not
- and
- or
a = 33 if not a == 0 or a == 42: # a не 0, или a равно 42; часть с 42 можно убрать print("YES") if not (a == 0 or a == 42): # a не 0, и не 42 print("YES")
Отличие этих двух if в том, что, если a равно 42, то первый выведет YES, а второй - не выведет. Приоритет операции можно поднять скобками там, где нужно.
Множественные ветки
Если пользователь ввёл "Hello", его нужно поприветствовать. Если "Bye", попрощаться. Иначе, написать, что он невежлив. Можно написать с помощью вложенных if:
say = input() if say == "Hello": print("Приветствую!") else: if say == "Bye": print("Прощай!") else: print("Вы невежливый. Пожалуйста, поздоровайтесь!")
Но так не делают. Множественные ветки возможны с помощью добавления elif (сокращение от else if, используемого во многих других языках программирования).
say = input() if say == "Hello": print("Приветствую!") elif say == "Bye": print("Прощай!") else: print("Вы невежливый. Пожалуйста, поздоровайтесь!")
Блоков elif может быть сколько угодно. Также можно воспользоваться аналогом switch - case, который описан в следующей части.