Глава 13 · Автоматизация с помощью функций
Мини-проекты — конвертер единиц и утилиты коллекций
Два небольших проекта, полностью состоящих из чистых функций — образцовых кандидатов для независимого тестирования.
Используем
defreturntype hintsassertУровень
★★ средний
Результат
набор чистых функций
Конвертер единиц измерения
Маленький проект из полностью чистых функций — идеальных кандидатов для тестирования из §13.24:
konverter.py
def celsius_to_fahrenheit(celsius: float) -> float:
return celsius * 9 / 5 + 32
def fahrenheit_to_celsius(fahrenheit: float) -> float:
return (fahrenheit - 32) * 5 / 9
def km_to_miles(km: float) -> float:
return km * 0.621371
assert celsius_to_fahrenheit(0) == 32
assert celsius_to_fahrenheit(100) == 212
assert round(km_to_miles(10), 2) == 6.21
Ни одного input(), ни одного print() внутри самих функций
Все три функции — чистые: результат целиком зависит от аргумента, побочных эффектов нет. Именно поэтому их можно проверить через
assert, не запуская вообще ничего похожего на полноценную программу.Утилиты для работы с коллекциями
Набор маленьких, сфокусированных функций поверх списков и словарей из главы 11:
kollekciya_utility.py
def average(scores: list[float]) -> float:
return sum(scores) / len(scores)
def count_above(scores: list[float], threshold: float) -> int:
return len([s for s in scores if s > threshold])
def unique_words(text: str) -> set[str]:
return set(text.lower().split())
def find_top_score(students: list[dict]) -> dict:
return max(students, key=lambda s: s["score"])
find_top_score использует функцию как аргумент
key=lambda s: s["score"] — то же самое сочетание max()/sorted() + lambda из §13.20 и §13.26, только теперь на списке словарей (глава 11, §11.14).★★ Самостоятельная задача
Ещё одна утилита
Напишите find_students_below(students, threshold) — список имён учеников с баллом ниже threshold. Проверьте её на 2-3 примерах через assert.
Практика: конвертер единиц измерения
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Практика: утилиты для списков и словарей
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки