Урок 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:
???
В документации сказано:
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 нулю