f-strings вместо конкатенации
В PDF для вывода используется конкатенация строк с запятой в print(). Это работает, но f-strings (Python 3.6+) дают более читаемый и гибкий формат.
# Из источника
num1 = 8
num2 = 4
print("Большее число:", "num1") # ошибка: выводит слово "num1", а не значение
# Современный вариант
print(f"Большее число: {num1}")
# Ещё короче: тернарный оператор + f-string
print(f"Большее число: {max(num1, num2)}")
print("Большее число:", "num1") печатает строку "num1", а не значение переменной. Правильно — убрать кавычки: print("Большее число:", num1) или использовать f-string.
Цепочные сравнения
Для проверки упорядоченности в PDF уже используется цепочное сравнение num1 < num2 < num3 — это современный и правильный подход. Альтернативный вариант с двумя and делает код длиннее и менее читаемым.
# Длиннее, но эквивалентно
if num1 < num2 and num2 < num3:
print("Упорядочены")
# Короче и ближе к математической записи
if num1 < num2 < num3:
print("Упорядочены")
Проверка истинности строки
В задаче 6 PDF использует проверку if text:, что является идиоматичным Python. Устаревший вариант — сравнение с пустой строкой if text != "" — работает, но выглядит многословно.
# Устаревший стиль
if text != "":
print("Строка не пуста.")
# Идиоматичный Python
if text:
print("Строка не пуста.")
Guard clauses для вложенных условий
Если задача требует проверки нескольких независимых условий (например, часы и минуты), вложенные if увеличивают отступы. 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) or not (0 <= minutes < 60):
print("Некорректное время.")
else:
print("Корректное время.")
Тернарный оператор
Для задачи на чётность PDF показывает оба варианта: обычный if-else и тернарный оператор. Тернарный оператор уместен, когда результат — одно значение или одна строка.
# Обычный if-else
if num % 2 == 0:
result = "Чётное"
else:
result = "Нечётное"
print(result)
# Тернарный оператор
result = "Чётное" if num % 2 == 0 else "Нечётное"
print(result)
Прогрессивный налог
Решение из PDF уже использует градиентную шкалу налога, что корректно. Можно немного улучшить читаемость, вынеся границы и ставки в константы и добавив f-strings.
# Улучшенный вариант с константами
TIER_1_LIMIT = 10000
TIER_2_LIMIT = 50000
TIER_1_RATE = 0.05
TIER_2_RATE = 0.10
TIER_3_RATE = 0.20
income = float(input("Введите доход: "))
if income <= TIER_1_LIMIT:
tax = income * TIER_1_RATE
elif income <= TIER_2_LIMIT:
tax = TIER_1_LIMIT * TIER_1_RATE + (income - TIER_1_LIMIT) * TIER_2_RATE
else:
tax = (
TIER_1_LIMIT * TIER_1_RATE
+ (TIER_2_LIMIT - TIER_1_LIMIT) * TIER_2_RATE
+ (income - TIER_2_LIMIT) * TIER_3_RATE
)
print(f"Налог: {tax}")
print(f"Итоговая сумма после уплаты налога: {income - tax}")