鱼C论坛

 找回密码
 立即注册
查看: 1648|回复: 5

[已解决]各位大神,求助这道课后题我的解法为啥不对啊?

[复制链接]
发表于 2021-7-8 13:28:18 | 显示全部楼层 |阅读模式

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

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

x
题目:第五节课后题动动手1.写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的 BIF 进行灵活运用).这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年。       
我的解答:
temp = input("请输入年份数字:")       
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if isinstance(year/400,int):
    print("闰年")  
else:
    if isinstance(year/4,int) and not isinstance(year/100,int):
        print("闰年")
    else:
        print("不是闰年")
这个解法经实例2000(系统给出结果:不是闰年)验证明显不对,百思不得骑姐~初学小白求助大神
最佳答案
2021-7-9 09:42:47
isinstance 函数是判断 第一参数对象 是否属于 第二参数的实例,而 Python 中只要使用 / 除法,那么得到的结果就一定为 浮点型

例如:
>>> a = 10
>>> b = a / 2
>>> print(b)
5.0
>>> print(type(b))
<class 'float'>

所以这里 isinstance 不管 year 为多少,始终都为 float 型则导致 if 条件始终不成立,所以我们这儿不能用 isinstance 函数

可以用 % 求余来判断是否被整除:
temp = input("请输入年份数字:")
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if not year % 400:
    print("闰年")
else:
    if not year % 4 and year % 100:
        print("闰年")
    else:
        print("不是闰年")

也可以与 int 转化后的值进行比较,看下两值是否相等:
temp = input("请输入年份数字:")
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if year/400 == int(year/400):
    print("闰年")  
else:
    if year/4 == int(year/4) and year / 100 != int(year/100):
        print("闰年")
    else:
        print("不是闰年")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-8 13:36:22 | 显示全部楼层
本帖最后由 fish_nian 于 2021-7-8 13:38 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-8 13:37:18 | 显示全部楼层
本帖最后由 逃兵 于 2021-7-8 13:40 编辑
>>> 2000/400
5.0

这样计算出来的是浮点数,所以不满足int的需求
temp = input("请输入年份数字:")       
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if not year%400:
    print("闰年")  
else:
    if not year%4 and year%100:
        print("闰年")
    else:
        print("不是闰年")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-9 09:42:47 | 显示全部楼层    本楼为最佳答案   
isinstance 函数是判断 第一参数对象 是否属于 第二参数的实例,而 Python 中只要使用 / 除法,那么得到的结果就一定为 浮点型

例如:
>>> a = 10
>>> b = a / 2
>>> print(b)
5.0
>>> print(type(b))
<class 'float'>

所以这里 isinstance 不管 year 为多少,始终都为 float 型则导致 if 条件始终不成立,所以我们这儿不能用 isinstance 函数

可以用 % 求余来判断是否被整除:
temp = input("请输入年份数字:")
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if not year % 400:
    print("闰年")
else:
    if not year % 4 and year % 100:
        print("闰年")
    else:
        print("不是闰年")

也可以与 int 转化后的值进行比较,看下两值是否相等:
temp = input("请输入年份数字:")
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if year/400 == int(year/400):
    print("闰年")  
else:
    if year/4 == int(year/4) and year / 100 != int(year/100):
        print("闰年")
    else:
        print("不是闰年")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-7-9 13:35:30 | 显示全部楼层
Twilight6 发表于 2021-7-9 09:42
isinstance 函数是判断 第一参数对象 是否属于 第二参数的实例,而 Python 中只要使用 / 除法,那么得到的 ...

谢谢大佬解答,明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-9 13:36:14 | 显示全部楼层
逃兵 发表于 2021-7-8 13:37
这样计算出来的是浮点数,所以不满足int的需求

谢谢大佬解答,明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 18:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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