Условия и условные операторы

Допустим, если пользователь ввёл "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")
Выражения слева и справа логических операторов выполняются "лениво". Это значит, что, например, если есть условие A or B, и A истинно, то B вычислено не будет. Это может быть важно, если выражение B имеет внешние эффекты (например, там функция input, ожидающая ввода, и она иногда не будет вызвана как раз из-за такого эффекта).

Приоритет логических операторов

  • Все арифметические
  • Все операторы сравнения
  • 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, который описан в следующей части.