Условия: if, else и elif

Возвращаемся к Python.
В предыдущем уроке ты научился использовать input().
Твои программы научились задавать вопросы.
Очень вежливо.
Очень интерактивно.
Немного подозрительно.
Ты писал программы вроде:
name = input("What is your name? ")
age = int(input("How old are you? "))
print(f"Hello, {name}!")
print(f"Next year you will be {age + 1}.")
Хорошо.
Теперь твоя программа может спрашивать информацию у пользователя.
Но она всё ещё не умеет принимать решения.
Она всегда делает одно и то же.
Настоящим программам нужен выбор.
Например:
Если пользователь достаточно взрослый, разрешить доступ.
Если пароль правильный, войти в систему.
Если продукт доступен, показать “Buy now”.
Если число отрицательное, показать предупреждение.
И тут на сцену выходят условия.
Условия позволяют программе выбирать, что делать.
Без условий программа похожа на поезд без стрелок.
Едет вперёд.
Всегда вперёд.
Даже когда рельсы заканчиваются.
Не идеально.
Что ты изучишь
В этом уроке ты изучишь:
- что такое условия;
- как работает
if; - как работает indentation с условиями;
- как работают операторы сравнения;
- как использовать
else; - как использовать
elif; - как сравнивать числа;
- как сравнивать strings;
- как booleans работают с условиями;
- как объединять условия через
and; - как объединять условия через
or; - как использовать
not; - типичные ошибки начинающих;
- как строить простые программы, которые принимают решения.
К концу этого урока твои программы смогут выбирать.
Маленькие выборы.
Но важные выборы.
Очень Python.
Очень мощно.
Немного опасно.
Идеально.
Что такое условие?
Условие — это вопрос, на который Python может ответить:
True
или:
False
Пример:
age = 20
print(age >= 18)
Output:
True
Python проверяет:
Age больше или равно 18?
Ответ:
True
Другой пример:
age = 15
print(age >= 18)
Output:
False
Условие ложное.
Пользователю нет 18 или больше.
Python не становится эмоциональным.
Он просто проверяет условие.
Без драмы.
Только логика.
В основном.
Твой первый if
Создай файл:
conditions.py
Напиши:
age = 20
if age >= 18:
print("You are an adult.")
Запусти:
python conditions.py
или:
python3 conditions.py
Output:
You are an adult.
Это означает:
Если age больше или равно 18, выведи сообщение.
Условие истинное.
Поэтому Python выполняет строку с отступом.
Очень просто.
Очень важно.
Программа только что приняла решение.
Маленькое решение.
Большая идея.
Когда условие false
Теперь измени код:
age = 15
if age >= 18:
print("You are an adult.")
Запусти.
Output:
Ничего не произошло.
Почему?
Потому что условие false.
Python проверяет:
15 больше или равно 18?
Ответ:
False
Поэтому Python пропускает строку с отступом.
Так работает if.
Если условие true, выполняем код.
Если условие false, пропускаем код.
Очень прямо.
Очень Python.
Очень “без билета не входишь”.
Indentation имеет значение
В Python indentation очень важна.
Это работает:
age = 20
if age >= 18:
print("You are an adult.")
Строка:
print("You are an adult.")
имеет отступ.
Это означает, что она принадлежит к if.
Python использует indentation, чтобы понимать блоки кода.
Блок — это группа строк, которые принадлежат друг другу.
Во многих языках используют {}.
В Python мы используем indentation.
Python увидел фигурные скобки и сказал:
Нет, спасибо. Я люблю ровную расстановку мебели.
Очень Python.
Неправильная indentation
Это неправильно:
age = 20
if age >= 18:
print("You are an adult.")
Python покажет ошибку:
IndentationError
Почему?
Потому что после if Python ожидает блок с отступом.
Правильно:
age = 20
if age >= 18:
print("You are an adult.")
Используй последовательную indentation.
Большинство Python-кода использует 4 пробела.
Не смешивай tabs и spaces.
Смешивание tabs и spaces — это путь, по которому маленькие программы превращаются в дома с привидениями.
Двоеточие обязательно
Строка с if требует двоеточия:
if age >= 18:
Двоеточие означает:
Здесь начинается блок кода.
Неправильно:
if age >= 18
print("You are an adult.")
Python пожалуется.
Правильно:
if age >= 18:
print("You are an adult.")
Маленький символ.
Большая ответственность.
Двоеточие крошечное.
Но без него Python останавливает вечеринку.
Операторы сравнения
Операторы сравнения позволяют Python сравнивать значения.
Распространённые операторы:
== равно
!= не равно
> больше чем
< меньше чем
>= больше или равно
<= меньше или равно
Примеры:
age = 20
print(age == 20)
print(age != 18)
print(age > 18)
print(age < 30)
print(age >= 20)
print(age <= 21)
Output:
True
True
True
True
True
True
Эти операторы — основа условий.
Они задают вопросы.
Python отвечает True или False.
Очень полезно.
Очень строго.
Как маленький судья с клавиатурой.
== — это не то же самое, что =
Очень важно:
=
означает присваивание.
Оно сохраняет значение.
Пример:
age = 20
Это означает:
Сохрани 20 в age.
Но:
==
означает сравнение.
Пример:
age == 20
Это означает:
Age равно 20?
Не путай их.
Неправильная идея:
if age = 20:
print("Age is 20.")
Правильно:
if age == 20:
print("Age is 20.")
Один = сохраняет значение.
Два == задают вопрос.
Крошечная разница.
Огромная драма.
Классическое программирование.
Использование else
else выполняется тогда, когда условие if является false.
Пример:
age = 15
if age >= 18:
print("You are an adult.")
else:
print("You are not an adult yet.")
Output:
You are not an adult yet.
Условие:
age >= 18
является false.
Поэтому Python пропускает блок if и выполняет блок else.
Это означает:
Если это правда, сделай одно.
Иначе сделай другое.
Очень полезно.
Очень распространено.
Очень “дверь A или дверь B”.
if и else с input
Создай файл:
age_check.py
Напиши:
age = int(input("How old are you? "))
if age >= 18:
print("You can enter.")
else:
print("You cannot enter yet.")
Запусти.
Пример 1:
How old are you? 20
Output:
You can enter.
Пример 2:
How old are you? 15
Output:
You cannot enter yet.
Теперь твоя программа реагирует по-разному в зависимости от input пользователя.
Это важно.
Один и тот же код может давать разные результаты.
Потому что данные меняются.
Именно здесь программирование начинает выглядеть живым.
Не слишком живым.
Пока без восстания роботов.
Использование elif
Иногда двух вариантов недостаточно.
Может быть несколько возможностей.
Пример:
Если score 90 или больше, grade A.
Если score 80 или больше, grade B.
Если score 70 или больше, grade C.
Иначе grade D.
Для этого используют elif.
elif означает:
else if
Пример:
score = 85
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: D")
Output:
Grade: B
Python проверяет сверху вниз.
Первое условие:
score >= 90
False.
Второе условие:
score >= 80
True.
Поэтому Python выводит:
Grade: B
Потом пропускает остальное.
Очень эффективно.
Очень решительно.
Очень “я нашёл ответ, до свидания”.
Порядок имеет значение с elif
Порядок имеет значение.
Посмотри на это:
score = 95
if score >= 70:
print("Grade: C or better")
elif score >= 80:
print("Grade: B or better")
elif score >= 90:
print("Grade: A")
Output:
Grade: C or better
Почему?
Потому что Python проверяет сверху вниз.
score >= 70 является true.
Поэтому Python выполняет этот блок и пропускает остальное.
Даже если score >= 90 тоже true.
Именно поэтому порядок должен быть логичным.
Лучше:
score = 95
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: D")
Output:
Grade: A
Ставь самое сильное или самое конкретное условие первым.
Иначе программа может быть технически правильной, но логически смешной.
Python тебя не остановит.
Python разрешает глупости, если синтаксис легальный.
Очень опасная свобода.
Сравнение strings
Можно сравнивать strings.
Пример:
password = input("Password: ")
if password == "secret":
print("Access granted.")
else:
print("Access denied.")
Пример 1:
Password: secret
Output:
Access granted.
Пример 2:
Password: banana
Output:
Access denied.
Python сравнивает текст точно.
Это означает:
secret
не то же самое, что:
Secret
или:
secret
или:
secret
Пробелы и большие буквы имеют значение.
Python строгий.
Как охранник, который ещё и любит грамматику.
Case sensitivity со strings
Попробуй:
word = input("Type yes: ")
if word == "yes":
print("You typed yes.")
else:
print("That was not yes.")
Если пользователь введёт:
yes
Output:
You typed yes.
Если пользователь введёт:
Yes
Output:
That was not yes.
Почему?
Потому что "yes" и "Yes" — это разные strings.
Позже ты сможешь сделать input более гибким.
Пока запомни:
Python сравнивает strings точно.
Точно означает точно.
Без эмоциональной интерпретации.
Использование lower()
Можно упростить сравнение strings через .lower().
Пример:
answer = input("Do you like Python? ")
answer = answer.lower()
if answer == "yes":
print("Excellent choice.")
else:
print("Python will try not to be offended.")
Если пользователь введёт:
YES
или:
Yes
или:
yes
.lower() превратит это в:
yes
Это делает сравнение проще.
Можно также написать короче:
answer = input("Do you like Python? ").lower()
Это распространено.
Очень полезно.
Python прощает большие буквы, если ты объяснишь ему как.
Booleans в условиях
Booleans естественно работают с if.
Пример:
is_logged_in = True
if is_logged_in:
print("Welcome back!")
else:
print("Please log in.")
Output:
Welcome back!
Поскольку is_logged_in уже True, не нужно писать:
if is_logged_in == True:
Это работает, но лишнее.
Лучше:
if is_logged_in:
Понятно.
Просто.
Pythonic.
Очень хорошо.
Проверка False через not
Можно использовать not, чтобы перевернуть boolean.
Пример:
is_logged_in = False
if not is_logged_in:
print("Please log in.")
else:
print("Welcome back!")
Output:
Please log in.
Это означает:
Если пользователь не вошёл в систему, выведи это сообщение.
not переворачивает условие.
not True
становится:
False
А:
not False
становится:
True
Маленькое слово.
Большая сила.
Используй осторожно.
Слишком много not заставляет мозг делать гимнастику.
Объединение условий через and
Используй and, когда оба условия должны быть true.
Пример:
age = 25
has_ticket = True
if age >= 18 and has_ticket:
print("You can enter the event.")
else:
print("You cannot enter the event.")
Output:
You can enter the event.
Оба условия true:
age >= 18
и:
has_ticket
Поэтому доступ разрешён.
Если хотя бы одно из них false, всё условие false.
and строгий.
Как серьёзный охранник на входе.
Возраст подходит?
Билет есть?
Тогда заходи.
Нет билета?
До свидания.
Объединение условий через or
Используй or, когда хотя бы одно условие должно быть true.
Пример:
is_admin = False
is_owner = True
if is_admin or is_owner:
print("You can edit this page.")
else:
print("You cannot edit this page.")
Output:
You can edit this page.
Только одно условие true:
is_owner
Но этого достаточно.
or означает:
Это или то, или оба.
Очень полезно.
Очень распространено.
Очень “одного ключа достаточно, чтобы открыть дверь”.
Объединение input и and
Создай файл:
event_access.py
Напиши:
age = int(input("Age: "))
has_ticket_answer = input("Do you have a ticket? yes/no: ").lower()
has_ticket = has_ticket_answer == "yes"
if age >= 18 and has_ticket:
print("You can enter the event.")
else:
print("You cannot enter the event.")
Пример 1:
Age: 25
Do you have a ticket? yes/no: yes
Output:
You can enter the event.
Пример 2:
Age: 25
Do you have a ticket? yes/no: no
Output:
You cannot enter the event.
Эта строка важна:
has_ticket = has_ticket_answer == "yes"
Она создаёт boolean.
Если ответ "yes", тогда has_ticket — True.
Иначе — False.
Очень полезно.
Очень чисто.
Очень Python.
Вложенные if
Можно поставить один if внутрь другого if.
Это называется nesting.
Пример:
age = int(input("Age: "))
if age >= 18:
has_ticket = input("Do you have a ticket? yes/no: ").lower()
if has_ticket == "yes":
print("You can enter.")
else:
print("You need a ticket.")
else:
print("You are too young.")
Это работает.
Но будь осторожен.
Слишком много nesting может сделать код трудным для чтения.
Вложенный код — это как коробки в коробках в коробках.
В какой-то момент ты уже не помнишь, где носки.
Используй nesting, когда это имеет смысл.
Но не строй лабиринт, если не любишь страдать.
Плоский код часто проще
Эта версия проще:
age = int(input("Age: "))
has_ticket = input("Do you have a ticket? yes/no: ").lower()
if age >= 18 and has_ticket == "yes":
print("You can enter.")
else:
print("You cannot enter.")
Она короче.
Но даёт менее конкретный feedback.
Вложенная версия может сказать:
You are too young.
или:
You need a ticket.
Поэтому оба подхода могут быть полезны.
Лучший выбор зависит от ситуации.
Программирование часто не является:
один правильный ответ
А больше:
какое решение понятнее для этой проблемы?
Раздражает.
Но правда.
Типичная ошибка: забыть двоеточие
Неправильно:
if age >= 18
print("Adult")
Правильно:
if age >= 18:
print("Adult")
Двоеточие начинает блок.
Нет двоеточия — нет блока.
Нет блока — нет счастья.
Типичная ошибка: неправильная indentation
Неправильно:
age = 20
if age >= 18:
print("Adult")
Правильно:
age = 20
if age >= 18:
print("Adult")
Код внутри if должен быть с отступом.
Python использует indentation, чтобы понимать структуру.
Твои пробелы — не декорация.
Они архитектура.
Очень серьёзные пробелы.
Типичная ошибка: использовать = вместо ==
Неправильно:
password = input("Password: ")
if password = "secret":
print("Access granted.")
Правильно:
password = input("Password: ")
if password == "secret":
print("Access granted.")
Запомни:
= присваивание
== сравнение
Один сохраняет.
Два сравнивают.
Маленькая разница, которая может испортить весь день.
Типичная ошибка: сравнивать числовой input как текст
Неправильно:
age = input("Age: ")
if age >= 18:
print("Adult")
Это не сработает, потому что age — string.
Правильно:
age = int(input("Age: "))
if age >= 18:
print("Adult")
Если хочешь числовое сравнение, конвертируй input в число.
Python не сравнивает "20" и 18 как человек.
Python говорит:
Текст и число? Абсолютно нет.
Строго.
Но разумно.
Типичная ошибка: неправильный порядок elif
Неправильно:
score = 95
if score >= 60:
print("Passed")
elif score >= 90:
print("Excellent")
Output:
Passed
Второе условие никогда не выполнится, потому что score >= 60 уже true.
Лучше:
score = 95
if score >= 90:
print("Excellent")
elif score >= 60:
print("Passed")
else:
print("Failed")
Output:
Excellent
Когда используешь elif, порядок имеет значение.
Подумай, прежде чем ставить условия.
Программа не подумает вместо тебя.
Грубо.
Но ожидаемо.
Мини-программа: проверка числа
Создай файл:
number_checker.py
Напиши:
number = int(input("Enter a number: "))
if number > 0:
print("The number is positive.")
elif number < 0:
print("The number is negative.")
else:
print("The number is zero.")
Попробуй:
10
Output:
The number is positive.
Попробуй:
-5
Output:
The number is negative.
Попробуй:
0
Output:
The number is zero.
Это классическое упражнение на условия.
Простое.
Понятное.
Полезное.
Не glamorous.
Но отвёртка тоже не glamorous.
А отвёртки важны.
Мини-программа: проверка пароля
Создай файл:
password_check.py
Напиши:
password = input("Enter password: ")
if password == "python123":
print("Access granted.")
else:
print("Access denied.")
Попробуй правильный пароль.
Потом неправильный.
Это простая идея login.
Очень базовая.
Не используй это для настоящей безопасности.
Настоящая безопасность намного серьёзнее.
Это обучение.
Не защита банка.
Пожалуйста, не защищай банк уроком 4.
Мини-программа: простая скидка
Создай файл:
discount.py
Напиши:
total = float(input("Order total: "))
if total >= 100:
discount = total * 0.10
final_total = total - discount
print(f"Discount: {discount:.2f}")
print(f"Final total: {final_total:.2f}")
else:
print("No discount.")
print(f"Final total: {total:.2f}")
Пример 1:
Order total: 150
Output:
Discount: 15.00
Final total: 135.00
Пример 2:
Order total: 50
Output:
No discount.
Final total: 50.00
Это близко к настоящей business logic.
Если заказ достаточно большой, применить скидку.
Иначе — без скидки.
Маленькая логика магазина.
Очень полезно.
Очень реально.
Мини-программа: калькулятор оценок
Создай файл:
grade_calculator.py
Напиши:
score = int(input("Score: "))
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"Grade: {grade}")
Попробуй разные scores:
95
85
75
65
50
Программа должна давать разные grades.
Это использует:
- input;
- конвертацию типов;
if;elif;else;- переменные;
- output.
Много концепций вместе.
Python-суп становится насыщеннее.
Пока без вкуса USB.
Надеемся.
Практика
Создай файл:
practice_conditions.py
Напиши программу, которая спрашивает:
- username;
- age;
- является ли пользователь student.
Потом:
- если age меньше 18, выведи
"You are young."; - если age между 18 и 64, выведи
"You are an adult."; - если age 65 или больше, выведи
"You are a senior."; - если пользователь student, выведи
"Student mode activated.".
Пример:
username = input("Username: ")
age = int(input("Age: "))
student_answer = input("Are you a student? yes/no: ").lower()
print(f"Hello, {username}!")
if age < 18:
print("You are young.")
elif age < 65:
print("You are an adult.")
else:
print("You are a senior.")
if student_answer == "yes":
print("Student mode activated.")
Обрати внимание на эту строку:
elif age < 65:
Нам не нужно писать:
age >= 18 and age < 65
Почему?
Потому что если Python дошёл до этого elif, он уже знает, что:
age < 18
было false.
Значит, age уже 18 или больше.
Порядок помогает.
Красивая логика.
Очень Python.
Мини-задание
Создай файл:
shipping_calculator.py
Программа должна спросить:
- имя клиента;
- сумму заказа;
- country;
- является ли клиент VIP.
Правила:
Если сумма заказа 100 или больше, shipping бесплатный.
Если клиент VIP, shipping бесплатный.
Если country — "italy", shipping стоит 5.
Иначе shipping стоит 15.
Потом выведи:
Customer: Anna
Order total: 80.00
Shipping: 5.00
Final total: 85.00
Пример решения:
customer_name = input("Customer name: ")
order_total = float(input("Order total: "))
country = input("Country: ").lower()
vip_answer = input("VIP customer? yes/no: ").lower()
is_vip = vip_answer == "yes"
if order_total >= 100 or is_vip:
shipping = 0
elif country == "italy":
shipping = 5
else:
shipping = 15
final_total = order_total + shipping
print("----- Order Summary -----")
print(f"Customer: {customer_name}")
print(f"Order total: {order_total:.2f}")
print(f"Shipping: {shipping:.2f}")
print(f"Final total: {final_total:.2f}")
Протестируй с разными значениями.
Попробуй:
Order total: 120
VIP: no
Попробуй:
Order total: 50
VIP: yes
Попробуй:
Country: italy
Order total: 80
VIP: no
Попробуй:
Country: france
Order total: 80
VIP: no
Программа должна выбирать разную стоимость shipping.
Это реальная логика.
Маленькая.
Но реальная.
Программа теперь принимает решения.
Очень хорошо.
Очень Python.
Checklist для начинающих
Когда твоя программа с условиями не работает, проверь:
Я сохранил файл?
Я использовал двоеточие после if, elif и else?
Код внутри условия имеет indentation?
Я использовал == для сравнения?
Я использовал = только для присваивания?
Я конвертировал input в int или float перед числовым сравнением?
Мои elif-условия в правильном порядке?
Я написал True и False с большой буквы?
Я сравнил strings точно?
Я использовал .lower(), когда хотел более гибкий текстовый input?
Большинство bugs с условиями не большие.
Обычно это маленькие логические ошибки.
Компьютер делает именно то, что ты написал.
Не то, что ты имел в виду.
Это раздражает.
Это программирование.
Добро пожаловать.
Итог
Сегодня ты изучил:
- условия позволяют программам принимать решения;
- условия возвращают
TrueилиFalse; ifвыполняет код, когда условие true;elseвыполняет код, когда условиеiffalse;elifпроверяет другое условие;- Python проверяет
ifиelifсверху вниз; - indentation определяет блоки кода;
- двоеточие
:начинает блок; ==сравнивает значения;=присваивает значения;- strings сравниваются точно;
.lower()помогает с гибким текстовым input;- booleans естественно работают в условиях;
andтребует, чтобы оба условия были true;orтребует, чтобы хотя бы одно условие было true;notпереворачивает условие;- порядок имеет значение в
elifchains.
Это огромный шаг.
Твои программы теперь могут выбирать.
Могут реагировать.
Могут говорить да или нет.
Могут применять скидки.
Могут проверять пароли.
Могут считать shipping.
Могут оценивать числа.
Немного.
Не морально.
Только математически.
Хорошо.
Следующий урок
В следующем уроке мы изучим loops.
Loops позволяют программе повторять действия.
Вместо того чтобы писать:
print("Hello")
print("Hello")
print("Hello")
ты напишешь что-то умнее.
Ты изучишь:
for
while
Loops мощные.
Loops полезные.
Loops также опасны, если случайно создать такой, который никогда не остановится.
Но это будущее приключение.
Пока твои программы могут принимать решения.
Очень сильный прогресс.
Очень Python.