Тип данных bool
Операторы сравнения возвращают значения специального логического типа bool
. Значения логического
типа могут принимать одно из двух значений: True
(истина) или False
(ложь). Если преобразовать
логическое True
к типу int
, то получится 1, а преобразование False
даст 0.
При обратном преобразовании число 0 преобразуется в False
, а любое ненулевое число в True
.
При преобразовании str
в bool
пустая строка преобразовывается в False
,
а любая непустая строка в True
.
>>> True = = 1 True >>> False = = 0 True |
a, b, c
, и мы хотим узнать, сколько из них больше нуля.
Вместо громоздкой конструкции
res = 0 if a > 0 : res + = 1 if b > 0 : res + = 1 if c > 0 : res + = 1 |
res = (a > 0 ) + (b > 0 ) + (c > 0 ) |
Логические операторы
Иногда нужно проверить одновременно не одно, а несколько условий.
Например, проверить, является ли данное число чётным можно при помощи
условия (n % 2 == 0)
(остаток от деления n
на 2
равен 0
),
а если необходимо проверить, что два данных целых числа n
и m
являются
чётными, необходимо проверить справедливость обоих условий: n % 2 == 0
и m % 2 == 0
, для чего их необходимо объединить при помощи оператора and
(логическое И): n % 2 == 0 and m % 2 == 0
.
В Питоне существуют стандартные логические операторы: логическое И, логическое ИЛИ, логическое отрицание.
Логическое И является бинарным оператором
(то есть оператором с двумя операндами: левым и правым)
и имеет вид and
.
Оператор and
возвращает True
тогда и только
тогда, когда оба его операнда имеют значение True
.
Логическое ИЛИ является бинарным оператором и возвращает True
тогда и только
тогда, когда хотя бы один операнд равен True
. Оператор “логическое ИЛИ” имеет
вид or
.
Логическое НЕ (отрицание) является унарным (то есть с одним операндом)
оператором и имеет вид not
, за которым
следует единственный операнд. Логическое НЕ возвращает True
,
если операнд равен False
и наоборот.
Пример. Проверим, что хотя бы одно из чисел a или b оканчивается на 0:
if a % 10 = = 0 or b % 10 = = 0 : |
Проверим, что число a — положительное, а b — неотрицательное:
if a > 0 and not (b < 0 ): |
Или можно вместо not (b < 0)
записать (b >= 0)
.
Каскадные условные инструкции
Пример программы, определяющий четверть координатной плоскости, можно переписать используя “каскадную“
последовательность операцией if... elif... else
:
x = int ( input ()) y = int ( input ()) if x > 0 and y > 0 : print ( "Первая четверть" ) elif x > 0 and y < 0 : print ( "Четвёртая четверть" ) elif y > 0 : print ( "Вторая четверть" ) else : print ( "Третья четверть" ) |
В такой конструкции условия if
, ..., elif
проверяются по очереди, выполняется блок,
соответствующий первому из истинных условий. Если все проверяемые условия ложны, то выполняется блок else
,
если он присутствует.
Замечания по предыдущему листку
Обмен значений двух переменных в языке Питон легко делается так:
(a, b) = (b, a) |
Здесь в круглых скобках записан кортеж — последовательность из нескольких элементов. Одному кортежу можно присвоить значение другого кортежа. Этим можно пользоваться, если нужно одновременно изменить несколько переменных, например, возможна такая запись:
(x, y, z) = (x + y, y + z, z + x) |
На самом деле скобки при этом можно не писать:
a, b = b, a |
В задаче “автопробег” необходимо было найти целочисленное частное от деления m
на n
с округлением
вверх. Обычно это делается на основе известного математического факта: (m + n - 1) // n
.
В языке питон есть тернарная условная операция, подобная [expression]?[on_true]:[on_false]
в языке си.
[on_true] if [expression] else [on_false] >>> 'equal' if 1 = = 1 else 'not equal' 'equal' >>> 'equal' if 1 = = 2 else 'not equal' 'not equal' |
Данную конструкцию можно вкладывать в себя:
res = 'foo' if x = = 1 else 'boo' if x = = 2 else 'zoo' if x = = 3 else 'goo' |
Ситуация, когда тернарный оператор прямо уместен, встречается не так часто.