鱼C论坛

 找回密码
 立即注册
查看: 2839|回复: 9

[已解决]Python第五讲,课后习题,判断是否为闰年!

[复制链接]
发表于 2020-11-5 21:52:41 | 显示全部楼层 |阅读模式

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

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

x
temp = input('请输入一个年份:')
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")

year = int(temp)
if year/400 == int(year/400):
    print(temp + ' 是闰年!')
else:
    if (year/4 == int(year/4)) and (year/100 != int(year/100)):
        print(temp + ' 是闰年!')
    else:
        print(temp + ' 不是闰年!')

在这里从第二行代码开始就有点不太明白是什么意思了,我知道是要开始循环了,但是循环的not temp.isdigit():,这里表示的是循环所有字符都为整数吗?

还有year/400这里是表示的是计算闰年的方式吗?

if (year/4 == int(year/4)) and (year/100 != int(year/100)):,这一句也不太明白是什么意思!

请大神们指教!!
最佳答案
2020-11-5 22:27:22
temp = input('请输入一个年份:')                         # temp 内容是一个字符串
while not temp.isdigit():                                # 如果字符串 temp 不是全部由数字字符构成就一直循环
    temp = input("抱歉,您的输入有误,请输入一个整数:") # 重新从键盘获取 temp
# 代码能够执行到这里,说明 temp 已经是全部由数字字符构成的字符串
year = int(temp)                                         # 从 temp 中提取整型数,保存到变量 year 中 
if year/400 == int(year/400):                            # 如果 year 能被 400 整除
    print(temp + ' 是闰年!')
else:                                                    # 否则
    if (year/4 == int(year/4)) and (year/100 != int(year/100)):  # 如果 year 可以被 4 整除,同时,又不能被 100 整除
        print(temp + ' 是闰年!')
    else:                                                        # 否则 
        print(temp + ' 不是闰年!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-5 21:57:30 | 显示全部楼层
not temp.isdigit():,
这里时判断输入为数字组成,因为下面需要转化为int型,如果含有数字以外的内容会出错

year/400 == int(year/400):
这句的意思是,year可以整除400

if (year/4 == int(year/4)) and (year/100 != int(year/100))
这句的意思时,可以被四百整除却不能被100整除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 21:58:02 | 显示全部楼层
闰年分为普通闰年和世纪闰年。
普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年(如2004年、2020年就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 22:27:22 | 显示全部楼层    本楼为最佳答案   
temp = input('请输入一个年份:')                         # temp 内容是一个字符串
while not temp.isdigit():                                # 如果字符串 temp 不是全部由数字字符构成就一直循环
    temp = input("抱歉,您的输入有误,请输入一个整数:") # 重新从键盘获取 temp
# 代码能够执行到这里,说明 temp 已经是全部由数字字符构成的字符串
year = int(temp)                                         # 从 temp 中提取整型数,保存到变量 year 中 
if year/400 == int(year/400):                            # 如果 year 能被 400 整除
    print(temp + ' 是闰年!')
else:                                                    # 否则
    if (year/4 == int(year/4)) and (year/100 != int(year/100)):  # 如果 year 可以被 4 整除,同时,又不能被 100 整除
        print(temp + ' 是闰年!')
    else:                                                        # 否则 
        print(temp + ' 不是闰年!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 22:32:26 | 显示全部楼层
1、not temp.isdigit():
temp.isdigit()  字符串的方法函数,如果字符串中至少有一个字符并且所有字符都是数字则返回 True,否则返回 False
详解:字符串的方法及注释,《零基础入门学习Python》,Python交流,鱼C论坛 - Powered by Discuz!
https://fishc.com.cn/forum.php?m ... peid%26typeid%3D403

not表示对temp.isdigit()返回值取反,例如temp.isdigit()结果为Ture,则not temp.isdigit()结果为False

2、if year/400 == int(year/400)
(1)能整除400的是闰年,而且是世纪闰年(自行百度闰年的概念)
(2)这个语句的意思是,year/400如果不能整除,则结果是小数,int(year/400)则是取year/400计算结果的整数部分。
例如year = 2020,year/400 结果是5.05,而int(year/400)结果是5,通过这个可以判断是否能整除了

3、if (year/4 == int(year/4)) and (year/100 != int(year/100))
其他的同2的详解。
and表示并且,!=表示不等于
这句翻译成下:如果(条件1)并且(条件2)
也就是说,如果能整除4并且不能整除100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 22:41:21 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-5 22:48 编辑

        判断闰年,楼主提供的代码非常非常蹩脚,特别是判断整除的方法根本就不可取,我这里提供一个好得多的版本谨供楼主参考
#coding:gbk

while True :                                              # 死循环,如果不使用 break 语句退出,将一直循环
    try:                                                  # 试探风险
        year = int(input('请输入一个年份:') . strip())   # 风险语句,当键入内容无法使用 int() 函数提取出整型数时,将会出错,然后直接跳到 except 语句处继续执行。
        break                                             # 代码执行到这里时,说明已经成功提取到了变量 year,所以,退出循环
    except:
        print('请输入整型数!\n')
                                                          # 代码执行到这里时,说明已经成功提取到了变量 year
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:  #  如果 year 能被 4 整除,同时不能被 100 整除,或者,year 能够被 400 整除
    print(year , '是闰年')
else:
    print(year , '不是闰年') 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-6 01:10:52 | 显示全部楼层
每400年中有97年里面二月多一天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 13:16:12 | 显示全部楼层
昨非 发表于 2020-11-5 21:58
闰年分为普通闰年和世纪闰年。
普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年(如2004年、 ...

谢谢您的解答,对于这几行代码,已经基本上能够理解, 还顺便给科普了下闰年的特性和算法,很透彻清晰。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 13:17:55 | 显示全部楼层
笨鸟学飞 发表于 2020-11-5 22:32
1、not temp.isdigit():
temp.isdigit()  字符串的方法函数,如果字符串中至少有一个字符并且所有字符都是 ...

谢谢您的解答,此次解答条理清晰,话语通俗易懂,很容易理解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-7 13:23:05 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-7 16:42 编辑
kogawananari 发表于 2020-11-6 01:10
每400年中有97年里面二月多一天


      公元 1582 年 10 月 4 日以前推行的是儒略历,这种历法以 100 年为周期,每 4 年一闰,100 年 25 闰,400 年 100 闰,从这一天的次日,也就是 1582 年 的 10 月 15 日起(1582 年 10 月 5 - 14 日一共 10 天在日历上从来就没有存在过,用于消除前期历法累积的误差),开始采用现在的格里历,格里历以 400 年为周期,按每 4 年一闰,但是, 扣除其中 100、200、300 的三个闰年,这才有了每 400 年 97 闰的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 23:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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