作者TW185930 (吱吱)
看板Python
标题[问题] while回圈问题
时间Sat Jun 2 12:53:02 2018
各位大大们好
小弟新手学python,使用参考书为[python 程式设计超入门]
目前看到While回圈章节,并尝试练习此函数遇到一个小问题
程式内容为
Power = 5
while(True):
print('打')
print('踢')
print('大绝')
Power = Power - 1
if (Power > 0):
break
理论上当Power变成负值时,则会变成 Power > 0 为False,
那麽回圈就会break,可是为何小弟进入了无限回圈呢QQ?
不太懂QQ
--
当他们关掉MegaUpload的时候, 我保持沉默;我还有FileSonic。
当他们关掉FileSonic的时候, 我保持沉默;我还有FileServe。
当他们关掉FileServe的时候, 我保持沉默;我还有MediaFire。
当他们关掉MediaFire的时候, 我保持沉默;我还有BT。
当他们关掉BT伺服器的时候, 我已一无所有了。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.72.15.169
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1527915186.A.8AF.html
1F:推 ides13: 因为ture永远是true 06/02 12:59
意思是 While(True) 不会因为他下列程式为False时,就会停止吗??
※ 编辑: TW185930 (42.72.15.169), 06/02/2018 13:01:51
2F:推 ides13: 看错了收回。没缩排,不确定if是否在while回圈内。 06/02 13:02
3F:→ ides13: 不会变false只会跳出回圈。 06/02 13:04
※ 编辑: TW185930 (42.72.15.169), 06/02/2018 13:16:40
4F:→ kobe8112: 你程式码没问题啊,虽然跟你想表达的逻辑不同, 06/02 13:24
5F:→ kobe8112: 但只会印出 打踢大绝 (中间有换行),然後就结束 06/02 13:24
6F:→ kobe8112: 建议你截图,让板友帮忙看一下你实际程式码是怎麽缩排的 06/02 13:25
7F:→ kobe8112: 照你PO在这边的程式码,While只会进去一次就会break了 06/02 13:26
8F:→ kenduest: 啊,不是应该写 if (Power < 0): break 06/02 13:48
我刚刚发现问题了,假如我不重新宣告Power = 5,执行两次
同样上述While程式码,第一次会正常,第二次就进入无限回圈了@@
※ 编辑: TW185930 (42.72.15.169), 06/02/2018 13:50:23
9F:→ kenduest: 所以你没有忠实给你的真实程式吗? 06/02 13:52
10F:→ kobe8112: 什麽叫做「重新宣告Power = 5 」? 06/02 14:16
11F:→ kobe8112: 从你回覆的内容,我会先猜你这是误解变数可视范围所导致 06/02 14:16
12F:→ kobe8112: 你是不是用Jupyter notebook之类的在练习? 06/02 14:23
13F:→ MOONY135: 你的写法跟你想要做的事情完全不一样... 06/02 14:58
抱歉,我是使用IDLE,我真的是新手 对於程式的问题描述不是很好
我第一次执行这个程式是正常的,他可以回传我如期的结果 如下
https://i.imgur.com/mcNumvB.jpg
但当我连续执行第二次,则进入无限回圈,如下
https://i.imgur.com/VExBbOg.jpg
※ 编辑: TW185930 (42.72.15.169), 06/02/2018 15:20:28
14F:推 s8300355: 因爲power已经小於0了 06/02 15:24
15F:→ kobe8112: 你不用道歉啦,大家没有任何负面的意思XD 06/02 15:25
16F:→ kobe8112: 你看你程式码,最最开始第一次会发生什麽事? 06/02 15:25
17F:→ kobe8112: 答案:会印出 打踢大绝,Power的最终值会为1,接着因为 06/02 15:26
18F:→ kobe8112: 你写的if条件判断成立,因此跳出While回圈 06/02 15:26
19F:→ TW185930: 第一次就像我想的一样 跑一次回圈就终止了 06/02 15:26
20F:→ kobe8112: 下面你再跑第二次时呢?一样先印打踢大绝, 06/02 15:27
21F:→ kobe8112: 接着Power = Power -1 ,原本Power为1,减1後则为0 06/02 15:27
22F:→ kobe8112: 然後if条件会否成立? 不会吧?因此就会While无穷跑, 06/02 15:28
23F:→ kobe8112: Power每次都被-1,接着if总是不会成立 06/02 15:28
24F:→ TW185930: 可是 while (True)才会执行不是吗? -1>0 不是False吗 06/02 15:29
25F:→ kobe8112: While回圈有2种方式跳出,一种是判断条件不成立, 06/02 15:30
26F:→ kobe8112: 一种是里面执行到break程式码 06/02 15:30
27F:→ kobe8112: 你的程式码来说,While的判断式永远为True,所以不讨论 06/02 15:31
28F:→ kobe8112: 前者,直接看是否有任何地方会触发後者 06/02 15:31
29F:→ kobe8112: 只有if里面的条件成立,才会执行break而跳出While回圈 06/02 15:31
30F:→ kobe8112: 你推文补充的两件事都是对的, 06/02 15:35
31F:→ kobe8112: 你问题在「你想表达的逻辑」跟「程式码表达的逻辑」不同 06/02 15:35
32F:→ TW185930: 了解!! 感谢kobe大! 06/02 15:36
33F:→ kobe8112: 不会,有帮到就好XD 06/02 15:42
34F:推 LaoDa581: 你以後遇到这种问题要debug的话,建议在回圈中把power 06/03 00:25
35F:→ LaoDa581: 值印出来,就能解惑了 06/03 00:25
36F:推 jp956956: 不是因为if成立才会执行break吗 06/03 01:07
37F:→ jp956956: 可是跑到变负的就不成立不会执行break 06/03 01:07
谢谢大家 !
※ 编辑: TW185930 (42.72.15.169), 06/03/2018 10:45:45