yongever 发表于 2019-8-11 09:08:29

由一个课后作业想到的宇宙和时间问题


第005讲:闲聊之Python的数据类型
1. 写一个程序,判断给定年份是否为闰年。


那么某一年是不是闰年该怎么判断呢?

通常的判断方法是:

A: 可以被4整除的,但不能被100整除

B: 可以被400整除

只要满足AB任意一种情况就是闰年。


当我们会判断之后,那问题来了,为什么会有闰年?

大家都知道,地球自转一周需要24小时,地球绕太阳一圈需要365天。

但事实上这只是一个比较笼统的说法,确切来说,地球自转一周需要的是23小时56分4秒,而地球绕太阳一圈需要的是365天5小时48分46秒 。

为了方便,我们把平年定为365天。不过这样实际上就会少算了5小时48分46秒,4年就相差了23小时15分4秒,也就是说4年就少算了近一天。于是机智的古人,就想了办法,每四年就规定了1个闰年,然后把这一天加在闰年的二月上,来补上少算的时间。

不过这样又会产生一个问题, 因为我们把每4年相差的23小时15分4秒≈24小时。这样就相当于多算了44分56秒,400年之后,就会多出了大约3天来。

因此,每400年需要减掉3个闰年,所以能被100整除,不能被400整除的不能是闰年。

看到没,宇宙的规律也不是完美的,就连我们平时用的时间都需要不停的打补丁
那你还有什么理由对python要求这么苛刻呢!

好了,程序如下:

temp = input('输入一个年份: ')
while not temp.isdigit():
    temp = input('抱歉,您输入有误,请输入正确的年份:')
yearnumber = int(temp)
if yearnumber/400 == int(yearnumber/400):
    print(temp+'是闰年')
elif yearnumber/4 == int(yearnumber/4) and yearnumber/100 != int(yearnumber/100):
    print(temp+'是闰年')
else:
    print(temp+'不是闰年')

那么问题来了:为什么不把地球自转一周需要的23小时56分4秒,重新定义为“新的24小时”呢?或者把地球绕太阳一圈需要的365天5小时48分46秒重新定义为“新的365天”呢?谈谈你的想法吧~~

zltzlt 发表于 2019-8-11 09:17:33

楼主的推理很细致,不过我发现一个小错误:世界没有公元 0 年,所以要判断用户输入的年份是不是 0:
temp = input('输入一个年份: ')
while not temp.isdigit():
    temp = input('抱歉,您输入有误,请输入正确的年份:')
while not int(temp):
    temp = input('抱歉,您输入有误,请输入正确的年份:')
yearnumber = int(temp)
if yearnumber/400 == int(yearnumber/400):
    print(temp+'是闰年')
elif yearnumber/4 == int(yearnumber/4) and yearnumber/100 != int(yearnumber/100):
    print(temp+'是闰年')
else:
    print(temp+'不是闰年')

yongever 发表于 2019-8-11 09:27:24

zltzlt 发表于 2019-8-11 09:17
楼主的推理很细致,不过我发现一个小错误:世界没有公元 0 年,所以要判断用户输入的年份是不是 0:

谢谢大哥,古人果然没学过编程,起始都不从零开始{:5_109:}
页: [1]
查看完整版本: 由一个课后作业想到的宇宙和时间问题