Общий паттерн решения
Почти каждая задача практикума строится по одной схеме:
- Ввод данных. Получить строку от пользователя через
input(). - Преобразование типа. Превратить строку в число:
int()илиfloat(). Для строк оставить как есть. - Проверка условия. Сравнить значения или проверить их истинность.
- Вывод результата. Напечатать ответ через
print().
# main.py
value = int(input("Введите число: "))
if value % 2 == 0:
print("Чётное")
else:
print("Нечётное")
Цепочные сравнения
В математике пишут a < b < c, и Python поддерживает такую же запись. Это не только короче, но и безопаснее: a < b < c эквивалентно (a < b) and (b < c), причём b вычисляется один раз.
# Проверка, что три числа упорядочены по возрастанию
a = 3
b = 5
c = 7
if a < b < c:
print("Числа упорядочены по возрастанию.")
else:
print("Числа не упорядочены.")
0 <= hours < 24 читается как «часы от 0 включительно до 24 не включительно».
Плоские условия вместо вложенности
Когда нужно проверить несколько независимых факторов, не вкладывайте if друг в друга. Используйте логические операторы: это делает код плоским и понятным.
# Вложенный вариант — глубокая структура, легко запутаться
x = -3
y = 5
if x != 0:
if y != 0:
if x > 0 and y > 0:
print("Первый квадрант")
elif x < 0 and y > 0:
print("Второй квадрант")
# ...
# Плоский вариант — все условия на одном уровне
if x > 0 and y > 0:
print("Первый квадрант")
elif x < 0 and y > 0:
print("Второй квадрант")
elif x < 0 and y < 0:
print("Третий квадрант")
elif x > 0 and y < 0:
print("Четвёртый квадрант")
else:
print("Точка на оси")
Guard clauses
Guard clause (сторожевое условие) — это техника, при которой сначала проверяются «плохие» случаи и сразу возвращается результат. Это позволяет избежать лишней вложенности и сделать основную логику видимой.
# Без guard clauses — лесенка вправо
hours = 25
minutes = 30
if 0 <= hours < 24:
if 0 <= minutes < 60:
print("Корректное время.")
else:
print("Некорректные минуты.")
else:
print("Некорректные часы.")
# С guard clauses — плоская структура
if not (0 <= hours < 24):
print("Некорректные часы.")
elif not (0 <= minutes < 60):
print("Некорректные минуты.")
else:
print("Корректное время.")
Тернарный оператор
Когда результат — одна строка или одно значение, выбор можно записать в одну строку. Это уменьшает шум в коде, но не стоит вкладывать тернарные операторы друг в друга.
num = 7
result = "Чётное" if num % 2 == 0 else "Нечётное"
print(result)
# Тот же эффект одной строкой
print("Положительное" if num > 0 else "Отрицательное или ноль")
Граничные случаи
Начинающие часто забывают проверить, что произойдёт на границе диапазона. Например, возраст 18 — это уже взрослый или ещё подросток? В задачах из источника границы указаны явно, и их нужно соблюдать.
age = 18
# Важно: 18 входит в категорию "взрослый", а 12 — в "подросток"
if age < 12:
print("Вы ребёнок.")
elif age < 18:
print("Вы подросток.")
elif age < 60:
print("Вы взрослый.")
else:
print("Вы пожилой.")
== после арифметических операций. В практикуме таких случаев нет, но привычка проверять допуск (abs(a - b) < 1e-9) пригодится в будущем.