c_freeze_temp = 0.0
f_range = f_boil_temp — f_freeze_temp
c_range = c_boil_temp — c_freeze_temp
f_c_ratio = c_range / f_range
c_temp = (f_temp — f_freeze_temp) * f_c_ratio + c_freeze_temp
return c_temp
if __name__ == '__main__':
for f_temp in [-40.0, 0.0, 32.0, 100.0, 212.0]:
c_temp = ftoc(f_temp)
print('%f F => %f C' % (f_temp, c_temp))
Запустим тесты:
$ python ftoc1.py
-40.000000 F => -40.000000 C
0.000000 F => -17.777778 C
32.000000 F => 0.000000 C
100.000000 F => 37.777778 C
212.000000 F => 100.000000 C
352
Глава 12. Быть питонщиком
Мы можем сделать как минимум два улучшения.
В языке Python нет констант, но таблица стилей PEP-8 рекомендует (http://bit.ly/
pep-constant) использовать прописные буквы и подчеркивания (например,
ALL_CAPS) при именовании переменных, которые должны считаться константами.
Переименуем эти «константные» переменные в нашем примере.
Поскольку мы заранее вычислили значения, основываясь на константах, пере-
несем их в верхнюю часть модуля. Таким образом, они будут рассчитываться
только один раз при каждом вызове функции ftoc().
Так выглядит переделанный код:
F_BOIL_TEMP = 212.0
F_FREEZE_TEMP = 32.0
C_BOIL_TEMP = 100.0
C_FREEZE_TEMP = 0.0
F_RANGE = F_BOIL_TEMP — F_FREEZE_TEMP
C_RANGE = C_BOIL_TEMP — C_FREEZE_TEMP
F_C_RATIO = C_RANGE / F_RANGE
def ftoc(f_temp):
"Convert Fahrenheit temperature <f_temp> to Celsius and return it."
c_temp = (f_temp — F_FREEZE_TEMP) * F_C_RATIO + C_FREEZE_TEMP
return c_temp
if __name__ == '__main__':
for f_temp in [-40.0, 0.0, 32.0, 100.0, 212.0]:
c_temp = ftoc(f_temp)
print('%f F => %f C' % (f_temp, c_temp))
Тестируем код
Время от времени я делаю небольшое изменение в своем коде и говорю себе: «Вы-
глядит неплохо, можно отправлять». А затем все ломается. Ой! Каждый раз, когда
я делаю это (к счастью, со временем все реже и реже), я чувствую себя глупцом
и клянусь, что в следующий раз напишу еще больше тестов.
Самый простой способ протестировать программы, написанные на Python, —