Урок 7 из 84 · Основы Python

Условия. Ветвления в Python

Условный оператор или оператор ветвления - это оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения. Спасибо, Википедия! Такое определение можно найти в любой книге по программированию. Его крайне желательно хотя бы понимать.

Попробую дать более популярное определение: условный оператор выполняет некоторое действие, если указанное условие истинно (равно True).

Вот так выглядит if...else в Python

if True:
    print('Условие истинно, поэтому я напечатаюсь')

Приведу пример поинтереснее:

a = 10
b = 5
if a > b:
    print('a больше b равно True')

Если условие ложно, то код, находящийся под оператором if не выполнится:

a = 3
b = 9999999
if a > b:
    print('Я никогда не напечатаюсь')

Дополним предыдущий пример оператором else

a = 3
b = 9999999
if a > b:
    print('Я никогда не напечатаюсь :(')
else:
    print('if не выполнился, так что печатаюсь я')

Если условие в if ложно, то выполнится оператор под оператором else

Приведу еще несколько примеров:

# Вывести большее из двух чисел,
# введенных с клавиатуры
a = int(input())
b = int(input())
if a > b:
    print('Большее число a = ' + str(a))
else:
    print('Большее число b = ' + str(b))
# Проверить число a на четность
a = int(input())
if a % 2 == 0:
    print('четное')
else:
    print('нечетное')

Иногда двух вариантов недостаточно, для этого существует оператор elif, а для все остального есть...

age = int(input())
if age < 10:
    print('Ваш возраст - это одна цифра :)')
elif age < 15:
    print('Геометрия - это жестко (хочу обратно в началку)')
else:
    print('В школе было круто')

В приведенном выше примере, есть три варианта развития событий, но это не значит, что мы ограничены в количестве дополнительных условий.

a = int(input('Введите число от одного до 1 до 100'))
if a < 10:
    print('Ваше число меньше 10')
elif a < 20:
    print('Ваше число меньше двадцатки')
elif a < 30:
    print('30 - это потолок')
elif a < 40:
    print('Ваше число меньше 40')
elif a < 50:
    print('Много, но не больше полтинника')
elif a < 60:
    print('Число меньше, чем шесть*десять')
elif a < 70:
    print('Ваше число расположено в восьмом десятке')
elif a < 80:
    print('Ваше число меньше 80')
elif a < 90:
    print('Ваше число находится в 9 десятке')
elif a < 100:
    print('Сотня больше вашего числа')
else:
    print('Хитро, но меня не обманешь, число слишком большое')

Да, мне нечем было заняться, ну и что? Никогда не делайте так, как написано в примере выше. Если в вашем коде больше трех elif значит что-то не так и стоит придумать новый алгоритм. Давайте еще разок: много elif - плохо!

Примеры решения задач

Проверить является ли клетка шахматной доски белой

# Два числа выбираются случайным образом (координаты клетки шахматного поля, от 1 до 8)
# Вывести YES, если клетка белая, и NO, если клетка черная
from random import randint
x = randint(1,8)
y = randint(1,8)
print(x, y)
if (x + y) % 2 == 1:
    print('YES')
else:
    print('NO')

Во втором случаем числа вводятся с клавиатуры

x = int(input('Введите координату x: '))
y = int(input('Введите координату y: '))
if (x + y) % 2 == 1:
    print('YES')
else:
    print('NO')

Проверить может ли слон ходить с первой шахматной на вторую

# Четыре числа выбираются случайным образом (координаты клетки шахматного поля, от 1 до 8)
# Вывести YES, если ладья может сходить с первой клетки на вторую, и NO, если не может
# Напомню, что ладья ходит так:
# Л —---X
# |
# |
# |
# X
from random import randint
x1 = randint(1, 8)
x2 = randint(1, 8)
y1 = randint(1, 8)
y2 = randint(1, 8)
print(x1, y1)
print(x2, y2)
if x1 == x2 and y1 != y2 or x1 != x2 and y1 == y2:
    print('YES')
else:
    print('NO')

То же самое, но с помощью ввода с клавиатуры

x1 = int(input('Введите координату x1: '))
x2 = int(input('Введите координату y1: '))
y1 = int(input('Введите координату x2: '))
y2 = int(input('Введите координату y2: '))
if x1 == x2 and y1 != y2 or x1 != x2 and y1 == y2:
    print('YES')
else:
    print('NO')

Booleans

Булевы значения - это простейший тип, который выражает истинность значения. Выражается ключевыми словами True и False. Булевы значения используются для сравнения и для управления ходом выполнения программ.

В программировании, операторы сравнения используются для того, чтобы сравнить значения и свести результат сравнения либо до True или False.

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

Оператор Что означает
== Равно
!= Не равно
< Меньше
> Больше
<= Меньше или равно
>= Больше или равно

Примеры

>>>5 == 5
True
>>>10 != 5
True
>>>11 > 12
False
>>>20 < 10
False
>>>10 <= 11
True
>>>9 >= 10
False
>>>"Hello" == "Hello"
True
>>>"hello" == "Hello"  #  потому что регистр имеет значение
False
"mark" > "Mark"

Output:
 ???

В документации сказано:

Ссылка на таблицу ASCII

The comparison uses lexicographical ordering: first the first two items are compared, and if they differ this determines the outcome of the comparison; if they are equal, the next two items are compared, and so on, until either sequence is exhausted.

… что в вольном переводе означает, что сравнение использует лексикографический порядок: сначала сравниваются первые два значения, и если у них есть разница, то это и будет исходом сравнения; если же они одинаковые, берутся следующие два значения и так далее, пока в одном из последовательностей (sequence) не кончатся значения для сравнения.

Также говорится, что:

Lexicographical ordering for strings uses the Unicode code point number to order individual characters.

… что примерно означает, что при лексикографическом упорядочении строчных значений используются номера кодовых точек Unicode для определения порядка отдельно взятых символов.

>>>"mark" > "Mark"
True
>>> ord('M')
77
>>> ord('m')
109
>>>

потому что порядковый номер “m” равен 109, порядковый номер “M” равен 77:

>>>True == 1
True
>>>False == 0
True

Также, помните, что True равняется единице, а False нулю

Отзыв