Мой конвертер времени не добавляет минуты

#python

#python

Вопрос:

Я собираюсь использовать этот конвертер как часть задуманного проекта, но, похоже, он работает не так, как ожидалось. Часы указаны правильно, но минуты не добавляются. Кажется, я не могу понять, что здесь не так, но я думаю, что это в части «разделения». Преобразованное значение «9:30» на выходе равно 540, в котором не хватает 30 минут. То же самое касается «14:30». Спасибо, что ответили на этот вопрос.

Это мой код:

 schedule1 = [
    ["8:00", "9:30"],
    ["10:00", "11:00"],
    ["13:00", "14:30"],
    ["16:00", "17:00"]
]

def convert_schedule(schedule):
    converted_schedule = []
    for item in schedule:
        start = item[0]
        end = item[1]
        start_hour, start_minute = start.split(':')
        end_hour, end_minute = end.split(':')
        start_time = int(start_hour) * 60   int(start_minute)
        end_time = int(end_hour) * 60   int(start_minute)
        print(f'{start_time}-{end_time}')
  

Комментарии:

1. У вас есть start_minute в выражении для end_time

2. Если это не является обязательным требованием, чтобы вы реализовали это самостоятельно, вам, вероятно, следует использовать существующую библиотеку, такую как datetime .

3. Хотя вопрос можно было бы классифицировать как «вызванный опечаткой», что было бы достаточным основанием для его закрытия, стоило бы оставить его открытым на случай, если кто-то захочет добавить ответ, показывающий, как это можно сделать с помощью datetime .

4. Сделайте это еще проще, просто распакуйте их в выражении цикла, т.Е., for start, end in schedule:

5. @Kent_Erbert Скорее всего, здесь это будет закрыто, но вы могли бы спросить об исправленном фрагменте кода в Code Review , чтобы получить больше отзывов (и, возможно, даже datetime версию). И действительно, вы отлично справляетесь с двумя неделями кодирования!

Ответ №1:

Как уже упоминалось в комментариях, вы могли бы использовать библиотеку datetime для этого. Это один из способов сделать это, но наверняка есть и другие (возможно, более эффективные) способы:

Что здесь происходит?Прежде всего, я преобразовал время окончания в объект datetime, а время начала — в объект timedelta, чтобы вычесть их друг из друга. В итоге я преобразовал результат обратно в объект string.

 from datetime import datetime, timedelta

schedule1 = [
    ["8:00", "9:30"],
    ["10:00", "11:00"],
    ["13:00", "14:30"],
    ["16:00", "17:00"]
]

for period in schedule1:
    print((datetime.strptime(period[1], '%H:%M') - timedelta(hours=datetime.strptime(period[0], '%H:%M').hour, minutes=datetime.strptime(period[0], '%H:%M').minute)).strftime('%H:%M'))
  

Почему datetime?Используйте все, что облегчает вам жизнь. Существующие библиотеки, подобные встроенным стандартным, помогут вам достичь вашей цели с меньшим количеством строк кода, что, в свою очередь, сделает ваш проект чище. Другой момент в том, что вам не нужно заботиться о каждом пограничном случае, который, возможно, возможен, потому что модули и библиотеки могут позаботиться о вас. Это не значит, что вам не нужно тестировать свой код, но это упрощает жизнь.