鱼C论坛

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

判断是否是闰年的小程序遇到问题

[复制链接]
发表于 2015-12-25 12:49:10 | 显示全部楼层 |阅读模式

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

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

x
这个是题目:

闰年.png


我的答案:
  1. temp = input('请输入一个年份:')
  2. while not temp.isdigit():
  3.     temp = input('请输入一个整数:')

  4. year = int(temp)
  5. if isinstance(year/4,int) and not isinstance(year/100,int):
  6.     print('闰年')
  7. else:
  8.     if isinstance(year/400,int):
  9.         print('闰年')
  10.     else:
  11.         print('平年')
复制代码


运行时输入2100显示是平年是正确的,但是输入2000却显示是平年是为什么???
求解答啦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-25 14:55:30 | 显示全部楼层
在py3中, /号是浮点除, 2000/400=5.0, 不是int. 这题我感觉用取余做比较好

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
碗碗的泡菜坛 + 5 + 5 + 2 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

发表于 2015-12-25 15:00:48 | 显示全部楼层
1. 首先不管是平年还是闰年,你这样除法的结果都是一个浮点数而非int
  1. In [1]: 2100/400
  2. Out[1]: 5.25

  3. In [2]: 2000/400
  4. Out[2]: 5.0
复制代码


2. so,不光你输入2000会显示平年,你所输入的所有整数都显示平年
  1. root@iZ25uz51fd7Z:~# python3 test.py
  2. 请输入一个年份:1
  3. 平年
  4. root@iZ25uz51fd7Z:~# python3 test.py
  5. 请输入一个年份:100
  6. 平年
  7. root@iZ25uz51fd7Z:~#
  8. root@iZ25uz51fd7Z:~# python3 test.py
  9. 请输入一个年份:2000
  10. 平年
  11. root@iZ25uz51fd7Z:~#
  12. root@iZ25uz51fd7Z:~# python3 test.py
  13. 请输入一个年份:99
  14. 平年
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
碗碗的泡菜坛 + 5 + 5 + 3 支持楼主!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2015-12-25 15:27:24 | 显示全部楼层
小川先生 发表于 2015-12-25 14:55
在py3中, /号是浮点除, 2000/400=5.0, 不是int. 这题我感觉用取余做比较好

原来是浮点除啊。。。。。恍然大悟囧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-25 15:27:59 | 显示全部楼层
VVFock3r 发表于 2015-12-25 15:00
1. 首先不管是平年还是闰年,你这样除法的结果都是一个浮点数而非int

好仔细的回答,弄明白了~~谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 15:39:05 | 显示全部楼层
碗碗的泡菜坛 发表于 2015-12-25 15:27
好仔细的回答,弄明白了~~谢谢

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

使用道具 举报

 楼主| 发表于 2015-12-25 16:16:18 | 显示全部楼层
本帖最后由 碗碗的泡菜坛 于 2015-12-25 16:17 编辑


啊,壮士,我还有问题
这题小甲鱼的做法是这样:
  1. temp = input('输入一个年份: ')
  2. while not temp.isdigit():
  3.     temp = input('请输入一个整数: ')

  4. year = int(temp)
  5. if year/400 == int(year/400):   #这句 左边是浮点除,右边怎么会== int?
  6.     print(temp + '是闰年!!')
  7. else:
  8.     if (year/4 == int(year/4)) and (year/100 != int(year/100)):
  9.         print(temp + '闰年!!')
  10.     else:
  11.         print(temp + '是平年!!')
  12.         
复制代码

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

使用道具 举报

发表于 2015-12-25 19:14:02 | 显示全部楼层
碗碗的泡菜坛 发表于 2015-12-25 16:16
啊,壮士,我还有问题
这题小甲鱼的做法是这样:

1.png

这些问题都可以试出来的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 19:49:09 | 显示全部楼层
碗碗的泡菜坛 发表于 2015-12-25 16:16
啊,壮士,我还有问题
这题小甲鱼的做法是这样:

小甲鱼判断的是数值,而你判断的是类型
  1. In [1]: 1 == 1.0
  2. Out[1]: True

  3. In [2]: isinstance(1, int) == isinstance(1.0, int)
  4. Out[2]: False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-25 21:10:33 | 显示全部楼层
小人 发表于 2015-12-25 19:14
这些问题都可以试出来的

真的哎 ~~!!!明白啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-25 21:11:07 | 显示全部楼层
VVFock3r 发表于 2015-12-25 19:49
小甲鱼判断的是数值,而你判断的是类型

恍然大悟~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-18 23:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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