FishC第五课:闰年问题的一个延展
本帖最后由 Peteryo01223 于 2021-1-4 16:31 编辑题目:
写一个程序,
1. 判断输入的年份,是否为闰年(即:能被4整除,但不能被400整除的年份)。
2. 同时列举出,此年分,前后各10个闰年的具体年份。
我的尝试:
temp = input('请输入一个年份:')
now = float(temp)
if now%400 == 0:
print("公元"+ temp + "年是一个闰年")
elif now%4 ==0 and now%100 !=0:
print("公元"+ temp + "年是一个闰年")
else:
print("公元"+ temp + "年不是闰年")
i = 40 # 逐一排查,此年份前40年当中的10个闰年,并列举出来。
a = now-i
while i:
if a%4 == 0 :
if a%400 != 0:
print(a)
else:
pass
else:
pass
i = i-1
j = 40 # 逐一排查,此年份后40年中的10个闰年,并列举出来。
b = now+j
while j:
if a%4 == 0 :
if a%400 != 0:
print(b)
else:
pass
else:
pass
j = j-1
我的提问:
1. 本程序中,判断闰年的部分,正确。但列举前后各10个闰年的部分,即:两个while循环,没显示,哪里错?我该怎么改呢?
2. 如果列举的年份中,有2000年这种可以被400整除的,其实就只能显示9个闰年了,即:40年逐一排查的时候少了一个有效的闰年,我该怎么用简洁的方式,告诉程序,此情况下,再补充一个闰年进来,保证前后都显示10个闰年呢?
提前感谢! 判断一个年份是闰年的依据:
能被4整除且不能被100整除的为闰年;
能被400整除的是闰年。
你这个 条件1. 判断输入的年份,是否为闰年(即:能被4整除,但不能被400整除的年份)。不对吧 心驰神往 发表于 2021-1-4 16:12
判断一个年份是闰年的依据:
能被4整除且不能被100整除的为闰年;
能被400整除的是闰年。
ok 我改一下 Peteryo01223 发表于 2021-1-4 16:13
ok 我改一下
只要思路对应该好写,我还没正式学python,不了解具体怎么写。 本帖最后由 jackz007 于 2021-1-4 16:28 编辑
y = int(input('请输入一个年份:'))
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
print("%d 年是闰年" % y)
else:
print("%d 年不是闰年" % y)
c , d , e = 0 , [] , y
print("%d 年前 10 个闰年分为:" % y)
while c < 10:
y -= 1
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
d . insert(0 , y)
c += 1
for y in d:
print('\t%d' % y)
c , y = 0 , e
print("%d 年后 10 个闰年分为:" % y)
while c < 10:
y += 1
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
print('\t%d' % y)
c += 1
运行实况
D:\0002.Exercise\Python>python x.py
请输入一个年份:2020
2020 是闰年
2020 年前 10 个闰年分为:
1980
1984
1988
1992
1996
2000
2004
2008
2012
2016
2020 年后 10 个闰年分为:
2024
2028
2032
2036
2040
2044
2048
2052
2056
2060
D:\0002.Exercise\Python> temp = input('请输入一个年份:')
now = int(temp)
if now%100 == 0:
if now%400 == 0:
print("公元"+ temp + "年是一个闰年")
else:
print("公元"+ temp + "年虽然能被4整除,但它不是闰年")
elif now%4 == 0:
print("公元"+ temp + "年是一个闰年")
else:
print("公元"+ temp + "年不是一个闰年")
i = 43 # 逐一排查,此年份前40年当中的10个闰年,并列举出来。
while i:
a = now-i
if a%100 == 0:
if a%400 == 0:
print(a)
elif a%4 == 0:
print(a)
i = i-1
j = 43 # 逐一排查,此年份后40年中的10个闰年,并列举出来。
while j:
b = now+j
if b%100 == 0:
if b%400 == 0:
print(b)
elif b%4 == 0:
print(b)
j = j-1
jackz007 发表于 2021-1-4 16:25
运行实况
厉害!
前面的 c , d , e = 0 , [] , y 和后面的 c , y = 0 , e我没看懂。能解释一下么?
1. 这三个量是对应 循环次数 位置 和 年份的吧?
2. 为什么前面 y 在 = 号右边,后面 y到了= 号右边?
3. e 是做什么用的?为何对于前10个和后10个,e在编码中的位置从 左边 换到了右边? 逃兵 发表于 2021-1-4 16:47
多谢。你这个是最“忠于我原本意思”的解决方法,看懂了,非常感谢! Peteryo01223 发表于 2021-1-4 16:48
厉害!
前面的 c , d , e = 0 , [] , y 和后面的 c , y = 0 , e我没看懂。能解释一下么?
1. 这三个量 ...
c , d , e = 0 , [] , y
c 当然是计数器,d 是空列表,之所以要设置这个列表,是因为前10个闰年需要倒推,算出来的值会是从大到小的顺序,不符合我们数数的习惯,因此,设置这个列表来倒一下顺序;e 是用来保存当前 y 值的,以便 y 可以在循环中随意使用
c , y = 0 , e
这里的 c 依然是计数器,而 y = e 则是把前期保存的 y 只重新恢复出来。 jackz007 发表于 2021-1-4 17:05
c 当然是计数器,d 是空列表,之所以要设置这个列表,是因为前10个闰年需要倒推,算出来的值会 ...
高手 jackz007 发表于 2021-1-4 16:25
运行实况
厉害,我的python之路还有好长呢
页:
[1]