鱼C论坛

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

[已解决]while到底怎么循环的,当他跟for一起的时候到底怎么回事?

[复制链接]
发表于 2018-1-16 17:03:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 大麦miracle 于 2018-1-16 17:10 编辑

为什么两次结果不一样,while在这里到底循环了几次,哪个朋友可以详细讲解一下,单个while还能理解,放一起不太好理解了
最佳答案
2018-1-16 18:19:30
本帖最后由 zero月蚀的假面 于 2018-1-16 18:23 编辑
  1. for i in range(5):
  2.     s = i
  3.     w = 0
  4.     while s:
  5.         w = w+s
  6.         s = s-1
  7.         print(w)
复制代码

①第一个循环实现s = i =0,1,2,3,4
②当s=0时进入while循环为假不执行

1)当s=1时进入while循环,w=w+s=0+1=1.,s=s-1=0(w=1)
2)上一步因为s=0为假不继续执行while循环

1)当s=2时进入while循环,w=w+s=0+2=2,s=s-1=1(w=2)
2)因为s=1继续执行while,w=w+s=2+1=3,s=s-1=0(w=3)
3)因为s=0为假不继续执行while循环
                        。
                        。
                        。
                        。
                        。
一直像这样执行到s=4即可
你第二张图片是因为print(w)属于for循环里面的语句,且不属于while循环,所以只有当s=0,1,2,3,4进入while循环最终得到w的5个值
Q.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 18:39:22 | 显示全部楼层
第一种,print在while循环体
i取值为0,1,2,3,4
i=0 时,while 的s为0,不进入循环,所以循环次数为0
i=1时,while s为1,循环次数为1
i=2时,while s为2,训话次数为2(s=2,s=1)
i=3时,while s为3,循环次数为3(s=3,s=2,s=1)
i=4时,while s为4,循环次数为4(s=4,s=3,s=2,s=1)
所以,一共循环次数为0+1+2+3+4=10
第二种,print在for循环体内,所以循环次数就是i的取值次数,0,1,2,3,4,一共为5次

评分

参与人数 1荣誉 +3 鱼币 +5 贡献 +2 收起 理由
大麦miracle + 3 + 5 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-16 17:24:59 | 显示全部楼层
放在一起也按照一个循环的进行理解就行了

两个结果不一样是因为最后的print缩进不同,后面的print不在while循环中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 17:25:50 | 显示全部楼层
在这两个程序里,while s 里的 s  是多少,while就循环多少次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 18:19:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zero月蚀的假面 于 2018-1-16 18:23 编辑
  1. for i in range(5):
  2.     s = i
  3.     w = 0
  4.     while s:
  5.         w = w+s
  6.         s = s-1
  7.         print(w)
复制代码

①第一个循环实现s = i =0,1,2,3,4
②当s=0时进入while循环为假不执行

1)当s=1时进入while循环,w=w+s=0+1=1.,s=s-1=0(w=1)
2)上一步因为s=0为假不继续执行while循环

1)当s=2时进入while循环,w=w+s=0+2=2,s=s-1=1(w=2)
2)因为s=1继续执行while,w=w+s=2+1=3,s=s-1=0(w=3)
3)因为s=0为假不继续执行while循环
                        。
                        。
                        。
                        。
                        。
一直像这样执行到s=4即可
你第二张图片是因为print(w)属于for循环里面的语句,且不属于while循环,所以只有当s=0,1,2,3,4进入while循环最终得到w的5个值

评分

参与人数 1荣誉 +3 鱼币 +5 贡献 +2 收起 理由
大麦miracle + 3 + 5 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-1-17 14:05:45 | 显示全部楼层
zero月蚀的假面 发表于 2018-1-16 18:19
①第一个循环实现s = i =0,1,2,3,4
②当s=0时进入while循环为假不执行

第2个是不是也是循环10次,只是取最终的值,比如i=2的时候第一次循环是2第二次循环是3,最后打印出来的也是3!第一段代码是每次循环都打印出来w的值,而第二次是每次循环到最终的取值是这意思吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-17 14:13:24 | 显示全部楼层
lchelement 发表于 2018-1-16 18:39
第一种,print在while循环体
i取值为0,1,2,3,4
i=0 时,while 的s为0,不进入循环,所以循环次数为0
...

谢谢,每次i进入while循环的时候w都是等于0开始循环的吧,第一次循环之后w值不就是1了吗?那第二次循环是2+1还是2+0,打印出来结果是+0,每次初始值都是0,是不是从i=1,2,3,4每次循环w初始值都是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 22:40:03 | 显示全部楼层
大麦miracle 发表于 2018-1-17 14:13
谢谢,每次i进入while循环的时候w都是等于0开始循环的吧,第一次循环之后w值不就是1了吗?那第二次循环是 ...

不是你这么理解的,你得先清楚while循环的判断条件:当while 后面的循环条件为真(1,True,或者其他非0值,12345甚至-1,-2,-3..等等负数)时(该题内就是s的值),循环体才执行,否则不执行(也就是循环结束)。
while是从循环条件的初始值开始循环判断,此处即判断s,
第一种,print在while循环体
i取值为0,1,2,3,4
i=0 时,while 的s为0,不进入循环,所以循环次数为0
i=1时,while s为1,循环次数为1(当s=1时,执行循环,然后循环体内对s进行-1操作,那么该次循环结束后,s的值变为0,while再次循环时,发现s的值为0,所以不进入循环,故循环次数为1次)
i=2时,while s为2,训话次数为2(s=2,s=1)(同理,s=2执行一次,然后-1,s值为1,在执行一次循环,又-1,s的值为0,循环结束,故次数为2次,下面都是一样的道理)
i=3时,while s为3,循环次数为3(s=3,s=2,s=1)
i=4时,while s为4,循环次数为4(s=4,s=3,s=2,s=1)
所以,一共循环次数为0+1+2+3+4=10

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
大麦miracle + 5 + 5 + 3

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-1-18 22:21:19 | 显示全部楼层
lchelement 发表于 2018-1-17 22:40
不是你这么理解的,你得先清楚while循环的判断条件:当while 后面的循环条件为真(1,True,或者其他非0 ...

谢谢这下更了解了,就是说这整段代码while循环了10次,第2段代码因为print在for循环下所以只打印了5个结果,第1段代码print在while下面执行,总共循环十次,所以打印出10个值!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-20 23:29:18 | 显示全部楼层
大麦miracle 发表于 2018-1-18 22:21
谢谢这下更了解了,就是说这整段代码while循环了10次,第2段代码因为print在for循环下所以只打印了5个结 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 05:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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