📖 Теория: Практикум 2

⚡ Кратко

Практикум 2 тренирует базовый алгоритм: ввод → преобразование типа → условие → вывод. Все задачи решаются через if/elif/else, логические операторы и сравнения. Главные приёмы: цепочные сравнения вместо вложенных if, логические операторы вместо глубокой вложенности, тернарный оператор для простого выбора значения, обработка граничных случаев.

  • if a < b < c: — проверка упорядоченности.
  • if x > 0 and y > 0: — комбинация условий.
  • result = "A" if cond else "B" — тернарный выбор.
  • Проверяйте равенство, ноль и пустые значения отдельно.

Общий паттерн решения

Почти каждая задача практикума строится по одной схеме:

  1. Ввод данных. Получить строку от пользователя через input().
  2. Преобразование типа. Превратить строку в число: int() или float(). Для строк оставить как есть.
  3. Проверка условия. Сравнить значения или проверить их истинность.
  4. Вывод результата. Напечатать ответ через print().
📄 examples/pattern.py
# 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 вычисляется один раз.

📄 examples/chained_comparison.py
# Проверка, что три числа упорядочены по возрастанию
a = 3
b = 5
c = 7

if a < b < c:
    print("Числа упорядочены по возрастанию.")
else:
    print("Числа не упорядочены.")
💡 На заметку: Цепочные сравнения особенно удобны для диапазонов: 0 <= hours < 24 читается как «часы от 0 включительно до 24 не включительно».

Плоские условия вместо вложенности

Когда нужно проверить несколько независимых факторов, не вкладывайте if друг в друга. Используйте логические операторы: это делает код плоским и понятным.

📄 examples/flat_vs_nested.py
# Вложенный вариант — глубокая структура, легко запутаться
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 (сторожевое условие) — это техника, при которой сначала проверяются «плохие» случаи и сразу возвращается результат. Это позволяет избежать лишней вложенности и сделать основную логику видимой.

📄 examples/guard_clause.py
# Без 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("Корректное время.")

Тернарный оператор

Когда результат — одна строка или одно значение, выбор можно записать в одну строку. Это уменьшает шум в коде, но не стоит вкладывать тернарные операторы друг в друга.

📄 examples/ternary_practice.py
num = 7
result = "Чётное" if num % 2 == 0 else "Нечётное"
print(result)

# Тот же эффект одной строкой
print("Положительное" if num > 0 else "Отрицательное или ноль")

Граничные случаи

Начинающие часто забывают проверить, что произойдёт на границе диапазона. Например, возраст 18 — это уже взрослый или ещё подросток? В задачах из источника границы указаны явно, и их нужно соблюдать.

📄 examples/edge_cases.py
age = 18

# Важно: 18 входит в категорию "взрослый", а 12 — в "подросток"
if age < 12:
    print("Вы ребёнок.")
elif age < 18:
    print("Вы подросток.")
elif age < 60:
    print("Вы взрослый.")
else:
    print("Вы пожилой.")
⚠️ Важно: При работе с дробными числами избегайте точного сравнения == после арифметических операций. В практикуме таких случаев нет, но привычка проверять допуск (abs(a - b) < 1e-9) пригодится в будущем.