Marayg

Исходный код:

Здесь практически всё отлично. Логика разделена по функциям, используются аккуратные конструкции без избыточной сложности. Тем не менее, есть 3 нюанса.

Исключения

Стоило бы добавить поясняющие сообщения к исключениям. Сейчас функция time_to_minutes() может выбросить ValueError по разным причинам, но пользователь не узнает, из-за чего конкретно это случилось. План-минимум - хотя бы передать значение, которое вызвало ошибку:

raise ValueError(minutes)

Но ещё лучше - дать развёрнутое пояснение причины, по которой возникло исключение:

raise ValueError('Минуты должны находиться в диапазоне от 0 до 59 включительно')

Имена переменных

В функции calc_arrival() можно улучшить имена переменных.

arrival - это «прибытие». Но в переменной хранится количество минут, точнее, время, представленное в виде количества минут. Я бы использовал что-нибудь вроде time_in_minutes. Подсознательно вариант кажется не до конца доработанным, так что скорее всего, при наличии свободного времени подумал бы над ним ещё. Но в качестве начального варианта пойдёт.

hours_arrival, minutes_arrival - так как в функции изначально идёт речь только о прибытии, то дополнение _arrival здесь можно убрать. Оно не добавляет смысла по сравнению с hours и minutes, зато удлиняет каждое имя более чем в 2 раза.

def calc_arrival(departure, travel_time):
    time_in_minutes = time_to_minutes(departure) + time_to_minutes(travel_time, False)
    hours = (time_in_minutes // 60) % 24
    minutes = time_in_minutes % 60
    return f'{hours:02}:{minutes:02}'

Лишние скобки

Речь про эту строку:

hours_arrival = (arrival // 60) % 24

Операторы // и % имеют одинаковый приоритет, поэтому скобки можно просто убрать, результат не изменится.

Итоговый код

Ещё немного причесал структуру time_to_minutes(), разбив код на логические блоки.