#python #time
#python #время
Вопрос:
У меня есть вопрос относительно кода. Я только что начал курс программирования, и это, очевидно, не очень эффективный код. Это часть большего кода, но именно здесь я получаю неверный вывод.
У меня есть расстояние в км, скорость в км / ч и время прибытия (arr) в виде списка [месяц, день, час, минута] Я использовал y = time.time()-1577793600, чтобы получить текущее время в секундах в этом году. (число, которое я вычитаю, — это количество секунд, прошедших со времени эпохи Unix. (Я знаю, что это ужасный способ сделать это, но я подумал, что это имеет смысл). Кроме того, time_to_destination — это время, необходимое для того, чтобы добраться до места назначения за считанные секунды.
import time
distance = 1000
speed = 3
arrival = [10, 13, 11, 30]
y = time.time()-1577793600
time_to_destination = (distance*1000) / (speed / 3.6)
arr = ((arrival[0]-1)*(30*24*3600) (arrival[1]-1)*(24*3600) (arrival[2])*(3600) (arrival[3]))
ti = arr - time_to_destination
if arr < y:
return 'Date is in the past'
elif y > ti:
return 'You are too late'
Однако это должно вернуть «Вы опоздали», поскольку время прибытия не прошло, но я не могу сделать это с той скоростью, которую я указал. Однако вывод «Дата в прошлом». Почему это так?
Ответ №1:
Что касается ваших переменных: 1577793600
на самом деле вторник, 31 декабря 2019 года, 12:00:00 вечера. Разве это не должно быть 1577836800
?
Также не происходит преобразования для параметра минут. Вам нужно умножить минуты на 60.
arr = ((arrival[0]-1)*(30*24*3600) (arrival[1]-1)*(24*3600) (arrival[2])*(3600) (arrival[3]*(60)))
Использование 30 в качестве количества дней в месяц также является приближением, которое может дать вам ложные результаты.
Я бы действительно рекомендовал заглянуть в модуль datetime
Комментарии:
1. Спасибо за ваш ответ! Я изучу это. Я знаю, что 30 дней в месяц неверно, однако это то, что они использовали в упражнении. (Это для начинающих)
Ответ №2:
Выходные данные ваших переменных выглядят следующим образом:
ti : 23204430.0
y : 24713466.130041838
arr: 24404430
Таким образом, исходя из этого, условие if-else будет проверять первое условие, if arr < y
которое должно быть false, чтобы перейти к следующему условию. Поскольку оно становится истинным в самом первом условии 24713466.130041838 > 24404430
, оно не переходит ко второму условию.
Либо вам нужно выбрать правильное преобразование даты для ввода условия if-else, либо выбрать соответствующую переменную