Я пытаюсь написать функцию на 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 частей в зависимости от разделителя. Доступ к ним по индексу, это будет просто список.