Условный оператор

Логическим (булевым) называется выражение, которое может быть истинным или ложным. В следующих примерах используется оператор ==, который сравнивает два операнда и возвращает True, если они равны, и False — если нет:

>>> 5 == 5
True
>>> 5 == 6
False

True и False — это специальные значения, принадлежащие типу bool.

 

Операторы сравнения

Оператор в математике Оператор в Python Пояснение Пример
> > Больше
5 > 3 - True
5 > 5 - False
< < Меньше
-1 < 1 - True
8 < 6 - False
= == Равно
2 == 2 - True
-3 == 3 - False
!= Не равно
4 != 7 - True
1 != 1 - False
>= Больше или равно
9 >= 9 - True
0 >= 1 - False
<= Меньше или равно
-8 <= -7 - True
5 <= -5 - False

Строки сравниваются посимвольно по лексикографическому порядку. Если символы совпадают, больше та строка, у которой длина больше. Строки равны только в том случае, если на одних и тех же позициях находится одинаковые символы и длина строк совпадает.

>>> 'hello' > 'temperature'
False
>>> 'ZFDHDF' < 'a'
True
>>> 'abc' > 'ab'
True
>>> 'xyz' == 'xyz'
True

Условное выполнение

Для написания полезных программ почти всегда нужна возможность проверять условия и соответственно изменять поведение программы. Условные инструкции дают нам эту возможность. Самая простая форма — это инструкция if:

if x > 0:
    print(f"x - положительное число")

Количество инструкций, которые могут быть указаны в теле, не ограничено, но должна быть хотя бы одна.

Пример 1

Увеличьте число \(x\) на \(2\), если оно неположительное.

x = int(input())
if x <= 0:
    x += 2
print(f"{x}")
0
2
>>>
5
5

Пример 2

Найдите предыдущее число, если число  \(x\) нечётное.

x = int(input())
if x % 2 == 1:
    x -= 1
print(f"{x}")
7
6
>>>
4
4

Пример 3

Выведите «Seven», если цифра \(7\) является последней цифрой положительного числа \(x\).

x = int(input())
if x % 10 == 7:
    print(f'Seven')
2027
Seven

Практические задания

Альтернативное выполнение

Вторая форма инструкции if — "альтернативное выполнение", в котором есть две возможности, и условие определяет, какая из них выполняется. Синтаксис выглядит так:

if x % 2 == 0:
    print(f"x - чётное число")
else:
    print(f"x - нечётное число")

Если остаток от деления \(x\) на \(2\) равен \(0\), то мы знаем, что \(x\) — четное число, и программа отображает соответствующее сообщение. Если условие ложно, выполняется второй набор инструкций. Поскольку условие может быть либо истинным, либо ложным, будет выполнена ровно одна из альтернатив. Альтернативы называются ветвями, потому что это и есть ветви в потоке выполнения.

Пример 1

Выведите YES в том случае, если \(a+b=c\) и выведите NO в противном случае.

a, b, c = map(int, input().split())
if a + b == c:
    print(f"YES")
else:
    print(f"NO")
1 2 3
YES
>>>
2 5 8
NO

Пример 2

В первой строке выведите Yes, если число \(x\) делится нацело на 4, иначе выведите No. Во второй строке выведите Yes, если число \(x\) делится нацело на 7, иначе выведите No.

x = int(input())
if x % 4 == 0:
  print(f"Yes")
else:
  print(f"No")
if x % 7 == 0:
  print(f"Yes")
else:
  print(f"No")
16
Yes
No
>>>
28
Yes
Yes

Практические задания

Вложенные условия

Одно условие также может быть вложено в другое. Например:

if x == y:
    print(f"x и y равны")
else:
    if x < y:
        print(f"x меньше, чем y")
    else:
        print(f"x больше, чем y")

Внешняя условная инструкция содержит две ветви. Первая ветвь содержит обычную инструкцию. Вторая ветвь содержит еще одну инструкцию if, у которой две собственные ветви. Эти две ветви — простые инструкции. Разумеется, они могли бы быть так же и условными операторами.

if 0 < x:
    if x < 10:
        print(f"x - положительное однозначное число")

Несмотря на то что отступы инструкций позволяют разглядеть структуру, вложенные условные инструкции очень трудно прочитать с ходу. Поэтому рекомендуется их избегать.

 

Связанные условия

Иногда существует более двух возможностей и требуется более двух ветвей. Один из способов выразить подобное вычисление — использовать связанные условия:

if x < y:
    print(f"x меньше, чем y")
elif x > y:
    print(f"x больше, чем y")
else:
    print(f"x и y равны")

elif — это аббревиатура для "else if". Выполняться будет только одна ветвь. Ограничений на количество инструкций elif нет. Инструкция else должна быть указана в конце.

if month == 1:
    print(f"January")
elif month == 2:
    print(f"February")
elif month == 3:
    print(f"March")

Каждое условие проверяется по порядку. Если первое ложно, проверяется следующее, и так далее. Если одно из них истинно, выполняется соответствующая ветвь, и инструкция заканчивает свою работу. Даже если истинно более чем одно условие, выполняется только первая истинная ветвь.

Пример 1

Даны \(2\) отрицательных и \(1\) положительное число. Найдите положительное число.

a, b, c = map(int, input().split())
if a > 0:
  print(f"{a}")
elif b > 0:
  print(f"{b}")
else:
  print(f"{c}")
4 -8 -5
4
>>>
-1 2 -3
2
>>>
-7 -7 7
7

Пример 2

Известны результаты каждого из двух таймов футбольного матча. Выведите номер выигравшей команды, в случае ничьей следует вывести «DRAW».

a1, b1 = map(int, input().split())
a2, b2 = map(int, input().split())
a = a1 + a2
b = b1 + b2
if a > b:
    print(f"1")
elif a < b:
    print(f"2")
else:
    print(f"DRAW")
1 1
2 1
1
>>>
1 3
1 0
2
>>>
0 0
1 1
DRAW

Практические задания

Логические операторы

Существует три логических оператора: andor и not. Значение этих операторов аналогично значению этих слов в английском языке.

 

Например, n > 0 and x < 10 истинно, только если \(x\) больше \(0\) и меньше \(10\).

 

n % 2 == 0 or n % 3 == 0 истинно, если выполняется одно или оба условия, то есть если число делится на \(2\) или на \(3\) без остатка.

 

Наконец, оператор not отрицает логическое выражение, поэтому not (x > y) истинно, если \(x > y\) ложно, то есть если \(x\) меньше или равно \(y\).

Оператор Назначение Приоритет Выражение Результат
not Логическое НЕ 1
not True
not False
False
True
and Логическое И 2
False and False
False and True
True and False
True and True
False
False
False
True
or Логическое ИЛИ 3
False or False
False or True
True or False
True or True
False
True
True
True

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

>>> not True and False
False
>>> not (True and False)
True
>>> True or False and False
True
>>> (True or False) and False
False

Логические операторы часто предоставляют способ упростить набор вложенных условных инструкций. Например, мы можем написать код, используя всего одно условие и логический оператор \(\mathrm{and}\):

if 0 < x and x < 10:
    print(f"x - положительное однозначное число")

Для такого рода условий Python предоставляет более краткий вариант записи:

if 0 < x < 10:
    print(f"x - положительное однозначное число")

Пример 1

Определите, является ли одно число произведением двух других чисел.

a, b, c = map(int, input().split())
if a * b == c or b * c == a or c * a == b:
    print(f"Yes")
else:
    print(f"No")
2 6 3
Yes
>>>
3 4 11
No

Пример 2

Определите название времени суток по часам.

h = int(input())
if 5 <= h < 12:     # h >= 5 and h < 12
    print(f"Утро")
elif 12 <= h < 17:  # h >= 12 and h < 17
    print(f"День")
elif 17 <= h < 22:  # h >= 17 and h < 22
    print(f"Вечер")
else:               # h >= 22 and h <= 24 or h >= 0 and h < 5
    print(f"Ночь")
7
Утро
>>>
12
День
>>>
20
Вечер
>>>
2
Ночь

Пример 3

Определите, является ли число \(n\) трёхзначным.

n = int(input())
if -999 <= n <= -100 or 100 <= n <= 999:
    print(f"YES")
else:
    print(f"NO")
-123
YES
>>>
78
NO

Пример 4

Найдите наибольшее число среди четырёх чисел.

a, b, c, d = map(int, input().split())
if a >= b and a >= c and a >= d:
    print(f"{a}")
elif b >= a and b >= c and b >= d:
    print(f"{b}")
elif c >= a and c >= b and c >= d:
    print(f"{c}")
else:
    print(f"{d}")
6 5 -7 1
6
>>>
1 2 3 3
3

Пример 5

Найдите наименьшее число среди трёх чисел и удвойте его.

a, b, c = map(int, input().split())
if a <= b and a <= c:
    d = a
elif b <= a and b <= c:
    d = b
else:
    d = c
d *= 2
print(f"{d}")
4 1 3
2

Практические задания