№13 Условные выражения и конструкция if / Уроки по Python для начинающих
Эти условные могут быть использованы несколькими способами, чаще всего в выражениях if и циклах. if записывается с использованием ключевого слова if .
a = 33 b = 200 if b > a: print("b больше, чем a")
В этом примере мы используем две переменных, a и b , которые используются как часть оператора if чтобы убедиться, что b больше чем a . Учитывая, что a — 33, а b — 200, мы знаем что 200 больше чем 33, поэтому мы выводим на экран “b больше, чем a”.
Отступы
Python полагается на отступы пробелом, для определения частей кода. В других языках программирования часто используются фигурные скобки для этой цели.
Оператор if, без отступа (вызовет ошибку):
a = 33 b = 200 if b > a: print("b больше, чем a")
File "demo_indentation_test.py", line 2 print("b больше, чем a") ^ IndentationError: expected an indented block
elif
Ключевое слово elif — это способ Python сказать, что “если предыдущие условные были неверными, тогда попробуйте это условное”.
a = 33 b = 33 if b > a: print("b больше, чем a") elif a == b: print("a равно b")
В этом примере a равняется b , в связи с этим первое условие не будет верно, но условие elif — True, поэтому на экран мы выводим “a равно b”.
else
Ключевое слово else захватывает все, что не было захвачено предыдущими условиями.
a = 200 b = 33 if b > a: print("b больше, чем a") elif a == b: print("a и b равны") else: print("a больше, чем b")
В этом примере a больше чем b , и поэтому первое условие не будет true, так же как и условие elif не будет true, поэтому нам нужно перейти else и вывести на экран “a больше, чем b”.
Вы можете так же использовать else без elif :
a = 200 b = 33 if b > a: print("b больше, чем a") else: print("b меньше, чем a")
Короткая запись If
Если у вас есть только один оператор для выполнения, поместите его в ту же строку, что и оператор if.
Однострочная запись if:
if a > b: print("a больше, чем b")
Короткая запись If … Else
Если у вас есть только один оператор для выполнения, один для if и один для else , вы можете поместить их в одну строку:
Пример
Однострочный оператор if else:
print("A") if a > b else print("B")
Так же вы можете записать сразу несколько операторов else на одной строке:
print("A") if a > b else print(" token punctuation">) if a == b else print("B")
And
Ключевое слово and — логический оператор, который используется для объединения условных операторов:
Проверьте больше ли a нежели b , и больше ли c чем a :
if a > b and c > a: print("Оба условия True")
Or
Ключевое слово or — логический оператор, который используется для объединения условных операторов:
Проверьте больше a чем b , или больше ли a в сравнении с c :
if a > b or a > c: print("Одно из усовий True")
Условный оператор
Условный оператор или оператор ветвления — это оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения. Спасибо, Википедия! Такое определение можно найти в любой книге по программированию. Его крайне желательно хотя бы понимать.
Попробую дать более популярное определение: условный оператор выполняет некоторое действие, если указанное условие истинно (равно 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 ( ‘Ваш возраст — это одна цифра :)’ )
el if age 15 :
print ( ‘Геометрия — это жестко (хочу обратно в началку)’ )
else :
print ( ‘В школе было круто’ )
В приведенном выше примере, есть три варианта развития событий, но это не значит, что мы ограничены в количестве дополнительных условий.
a = int ( input ( ‘Введите число от одного до 1 до 100 ‘ ))
if a 10 :
print ( ‘Ваше число меньше 10 ‘ )
el if a 20 :
print ( ‘Ваше число меньше двадцатки’ )
el if a 30 :
print ( ’30 — это потолок’ )
el if a 40 :
print ( ‘Ваше число меньше 40 ‘ )
el if a 50 :
print ( ‘Много, но не больше полтинника’ )
el if a 60 :
print ( ‘Число меньше, чем шесть*десять’ )
el if a 70 :
print ( ‘Ваше число расположено в восьмом десятке’ )
el if a 80 :
print ( ‘Ваше число меньше 80’ )
el if a 90 :
print ( ‘Ваше число находится в 9 десятке’ )
el if 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’ )
Решение задач
1. Пользователь вводит два целых числа. Выведите меньшее из них.
2. Пользователь вводит свое имя и возраст. Если возраст пользователя больше 18, то вывести строку «Добрый вечер, name! Вы совершеннолетний, поздравляем!», иначе вывести строку «Привет, name! Приносим извинения, но вы не можете гулять после 22:00». Пример:
# name = ‘Ivan’
# age = 21
>>> Добрый вечер, Ivan! Вы совершеннолетний, поздравляем!
# name = ‘Max’
# age = 14
>>> Привет, Max! Приносим извинения, но вы не можете гулять после 22:00
3. Пользователь вводит три строки. Одна из них равна строке «Python», выведите номер этой строки.
4. Пользователь вводит три целых числа. Два из них равны друг другу. Выведите третье число, не равное остальным. Если среди введенных чисел не оказалось двух равных друг другу, выведите строку «Ошибка».
5. Пользователь вводит целое число. Проверьте является ли это число четырехзначным, если является, то выведите строку «Успешно», иначе «Неудача».
6. Пользователь вводит целое число — текущее время в часах. Если количество часов находится между 7 и 10, то программа должна вывести строку «Пора вставать!», иначе выведется строка «Ты проспал!». Если введенное число отрицательно или больше 23, то программа должна вывести строку «Ошибка».
7. Пользователь вводит текущее время в часах. Если количество часов находится в диапазоне от 0 до 7, то программа выводит строку «Ночь». Если часовая стрелка находится между 7 и 11, то выведется строка «Утро». От 12 до 17 выведется строка «День». Если текущее время находится между 17 и 23, то программа должна вывести строку «Вечер». В случае, когда введенное число отрицательно или превосходит 23, программа должна вывести строку «Ошибка».
8. Пользователь вводит строку — название времени года. Если введенная строка — это лето, то выведите строку «Тополинный пух, жара, июль», если зима, то «Снеговик, снежки и горка», если осень, то «Пора в школу!», если весна, то «Весенняя капель». В случае, если введенная строка не равна ни одному из предложенных вариантов, программа должна выводить строку «Ошибка».
9. Пользователь вводит целое число — номер месяца своего рождения. Выведите строку «Вы родились летом», если номер месяц совпадает с номером одного из летних месяцев. Если номер месяца совпал с номером одного из зимних месяцев, то нужно вывести «К холодам вам не привыкать». Для людей, которые празднуют свой день рождения осенью выведите «Я тоже люблю осенний листопад». Если весна ваше время года выведите строку «Подснежник». В случае, если введенное число меньше единицы или больше 12, выведите строку «Ошибка».
10. Пользователь вводит номер года своего рождения. Если этот год является високосным выведите «Вы случайно родились не 29 февраля?», иначе выведите «Ничего необычного».
Для справки, в високосном году 366 дней, а в обычном — 365. Номер високосного года, делится на 4, за исключением номеров тех годов, которые делятся на 100 и не делятся на 400 (например, годы 300, 1300 и 1900 не являются високосными, а 1200 и 2000 — являются).
11. Пользователь вводит целое число. Выведите его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число», например, численным описанием числа 190 является строка «положительное четное число».
12. Дано целое число, лежащее в диапазоне от 1 до 999. Если число двузначное, выведите строку «Двузначное», если число содержит одну значащую цифру, то выведите строку «Цифра», если число является трехзначным выведите «Трехзначное». В случае, если введенное число меньше 0 или больше 999, выведите строку «Ошибка!».
13. Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую или NO в противном случае. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку «Ошибка!».
14. Шахматный ферзь ходит по диагонали, горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ферзь попасть с первой клетки на вторую одним ходом. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку «Ошибка!».
15. Шахматный конь ходит буквой «Г» — на две клетки по вертикали в любом направлении и на одну клетку по горизонтали, или наоборот. Даны две различные клетки шахматной доски, определите, может ли конь попасть с первой клетки на вторую одним ходом. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку «Ошибка!».
16. Треугольник существует только тогда, когда сумма любых двух его сторон больше третьей. Дано a, b, c — стороны предполагаемого треугольника. Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.