#python #date-arithmetic
#python #дата-арифметика
Вопрос:
Я пытаюсь выяснить, когда кому-то исполнится 1 миллиард секунд. пользовательские данные, когда они родились. Затем эти значения преобразуются в секунды, а затем я добавляю 1 миллиард секунд и конвертирую обратно в дату. Однако, когда я ввожу определенные даты, python, похоже, ошибается. Таким примером является 1993/11/05 00:00:00, где python говорит, что пользователь обратится в 0-й месяц. Обратите внимание, что я не могу использовать if / else или datetime.
Вот мой код:
YEARSEC=(12*30*24*3600)
MONTHSEC=(3600*24*30)
DAYSEC=(24*3600)
HOURSEC=3600
MINUTESEC=60
year=int(input("Please enter the year in which you were born: "))
month=int(input("Please enter the month you were born: "))
day=int(input("Please enter the day you were born: "))
hour=int(input("Please enter the hour you were born: "))
minute=int(input("Please enter the minute you were born: "))
second=int(input("Please enter the second you were born: "))
year_calc=(year*YEARSEC)
month_calc=(month*MONTHSEC)
day_calc=(day*DAYSEC)
hour_calc=(hour*HOURSEC)
minute_calc=(minute*MINUTESEC)
s=(1000000000 year_calc month_calc day_calc hour_calc minute_calc second)
year_num=int((s/YEARSEC))
s=(s-(year_num*YEARSEC))
month_num=int((s/MONTHSEC))
s=(s-(month_num*MONTHSEC))
day_num=int((s/DAYSEC))
s=(s-(DAYSEC*day_num))
hour_num=int((s/HOURSEC))
s=(s-(HOURSEC*hour_num))
minute_num=int((s/MINUTESEC))
s=(s-(MINUTESEC*minute_num))
print("You will turn 1 000 000 000 seconds old on: d/d/d d:d:d" %(year_num,month_num,day_num,hour_num,minute_num,s))
Комментарии:
1. Выполнение этого должным образом без
datetime
этого будет уродливым беспорядком… почему вы говорите, что не можете его использовать?2. Вероятно, это его домашнее задание 😉
Ответ №1:
Хотя я не проверял все это, я думаю, вы не сможете получить декабрь и день 30. Вы должны добавить 1 к day_num
и month_num
вызвать месяц и день, начинающиеся с 1, а не с 0.
print("You will turn 1 000 000 000 seconds old on: d/d/d d:d:d" %(year_num,month_num 1,day_num 1,hour_num,minute_num,s))
Ответ №2:
Расчеты времени — штука сложная. Например, не все месяцы имеют 30 дней. Часы, минуты и секунды нумеруются, начиная с 0, но дни и месяцы нумеруются, начиная с 1, создавая отдельные ошибки в ваших вычислениях (подсказка, попросите месяц, затем вычтите единицу, выполните все вычисления, затем добавьте единицу при его повторном отображении). Вы также не учитываете високосные годы.
Лучше всего использовать встроенные инструменты, хотя бы для проверки вашего возможного ответа на домашнее задание, хотя, похоже, учитель сказал предположить 30-дневные месяцы; ^)
>>> import datetime
>>> birthday = datetime.datetime(1993,11,05,0,0,0)
>>> billion = birthday datetime.timedelta(seconds=1000000000)
>>> billion.ctime()
'Mon Jul 14 01:46:40 2025'
Комментарии:
1. Я знаю, что дата-время было бы лучшим способом сделать это. Но я не могу. И да, в нем говорится, что предполагается 30-дневный месяц. Но большое спасибо