>>> 5 < x and x < 10
True
Как указывается в подразделе «Приоритет операций» раздела «Числа» главы 2, самый простой способ избежать путаницы — использовать круглые скобки:
>>> (5 < x) and (x < 10)
True
Рассмотрим некоторые другие проверки:
>>> 5 < x or x < 10
True
>>> 5 < x and x > 10
False
>>> 5 < x and not x > 10
True
Если вы используете оператор and для того, чтобы объединить несколько проверок, Python позволит вам сделать следующее:
>>> 5 < x < 10
True
Это выражение аналогично проверкам 5 < x и x < 10. Вы также можете писать более длинные сравнения:
>>> 5 < x < 10 < 999
True
Что есть истина? Что, если элемент, который мы проверяем, не является булевым? Чем Python считает True и False?
Значение false не обязательно явно означает False. Например, к False приравниваются все следующие значения:
• булева переменная False;
• значение None;
• целое число 0;
• число с плавающей точкой 0.0;
• пустая строка (' ');
• пустой список ([]);
• пустой кортеж (());
• пустой словарь ({});
• пустое множество (set()).
Все остальные значения приравниваются к True. Программы, написанные на Python, используют это определение истинности (или, как в данном случае, ложности), чтобы выполнять проверку на пустоту структуры данных наряду с проверкой на равенство непосредственно значению False:
>>> some_list = []
>>> if some_list:
…·····print("There's something in here")
… else:
…·····print("Hey, it's empty!")
…
Hey, it's empty!
Если вы выполняете проверку для выражения, а не для простой переменной, Python оценит его значение и вернет булев результат. Поэтому, если вы введете следующее:
if color == "red":
Python оценит выражение color == "red". В нашем примере мы присвоили переменной color значение "puce", поэтому значение выражения color == "red" равно False и Python перейдет к следующей проверке:
elif color == "green":
Повторяем действия с помощью while
Проверки с помощью if, elif и else выполняются последовательно. Иногда нам нужно выполнить какие-то операции более чем один раз. Нам нужен цикл, и простейшим вариантом циклов в Python является while. Попробуйте запустить с помощью интерактивного интерпретатора следующий пример — это простейший цикл, который выводит на экран значения от 1 до 5:
>>> count = 1
>>> while count <= 5:
…·····print(count)
…·····count += 1
…
1
2
3
4
5
>>>
Сначала мы присваиваем значение 1 переменной count. Цикл while сравнивает значение переменной count с числом 5 и продолжает работу, если значение переменной count меньше или равно 5. Внутри цикла мы выводим значение переменной count, а затем увеличиваем его на 1 с помощью выражения count += 1. Python возвращается к верхушке цикла и снова сравнивает значение переменной count с числом 5. Значение переменной count теперь равно 2, поэтому содержимое цикла while выполняется снова и переменная count увеличивается до 3.
Это продолжается до тех пор, пока переменная count не будет увеличена с 5 до 6 в нижней части цикла. Во время очередного возврата наверх цикла проверка count <= 5 вернет значение False и цикл while закончится. Python перейдет к выполнению следующих строк.
Прерываем цикл с помощью break
Если вы хотите, чтобы цикл выполнялся до тех пор, пока что-то не произойдет, но вы не знаете точно, когда это событие случится, можете воспользоваться бесконечным циклом, содержащим оператор break. В этот раз мы считаем строку с клавиатуры с помощью функции input(), а затем выведем ее на экран, сделав первую букву прописной. Мы прервем цикл, когда будет введена строка, содержащая только букву «q»:
>>> while True:
…·····stuff = input("String to capitalize [type q to quit]: ")
…·····if stuff == "q":
…·········break
…·····print(stuff.capitalize())
…
String to capitalize [type q to quit]: test
Test
String to capitalize [type q to quit]: hey, it works