Python在计算复杂方程中的大数时存在问题



我正在编写一些代码,允许用户输入秒数,并接收它输出的天数、小时、分钟和秒数。但是,如果输入大于311039999的数字,则小时数将变为24+,而不是0。

现在我编写了一些程序,告诉用户如果数字超过了前面提到的值,它就太大了,但是我想改变它,这样它就不再是一个问题了。

下面是我的代码:
user_sec= int(input("How many seconds are there? "))
#When max value is minutes, displays number of minutes
tot_min_min = user_sec/60
#When max value is minutes, displays number of seconds
tot_min_sec = user_sec%60
#When max value is hours, displays number of hours
tot_hr_hr = user_sec/3600
#When max value is hours, displays number of minutes
tot_hr_min = tot_min_min%60
#When max value is hours, displays number of seconds
tot_hr_sec = user_sec%60
#When max value is days, displays number of days
tot_day_day = user_sec/86400
#When max value is days, displays number of hours
tot_day_hr = tot_hr_hr/3600
#When max value is days, displays number of minutes
tot_day_min = tot_hr_min%60
#When max value is days, displays number of seconds
tot_day_sec = user_sec%60
if user_sec >= 311040000:
    print 'Your number is too large to calculate.'
elif user_sec >= 60 and user_sec < 3600:
        print '{} seconds makes {} minute(s) and {} second(s).'.format(user_sec,tot_min_min,tot_min_sec)
elif user_sec >= 3600 and user_sec < 86400:
        print '{} seconds makes {} hour(s), {} minute(s) and {} second(s).'.format(user_sec,tot_hr_hr,tot_hr_min,tot_hr_sec)
elif user_sec >= 86400 and user_sec < 311040000:
        print '{} seconds makes {} days(s), {} hour(s), {} minute(s) and {} second(s).'.format(user_sec,tot_day_day,tot_day_hr,tot_day_min,tot_day_sec)
else:
    print 'There is/are {} second(s).'.format(user_sec)

我正在使用Canopy,如果这有帮助的话。我很欣赏简单的答案,因为我才做了几个星期。

[编辑]这是我的问题的一个例子。如果user_sec = 1000000000,它会打印出"1000000000秒等于11574天、77小时、46分钟和40秒"。我不确定数学问题在哪里,但正确的答案是"11574天,1小时46分40秒。"

如果您不介意使用第三方模块,dateutil提供了一种简单的方法:

from dateutil.relativedelta import relativedelta
user_sec = int(input("How many seconds are there? "))
d = relativedelta(seconds=user_sec)
print(d)

如果输入351080000

,将输出如下内容
relativedelta(days=+4063, hours=+10, minutes=+13, seconds=+20)

从这里你可以打印出一个更用户友好的字符串:

print('{0} seconds makes {1.days} days(s), {1.hours} hour(s), {1.minutes} minute(s) and {1.seconds} second(s).'.format(user_sec, d))
351080000 seconds makes 4063 days(s), 10 hour(s), 13 minute(s) and 20 second(s).

否则,计算天数非常简单。小时、分、秒:

n = user_sec
days, n = divmod(n, 86400)
hours, n = divmod(n, 3600)
minutes, n = divmod(n, 60)
seconds = n
print('{} seconds makes {} days(s), {} hour(s), {} minute(s) and {} second(s).'.format(user_sec, days, hours, minutes, seconds))

最新更新