Попытка написать дельта-функцию времени

Я пытаюсь написать функцию на 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

Дополнительные параметры означают дополнительные проверки. Вы проходите несколько раз в одном параметре, поэтому вы должны разделить их. opening_time.split(',') выполнит свою работу. Он разобьет строку на n частей в зависимости от разделителя. Доступ к ним по индексу, это будет просто список.

Aleksandar 10.04.2019 08:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Передать массив в качестве параметра функции. Проверьте, имеет ли массив времени открытия ту же длину, что и длина массива времени закрытия. Объявите массив результатов, в строке, где вы вычисляете 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), но он продолжает печатать.

Oliver Wright 10.04.2019 08:38

Вы просите функцию печати? Или другой?

ElConrado 10.04.2019 08:46

Я хотел бы распечатать его позже, как только я преобразовал его в массив. Я пробовал Return вместо печати, но это возвращает ошибки

Oliver Wright 10.04.2019 08:55

Ошибка в операторе if. Более того, я меняю функцию печати на проход. Какой тип ошибки у вас есть и в какой строке кода?

ElConrado 10.04.2019 08:56

Ошибок нет, код работает отлично. Однако я хочу преобразовать его в массив.

Oliver Wright 10.04.2019 09:01

x = np.array(compute_opening_duration(open_arr, close_arr) . Когда я это делаю, он все равно печатает все значения, когда я этого не хочу. Я пробовал return вместо print в функции, поэтому он не печатает whne Я пытаюсь преобразовать, но это не работает.

Oliver Wright 10.04.2019 09:02

Сначала попробуйте вычислить в одной строке y = calculate_opening_duration(open_arr, close_arr), чем присвоить x как np.array(y). Во-вторых, не могли бы вы попробовать это: stackoverflow.com/a/15868531/4510954

ElConrado 10.04.2019 09:05

Не повезло, если я попытаюсь преобразовать в массив, все, что я получу, это "Нет"

Oliver Wright 10.04.2019 09:10

Если я правильно понял вопрос

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? Спасибо!

Swadhikar 10.04.2019 09:05

Спасибо! zip создает генератор, который выводит пары последовательных моментов времени из time_list, объединяя элементы с индексами 0,...,n-2 с индексами (1,...,n-1) соответственно (два списковых включения во входных данных zip)

Yuri Feldman 10.04.2019 09:55

Другие вопросы по теме