Домашний проект E: преобразование температуры
Одна функция переводит значение в Цельсий и обратно, а отдельная проверка отклоняет невозможную температуру.
Небольшое, но по-настоящему полезное приложение: вводим температуру, выбираем единицу через переключатели и сразу видим значение во всех трёх шкалах: Цельсий, Фаренгейт, Кельвин:
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)}
ValueError, а не молча выдаёт формально посчитанный, но бессмысленный результат.K. Правильная запись: 273.15 K: без знака ° и с пробелом между числом и символом. Такое обозначение задаёт SI Brochure; отсутствие ° не означает логическим следствием того, что шкала начинается при абсолютном нуле.Формулы перевода остаются чистыми функциями без Tkinter, а окно создаётся только
внутри main(), как и во всех остальных домашних проектах.
Полный код: projects/tkinter/temperature-converter/temperature_converter.py
Задание
Добавьте перевод в шкалу Ранкина (R = (C + 273.15) × 9 / 5) и обратно, с той же проверкой на физически невозможные значения.
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.