鱼C论坛

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

[已解决]python 006 课后练习题,动动手.2 请问为何将i+=1挪到else下面就无法shi'xian'xun'...

[复制链接]
发表于 2017-5-19 16:51:47 | 显示全部楼层 |阅读模式

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

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

x
x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
    i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')






x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
        i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')
最佳答案
2017-5-19 17:14:04
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.         break
  8.     else:
  9.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  10.         i += 1

  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码

在if后面加个break,程序就会跳出循环

我们来分析一下你这个:
x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
        i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

在不满足if条件下,是不是执行else:语句里面的,所以当x不满足if条件的时候,i += 1在else里面或外面是没区别的,但当x满足条件的时候,执行的是if里面的语句哦,if里面的执行了,else里面就不执行对吧,那i就永远等于一个数对吧,x又不会增加对吧,例如这个i<100,所以while i<100永远执行,if里面的语句也直至执行,变成死循环,你加个break,或者在if语句里添加一句:i += 1(这不就是等同于i += 1放在if else语句外面一样么(if里面有i +=1 else里面有 i += 1))
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.         i += 1
  8.     else:
  9.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  10.         i += 1

  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码

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

使用道具 举报

 楼主| 发表于 2017-5-19 16:55:05 | 显示全部楼层
i+=1挪到else 下面之后就无法实现循环,这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-19 16:56:11 | 显示全部楼层
缩进很重要,i+=1 放在else下面,就不会跳出并执行while i<=100了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-19 16:59:50 | 显示全部楼层
Seven007 发表于 2017-5-19 16:56
缩进很重要,i+=1 放在else下面,就不会跳出并执行while i

就像,师长(while)直接命令旅长(if else语句),旅长直接命令团长(i+=1),但是团长不能直接听师长的,可不可以用这样的比喻? 缩进代表了这一行代码的执行顺序,一旦放到else里面就不会视为loop的一部分了,是这样么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-19 17:14:04 | 显示全部楼层    本楼为最佳答案   
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.         break
  8.     else:
  9.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  10.         i += 1

  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码

在if后面加个break,程序就会跳出循环

我们来分析一下你这个:
x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
        i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

在不满足if条件下,是不是执行else:语句里面的,所以当x不满足if条件的时候,i += 1在else里面或外面是没区别的,但当x满足条件的时候,执行的是if里面的语句哦,if里面的执行了,else里面就不执行对吧,那i就永远等于一个数对吧,x又不会增加对吧,例如这个i<100,所以while i<100永远执行,if里面的语句也直至执行,变成死循环,你加个break,或者在if语句里添加一句:i += 1(这不就是等同于i += 1放在if else语句外面一样么(if里面有i +=1 else里面有 i += 1))
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.         i += 1
  8.     else:
  9.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  10.         i += 1

  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码

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

使用道具 举报

发表于 2017-5-19 17:24:20 | 显示全部楼层
因为求的是最小值,小甲鱼判定100里面必定有个数满足这个要求。 i +=1 是为了保证循环,可以是 当 i <100 ,程序会去执行while 里面的语句,即 if, else。 对于if,else,满足if 的条件才会执行if 里面的语句,不满足就执行else的语句。而如果你  把 i += 1 写在else 里面,意味着,必须满足else才能去进行 i+1 这个操作。而你执行完第一次循环,此时再else 里面 i = 2 ,但是对于while来讲, 这里i属于else,不属于while,它无法读取到。所以没法进行循环。 5楼层主回答的很好,很对。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-19 17:59:52 | 显示全部楼层
ButcherRabbit 发表于 2017-5-19 17:14
在if后面加个break,程序就会跳出循环

我们来分析一下你这个:

太感谢了!! 懂了,我一直以为是这个程序没有成功循环,原来是因为进入了死循环所以导致没有任何东西显示。 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-19 18:00:37 | 显示全部楼层
薄荷的琦姑娘 发表于 2017-5-19 17:24
因为求的是最小值,小甲鱼判定100里面必定有个数满足这个要求。 i +=1 是为了保证循环,可以是 当 i

谢谢! 后半段受益良多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-19 18:01:21 | 显示全部楼层
Seven007 发表于 2017-5-19 16:56
缩进很重要,i+=1 放在else下面,就不会跳出并执行while i

谢谢!感谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-20 15:47:16 | 显示全部楼层
大神们回答总是很详细
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 05:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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