Глава 23 · Приложение

Домашний проект E: преобразование температуры

Одна функция переводит значение в Цельсий и обратно, а отдельная проверка отклоняет невозможную температуру.

Небольшое, но по-настоящему полезное приложение: вводим температуру, выбираем единицу через переключатели и сразу видим значение во всех трёх шкалах: Цельсий, Фаренгейт, Кельвин:

temperature_converter.py
ABSOLYUTNYJ_NOL_C = -273.15

def preobrazovat(znachenie: float, iz_edinicy: str) -> dict[str, float]:
    if iz_edinicy == "C":
        c = znachenie
    elif iz_edinicy == "F":
        c = farengejt_v_celsij(znachenie)
    else:
        c = kelvin_v_celsij(znachenie)

    if c < ABSOLYUTNYJ_NOL_C:
        raise ValueError("температура ниже абсолютного нуля")

    return {"C": c, "F": celsij_v_farengejt(c), "K": celsij_v_kelvin(c)}
-300°C не существует
Абсолютный ноль задаёт минимально возможную температуру: -273.15°C, 0 K, -459.67°F. Любое значение ниже этой границы физически невозможно, и приложение отклоняет его явной ошибкой ValueError, а не молча выдаёт формально посчитанный, но бессмысленный результат.
K, а не °K
Единица SI называется кельвин, её символ: K. Правильная запись: 273.15 K: без знака ° и с пробелом между числом и символом. Такое обозначение задаёт SI Brochure; отсутствие ° не означает логическим следствием того, что шкала начинается при абсолютном нуле.

Формулы перевода остаются чистыми функциями без Tkinter, а окно создаётся только внутри main(), как и во всех остальных домашних проектах.

Полный код: projects/tkinter/temperature-converter/temperature_converter.py

Задание

★★ Самостоятельная задача
Шкала Ранкина

Добавьте перевод в шкалу Ранкина (R = (C + 273.15) × 9 / 5) и обратно, с той же проверкой на физически невозможные значения.

GitHubGitHub-практика

Issue «Add temperature converter», ветка feat/temperature-converter , тесты на 0°C = 32°F, 100°C = 212°F, 0°C = 273.15 K, -273.15°C = 0 K и на отказ принять значение ниже абсолютного нуля, Pull Request.

Практика: формулы и проверка абсолютного нуля
Модуль tkinter открывает нативное окно Python. Выполните практику локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →
Официальная документация
BIPM SI Brochure, 9th edition