鱼C论坛

 找回密码
 立即注册
查看: 2181|回复: 6

[已解决]为什么i+=1要放在while下 不能放在else下

[复制链接]
发表于 2017-8-1 11:21:57 | 显示全部楼层 |阅读模式

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

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

x
题目:爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
(小甲鱼温馨提示:步子太大真的容易扯着蛋~~~)


我看了答案后,自己写出来,结果 i+= 1 写到 else里了,导致每次运行虽然没报错,但是显示是空的
我再对比了答案,发现 i += 1 写在else 外面,我改了后就好了,放在else下不行,我感觉是没什么问题的呀

错误的
x = 7
i = 1
zongjie = 0
while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
        zongjie = 1
         
    else:
         x = 7 * (i+1)
         i += 1
        
if zongjie == 1:
    print('总共有',x,'层阶梯')
else:
    print('本题没有答案')


正确的

x = 7
i = 1
zongjie = 0
while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
        zongjie = 1
         
    else:
        x = 7 * (i+1)
    i += 1
        
if zongjie == 1:
    print('总共有',x,'层阶梯')
else:
    print('本题没有答案')
最佳答案
2017-8-1 11:26:03
。。。如果放在else里面,一旦前面的条件(if)为真的话,就死循环了,i的值永远不变
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-1 11:26:03 | 显示全部楼层    本楼为最佳答案   
。。。如果放在else里面,一旦前面的条件(if)为真的话,就死循环了,i的值永远不变
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-8-1 11:28:56 | 显示全部楼层
本帖最后由 圆冶治 于 2017-8-1 11:41 编辑

这就是有关python严谨的缩进了。
因为  else:
            x = 7 * (i+1)
            i += 1
这种情况下,i +=1 是必须会在else下才能执行,也就是说要if条件不满足后,执行else才会执行到i+=1的命令。
正确的情况下,i +=1是和if 和else 并列的条件,这样才会每次循环都能执行到。。。。不知道我说的对不对。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-1 11:32:33 | 显示全部楼层
小Q学Python 发表于 2017-8-1 11:26
。。。如果放在else里面,一旦前面的条件(if)为真的话,就死循环了,i的值永远不变

原来如此 恍然大悟 ,谢谢!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-2 12:25:02 | 显示全部楼层
x = 7
i = 1
zongjie = 0
while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
        zongjie = 1
         
    else:
        x = 7 * (i+1)
    i += 1
        
if zongjie == 1:
    print('总共有',x,'层阶梯')
else:
    print('本题没有答案')

这个正确答案,我个人觉得还是不太好,因为当 i = 17时,x的值为119(也就是正确答案),接下来循环还会继续执行直到 i>100,而这些循环是没有必要的;另外就是我们只能得到一个正确答案,因为 if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):条件第一次成立之后,就不会再去判断之后的x的值了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-2 12:33:29 | 显示全部楼层
你可以试下329 是不是也满足条件  
但上述代码没有得出这个结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-2 14:57:52 | 显示全部楼层
tester_cui 发表于 2017-8-2 12:25
x = 7
i = 1
zongjie = 0

支持第一个建议,在print('总共有',x,'层阶梯')后面加个break 可以吗?但是我实际操作就报错了。
  1. if zongjie == 1:
  2.     print('总共有',x,'层阶梯')
  3.     break
复制代码

这是我的一个想法。不懂哪里有问题报错了?错误信息是:"break" outside loop
然后第二个建议我觉得小甲鱼出题上没有说求最小的X是有点问题,但是如果接下去判断的话是可以无限得出答案的,我觉得也没有这个必要了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 05:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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