鱼C论坛

 找回密码
 立即注册
查看: 2264|回复: 16

[已解决]关于判断闰年的代码疑问

[复制链接]
发表于 2017-8-4 06:06:32 | 显示全部楼层 |阅读模式

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

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

x
小甲鱼曾经提供过一个判断闰年的代码:
  1. temp = input('请输入一个年份:')
  2. while not temp.isdigit():
  3.     temp = input("抱歉,您的输入有误,请输入一个整数:")

  4. year = int(temp)
  5. if year/400 == int(year/400):
  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 + ' 不是闰年!')
复制代码


这里,我也有几个问题,想请教下各位:
1. 第4行处,为什么要空一行?
2. 这里的while语句貌似就只用来判断是否输入为整数啊?如果是这样的话,为什么还要用到while语句?
最佳答案
2017-8-4 12:01:09
老笨啊 发表于 2017-8-4 11:44
那就是如果输入正确,就不执行while语句,直接跳入下一行的if语句去执行了?
但是这样的话,如果输入的 ...
  1. while True:
  2.     temp = input('请输入一个年份:')
  3.     if not temp.isdigit():
  4.         temp = input("抱歉,您的输入有误,请输入一个整数:")
  5.     year = int(temp)
  6.     if year/400 == int(year/400):
  7.         print(temp + ' 是闰年!')
  8.     else:
  9.         if (year/4 == int(year/4)) and (year/100 != int(year/100)):
  10.             print(temp + ' 是闰年!')
  11.         else:
  12.             print(temp + ' 不是闰年!')

  13.    

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

使用道具 举报

发表于 2017-8-4 06:41:17 | 显示全部楼层
第四行不是必须空,空只是为了美观,把两段代码分开,视觉上好看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 06:43:39 | 显示全部楼层
本帖最后由 新手·ing 于 2017-8-4 11:36 编辑

while循环的确是为了判断,怎么不用呢,你想如果你第一次输入不是数字,那还有第二次吧,除非你第一次一定输入数字,就没有意义了,但是,万一不好好输入,不输入数字呢,你就要多次输入,就需要while

一直循环,直到你输入正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 08:28:20 | 显示全部楼层
1. 第4行处,为什么要空一行?
个人喜欢,一般是为了增强代码的可读性。
2. 这里的while语句貌似就只用来判断是否输入为整数啊?如果是这样的话,为什么还要用到while语句?
如果输入类型不正确,可以让你再次输入;直到输入的是整数为止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 08:52:37 From FishC Mobile | 显示全部楼层
while 不是为了判断而存在,是为了循环而存在。判断条件决定了什么时候继续循环,什么时候停止循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 11:44:39 | 显示全部楼层
新手·ing 发表于 2017-8-4 06:43
while循环的确是为了判断,怎么不用呢,你想如果你第一次输入不是数字,那还有第二次吧,除非你第一次一定 ...

那就是如果输入正确,就不执行while语句,直接跳入下一行的if语句去执行了?
但是这样的话,如果输入的是数字,执行一次,程序就完结了啊。。有没办法用while来允许一直输入?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 12:01:09 | 显示全部楼层    本楼为最佳答案   
老笨啊 发表于 2017-8-4 11:44
那就是如果输入正确,就不执行while语句,直接跳入下一行的if语句去执行了?
但是这样的话,如果输入的 ...
  1. while True:
  2.     temp = input('请输入一个年份:')
  3.     if not temp.isdigit():
  4.         temp = input("抱歉,您的输入有误,请输入一个整数:")
  5.     year = int(temp)
  6.     if year/400 == int(year/400):
  7.         print(temp + ' 是闰年!')
  8.     else:
  9.         if (year/4 == int(year/4)) and (year/100 != int(year/100)):
  10.             print(temp + ' 是闰年!')
  11.         else:
  12.             print(temp + ' 不是闰年!')

  13.    

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

使用道具 举报

发表于 2017-8-5 00:01:31 | 显示全部楼层
老笨啊 发表于 2017-8-4 11:44
那就是如果输入正确,就不执行while语句,直接跳入下一行的if语句去执行了?
但是这样的话,如果输入的 ...

把整个程序都放进while里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 06:21:57 | 显示全部楼层
本帖最后由 老笨啊 于 2017-8-5 06:25 编辑


while true这个语句是如何执行下去的?输入数字,怎么判断是ture 不是ture?  是不是说,你用了这个while ture,使得循环无法自动中断,会一直执行下面的命令,直到强制退出?
如果不是ture,又该如何执行命令呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 06:43:18 | 显示全部楼层

我自己改了下你的代码:
  1. while 1:
  2.     num = input('请输入一个年份:')
  3.     if not num.isdigit():
  4.         num = input('抱歉,您的输入有误,请输入一个整数:')
  5.     year = int(num)
  6.     if year % 400 == 0:
  7.         print(num + '是闰年!')
  8.     elif year % 4 == 0 and year % 100 != 0:
  9.         print(num + '是闰年!')
  10.     else:
  11.         print(num + '不是闰年!')
复制代码

我有几点疑问:
1. 第7,9,11行,print里面的num换成year,貌似会提示错误,为什么?
2. 如果第3行的if语句,不用not,,而是if num.isdigit():, 则else就没法执行循环了? 如果要改,该怎么做?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 08:41:47 | 显示全部楼层
老笨啊 发表于 2017-8-5 06:43
我自己改了下你的代码:

我有几点疑问:

如果你用加号连接,两个必须是同种类型
第三行的if没有对用的else啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 05:45:20 | 显示全部楼层
本帖最后由 老笨啊 于 2017-8-7 05:49 编辑
新手·ing 发表于 2017-8-5 08:41
如果你用加号连接,两个必须是同种类型
第三行的if没有对用的else啊


按照你的意思,第3行的if语句,必须用not num isdigit了?
或者,可以推理得出,类似的情况,用not来判定,下面的语句会好写很多?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 08:21:12 | 显示全部楼层
老笨啊 发表于 2017-8-7 05:45
按照你的意思,第3行的if语句,必须用not num isdigit了?
或者,可以推理得出,类似的情况,用not来 ...

你不写not没有意义,你在仔细看看
用这个函数的目的是让用户输入正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 11:39:35 | 显示全部楼层
新手·ing 发表于 2017-8-7 08:21
你不写not没有意义,你在仔细看看
用这个函数的目的是让用户输入正确

不太懂为什么不写not没有意义。。 那我们用while循环的时候,也有写成while 1的语句,不就是一直循环下去么? 我用的if num.isdigit(),就是判断输入的是否为数字,如果是,则执行下面的命令。。而用的if not num.isdigit(),则是说如果输入不是数字,则提示要求正确输入。我个人感觉上,貌似差不多吧。。就是逻辑上,两者不太一样。。但是结果却是你的比较好~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 11:46:38 | 显示全部楼层
老笨啊 发表于 2017-8-7 11:39
不太懂为什么不写not没有意义。。 那我们用while循环的时候,也有写成while 1的语句,不就是一直循环下去 ...

你有QQ吗,加我2398604337
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-8 05:46:47 | 显示全部楼层
新手·ing 发表于 2017-8-7 11:46
你有QQ吗,加我2398604337

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

使用道具 举报

发表于 2017-8-8 08:48:03 | 显示全部楼层

我给你解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-21 00:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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