鱼C论坛

 找回密码
 立即注册
查看: 1601|回复: 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 编辑
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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

ok 我改一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

只要思路对应该好写,我还没正式学python,不了解具体怎么写。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> 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在编码中的位置从 左边 换到了右边?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


多谢。你这个是最“忠于我原本意思”的解决方法,看懂了,非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 只重新恢复出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

高手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

厉害,我的python之路还有好长呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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