i153.chayka
Исходный код:
Исходный код:
Наглядный пример минималистичного решения. Но как часто бывает в минималистичных решениях, инструкции слишком сильно сжимаются в кучу ради того, чтобы код занимал как можно меньше строк.
По PEP8 не рекомендуется записывать условие и тело условного оператора в одну строку. Поэтому вместо этого:
if hd > 23 or md > 59 or mt > 59: raise ValueError('invalid time')
Лучше написать вот это:
if hd > 23 or md > 59 or mt > 59:
raise ValueError('invalid time')
Да, это увеличивает размер функции на целых 25% :) Зато это улучшает читаемость кода.
return f'{((hd + ht % 24 + (md + mt) // 60) % 24):02d}:{((md + mt) % 60):02d}'
Такой код работает, но выглядит он невероятно громоздко. В одну кучу смешиваются и операторы с разным приоритетом, и спецификаторы форматирования, и скобки.
Лучше заранее выполнить вычисления, а f-строку собрать из готовых результатов, например, из переменных minutes
и hours
.
hd
, mt
, md
- такие имена часто используют математики-олимпиадники, привыкшие к коротким обозначениям i
, j
, k
. И когда речь идёт об олимпиадных задачах, которые пишутся 1 раз, а затем убираются в архив, то такой подход имеет право на жизнь.
Но если идёт речь о разработке продукта, который впоследствии будет поддерживаться и развиваться, то лучше выбирать более наглядные имена, которые не будут увеличивать когнитивную сложность кода, то есть не будут требовать от программиста дополнительных умственных усилий на то, чтобы вспомнить, что m
тут относится к минутам, а d
- к departure
.
Современные экраны с разрешением 1920х1080 и выше, а также IDE с функциями «найти» и «заменить» позволяют не экономить буквы и использовать наглядные имена для переменных, функций и других объектов.