Я пытаюсь написать функцию на python, с помощью которой я могу ввести время начала и время окончания, и она вернет общее количество часов.
В настоящее время мне удалось написать функцию, в которую я ввожу, например («07:30:00», «12:00:00»), и она возвращает 4,5.
Я хочу иметь возможность импортировать список. Например,
('07:30:00, 08:30:00', '12:00:00, 12:00:00') и вернуть 4.5 , 3.5 и т.д....
Как мне изменить свой код, чтобы я мог это сделать?
Спасибо
Я возился часами, но я очень новичок в python, поэтому не знаю, как продвигаться дальше.
def compute_opening_duration(opening_time, closing_time):
while True:
try:
FORMAT = '%H:%M:%S'
tdelta = datetime.strptime(closing_time, FORMAT) - datetime.strptime(opening_time, FORMAT)
tdelta_s = tdelta.total_seconds()
tdelta_m = tdelta_s/60
tdelta_h = tdelta_m/60
print(tdelta_h)
break
except ValueError:
print('-1')
break






Передать массив в качестве параметра функции. Проверьте, имеет ли массив времени открытия ту же длину, что и длина массива времени закрытия. Объявите массив результатов, в строке, где вы вычисляете tdelta, вы должны добавить его к массиву результатов.
def compute_opening_duration(opening_time_arr, closing_time_arr):
if len(opening_time_arr) != len(closing_time_arr):
return
resultTime = []
for idx, closing_timein enumerate(closing_time_arr) :
try:
FORMAT = '%H:%M:%S'
tdelta = datetime.strptime(closing_time, FORMAT) -
datetime.strptime(opening_time_arr[idx], FORMAT)
resultTime.append(tdelta)
tdelta_s = tdelta.total_seconds()
tdelta_m = tdelta_s/60
tdelta_h = tdelta_m/60
#print(tdelta_h)
except ValueError:
pass
#print('-1')
return resultTime
Как я могу получить результат и сохранить его как np.array БЕЗ печати функции в фоновом режиме. Я пытаюсь определить array = np.array(compute_blah_blah), но он продолжает печатать.
Вы просите функцию печати? Или другой?
Я хотел бы распечатать его позже, как только я преобразовал его в массив. Я пробовал Return вместо печати, но это возвращает ошибки
Ошибка в операторе if. Более того, я меняю функцию печати на проход. Какой тип ошибки у вас есть и в какой строке кода?
Ошибок нет, код работает отлично. Однако я хочу преобразовать его в массив.
x = np.array(compute_opening_duration(open_arr, close_arr) . Когда я это делаю, он все равно печатает все значения, когда я этого не хочу. Я пробовал return вместо print в функции, поэтому он не печатает whne Я пытаюсь преобразовать, но это не работает.
Сначала попробуйте вычислить в одной строке y = calculate_opening_duration(open_arr, close_arr), чем присвоить x как np.array(y). Во-вторых, не могли бы вы попробовать это: stackoverflow.com/a/15868531/4510954
Не повезло, если я попытаюсь преобразовать в массив, все, что я получу, это "Нет"
Если я правильно понял вопрос
def compute_opening_duration(time_list):
# convert to datetime:
FORMAT = '%H:%M:%S'
time_list = [datetime.strptime(time, FORMAT) for time in time_list]
# compute and return deltas
return [(close_time-open_time).total_seconds()/3600
for open_time, close_time in zip(time_list[:-1], time_list[1:])
Умный подход. Выглядит отлично для меня. Один вопрос, не могли бы вы пояснить, как здесь работает функция zip? Спасибо!
Спасибо! zip создает генератор, который выводит пары последовательных моментов времени из time_list, объединяя элементы с индексами 0,...,n-2 с индексами (1,...,n-1) соответственно (два списковых включения во входных данных zip)
Дополнительные параметры означают дополнительные проверки. Вы проходите несколько раз в одном параметре, поэтому вы должны разделить их.
opening_time.split(',')выполнит свою работу. Он разобьет строку на n частей в зависимости от разделителя. Доступ к ним по индексу, это будет просто список.