鱼C论坛

 找回密码
 立即注册
查看: 1738|回复: 10

[已解决]FishC第五课:闰年问题的一个延展

[复制链接]
发表于 2021-1-4 15:52:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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:25:09
本帖最后由 jackz007 于 2021-1-4 16:28 编辑
  1. y = int(input('请输入一个年份:'))
  2. if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
  3.     print("%d 年是闰年" % y)
  4. else:
  5.     print("%d 年不是闰年" % y)
  6. c , d , e = 0 , [] , y
  7. print("%d 年前 10 个闰年分为:" % y)
  8. while c < 10:
  9.     y -= 1
  10.     if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
  11.         d . insert(0 , y)
  12.         c += 1
  13. for y in d:
  14.     print('\t%d' % y)
  15. c , y = 0 , e
  16. print("%d 年后 10 个闰年分为:" % y)
  17. while c < 10:
  18.     y += 1
  19.     if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
  20.         print('\t%d' % y)
  21.         c += 1     
复制代码

        运行实况
  1. D:\0002.Exercise\Python>python x.py
  2. 请输入一个年份:2020
  3. 2020 是闰年
  4. 2020 年前 10 个闰年分为:
  5.         1980
  6.         1984
  7.         1988
  8.         1992
  9.         1996
  10.         2000
  11.         2004
  12.         2008
  13.         2012
  14.         2016
  15. 2020 年后 10 个闰年分为:
  16.         2024
  17.         2028
  18.         2032
  19.         2036
  20.         2040
  21.         2044
  22.         2048
  23.         2052
  24.         2056
  25.         2060

  26. D:\0002.Exercise\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-4 16:12:03 | 显示全部楼层
判断一个年份是闰年的依据:
能被4整除且不能被100整除的为闰年;
能被400整除的是闰年。
你这个 条件1. 判断输入的年份,是否为闰年(即:能被4整除,但不能被400整除的年份)。不对吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-4 16:13:56 | 显示全部楼层
心驰神往 发表于 2021-1-4 16:12
判断一个年份是闰年的依据:
能被4整除且不能被100整除的为闰年;
能被400整除的是闰年。

ok 我改一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 16:15:31 | 显示全部楼层

只要思路对应该好写,我还没正式学python,不了解具体怎么写。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 16:25:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-4 16:28 编辑
  1. y = int(input('请输入一个年份:'))
  2. if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
  3.     print("%d 年是闰年" % y)
  4. else:
  5.     print("%d 年不是闰年" % y)
  6. c , d , e = 0 , [] , y
  7. print("%d 年前 10 个闰年分为:" % y)
  8. while c < 10:
  9.     y -= 1
  10.     if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
  11.         d . insert(0 , y)
  12.         c += 1
  13. for y in d:
  14.     print('\t%d' % y)
  15. c , y = 0 , e
  16. print("%d 年后 10 个闰年分为:" % y)
  17. while c < 10:
  18.     y += 1
  19.     if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
  20.         print('\t%d' % y)
  21.         c += 1     
复制代码

        运行实况
  1. D:\0002.Exercise\Python>python x.py
  2. 请输入一个年份:2020
  3. 2020 是闰年
  4. 2020 年前 10 个闰年分为:
  5.         1980
  6.         1984
  7.         1988
  8.         1992
  9.         1996
  10.         2000
  11.         2004
  12.         2008
  13.         2012
  14.         2016
  15. 2020 年后 10 个闰年分为:
  16.         2024
  17.         2028
  18.         2032
  19.         2036
  20.         2040
  21.         2044
  22.         2048
  23.         2052
  24.         2056
  25.         2060

  26. D:\0002.Exercise\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-4 16:47:38 | 显示全部楼层
  1. temp = input('请输入一个年份:')
  2. now = int(temp)
  3. if now%100 == 0:
  4.     if now%400 == 0:
  5.         print("公元"+ temp + "年是一个闰年")
  6.     else:
  7.         print("公元"+ temp + "年虽然能被4整除,但它不是闰年")
  8. elif now%4 == 0:
  9.     print("公元"+ temp + "年是一个闰年")

  10. else:
  11.     print("公元"+ temp + "年不是一个闰年")

  12. i = 43 # 逐一排查,此年份前40年当中的10个闰年,并列举出来。

  13. while i:
  14.     a = now-i
  15.     if a%100 == 0:
  16.         if a%400 == 0:
  17.             print(a)
  18.     elif a%4 == 0:
  19.         print(a)

  20.     i = i-1

  21. j = 43 # 逐一排查,此年份后40年中的10个闰年,并列举出来。

  22. while j:
  23.     b = now+j
  24.     if b%100 == 0:
  25.         if b%400 == 0:
  26.             print(b)
  27.     elif b%4 == 0:
  28.         print(b)

  29.     j = j-1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-4 16:48:40 | 显示全部楼层

厉害!
前面的 c , d , e = 0 , [] , y 和后面的 c , y = 0 , e我没看懂。能解释一下么?
1. 这三个量是对应 循环次数 位置 和 年份的吧?
2. 为什么前面 y 在 = 号右边,后面 y到了= 号右边?
3. e 是做什么用的?为何对于前10个和后10个,e在编码中的位置从 左边 换到了右边?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-4 17:04:43 | 显示全部楼层


多谢。你这个是最“忠于我原本意思”的解决方法,看懂了,非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 17:05:47 | 显示全部楼层
Peteryo01223 发表于 2021-1-4 16:48
厉害!
前面的 c , d , e = 0 , [] , y 和后面的 c , y = 0 , e我没看懂。能解释一下么?
1. 这三个量 ...

  1. c , d , e = 0 , [] , y
复制代码

      c 当然是计数器,d 是空列表,之所以要设置这个列表,是因为前10个闰年需要倒推,算出来的值会是从大到小的顺序,不符合我们数数的习惯,因此,设置这个列表来倒一下顺序;e 是用来保存当前 y 值的,以便 y 可以在循环中随意使用
  1. c , y = 0 , e
复制代码

      这里的 c 依然是计数器,而 y = e 则是把前期保存的 y 只重新恢复出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

高手
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 09:48:52 | 显示全部楼层

厉害,我的python之路还有好长呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表