#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?Используйте все, что облегчает вам жизнь. Существующие библиотеки, подобные встроенным стандартным, помогут вам достичь вашей цели с меньшим количеством строк кода, что, в свою очередь, сделает ваш проект чище. Другой момент в том, что вам не нужно заботиться о каждом пограничном случае, который, возможно, возможен, потому что модули и библиотеки могут позаботиться о вас. Это не значит, что вам не нужно тестировать свой код, но это упрощает жизнь.