Тип данных bool

Операторы сравнения возвращают значения специального логического типа bool. Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь). Если преобразовать логическое True к типу int, то получится 1, а преобразование False даст 0. При обратном преобразовании число 0 преобразуется в False, а любое ненулевое число в True. При преобразовании str в bool пустая строка преобразовывается в False, а любая непустая строка в True.

Суммируем логические выражения
>>> True == 1
True
>>> False == 0
True
То свойство, что истина и ложь при превращении в числа равны 1 и 0 соответственно, позволяет писать кратко некоторые вещи. Например, пусть у нас есть числа 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'

Ситуация, когда тернарный оператор прямо уместен, встречается не так часто.

Последнее изменение: Суббота, 15 Август 2020, 02:35