Peteryo01223 发表于 2021-1-4 15:52:08

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个闰年呢?

提前感谢!

心驰神往 发表于 2021-1-4 16:12:03

判断一个年份是闰年的依据:
能被4整除且不能被100整除的为闰年;
能被400整除的是闰年。
你这个 条件1. 判断输入的年份,是否为闰年(即:能被4整除,但不能被400整除的年份)。不对吧

Peteryo01223 发表于 2021-1-4 16:13:56

心驰神往 发表于 2021-1-4 16:12
判断一个年份是闰年的依据:
能被4整除且不能被100整除的为闰年;
能被400整除的是闰年。


ok 我改一下

心驰神往 发表于 2021-1-4 16:15:31

Peteryo01223 发表于 2021-1-4 16:13
ok 我改一下

只要思路对应该好写,我还没正式学python,不了解具体怎么写。

jackz007 发表于 2021-1-4 16:25:09

本帖最后由 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>

逃兵 发表于 2021-1-4 16:47:38

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

Peteryo01223 发表于 2021-1-4 16:48:40

jackz007 发表于 2021-1-4 16:25
运行实况

厉害!
前面的 c , d , e = 0 , [] , y 和后面的 c , y = 0 , e我没看懂。能解释一下么?
1. 这三个量是对应 循环次数 位置 和 年份的吧?
2. 为什么前面 y 在 = 号右边,后面 y到了= 号右边?
3. e 是做什么用的?为何对于前10个和后10个,e在编码中的位置从 左边 换到了右边?

Peteryo01223 发表于 2021-1-4 17:04:43

逃兵 发表于 2021-1-4 16:47


多谢。你这个是最“忠于我原本意思”的解决方法,看懂了,非常感谢!

jackz007 发表于 2021-1-4 17:05: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 只重新恢复出来。

Peteryo01223 发表于 2021-1-4 17:12:52

jackz007 发表于 2021-1-4 17:05
c 当然是计数器,d 是空列表,之所以要设置这个列表,是因为前10个闰年需要倒推,算出来的值会 ...

高手

czzhbq 发表于 2021-1-5 09:48:52

jackz007 发表于 2021-1-4 16:25
运行实况

厉害,我的python之路还有好长呢
页: [1]
查看完整版本: FishC第五课:闰年问题的一个延展