[問題] while迴圈問題

看板Python作者 (吱吱)時間7年前 (2018/06/02 12:53), 7年前編輯推噓5(5032)
留言37則, 8人參與, 7年前最新討論串1/4 (看更多)
各位大大們好 小弟新手學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://www.ptt.cc/bbs/Python/M.1527915186.A.8AF.html

06/02 12:59, 7年前 , 1F
因為ture永遠是true
06/02 12:59, 1F
意思是 While(True) 不會因為他下列程式為False時,就會停止嗎?? ※ 編輯: TW185930 (42.72.15.169), 06/02/2018 13:01:51

06/02 13:02, 7年前 , 2F
看錯了收回。沒縮排,不確定if是否在while迴圈內。
06/02 13:02, 2F

06/02 13:04, 7年前 , 3F
不會變false只會跳出迴圈。
06/02 13:04, 3F
※ 編輯: TW185930 (42.72.15.169), 06/02/2018 13:16:40

06/02 13:24, 7年前 , 4F
你程式碼沒問題啊,雖然跟你想表達的邏輯不同,
06/02 13:24, 4F

06/02 13:24, 7年前 , 5F
但只會印出 打踢大絕 (中間有換行),然後就結束
06/02 13:24, 5F

06/02 13:25, 7年前 , 6F
建議你截圖,讓板友幫忙看一下你實際程式碼是怎麼縮排的
06/02 13:25, 6F

06/02 13:26, 7年前 , 7F
照你PO在這邊的程式碼,While只會進去一次就會break了
06/02 13:26, 7F

06/02 13:48, 7年前 , 8F
啊,不是應該寫 if (Power < 0): break
06/02 13:48, 8F
我剛剛發現問題了,假如我不重新宣告Power = 5,執行兩次 同樣上述While程式碼,第一次會正常,第二次就進入無限迴圈了@@ ※ 編輯: TW185930 (42.72.15.169), 06/02/2018 13:50:23

06/02 13:52, 7年前 , 9F
所以你沒有忠實給你的真實程式嗎?
06/02 13:52, 9F

06/02 14:16, 7年前 , 10F
什麼叫做「重新宣告Power = 5 」?
06/02 14:16, 10F

06/02 14:16, 7年前 , 11F
從你回覆的內容,我會先猜你這是誤解變數可視範圍所導致
06/02 14:16, 11F

06/02 14:23, 7年前 , 12F
你是不是用Jupyter notebook之類的在練習?
06/02 14:23, 12F

06/02 14:58, 7年前 , 13F
你的寫法跟你想要做的事情完全不一樣...
06/02 14:58, 13F
抱歉,我是使用IDLE,我真的是新手 對於程式的問題描述不是很好 我第一次執行這個程式是正常的,他可以回傳我如期的結果 如下 https://i.imgur.com/mcNumvB.jpg
但當我連續執行第二次,則進入無限迴圈,如下 https://i.imgur.com/VExBbOg.jpg
※ 編輯: TW185930 (42.72.15.169), 06/02/2018 15:20:28

06/02 15:24, 7年前 , 14F
因爲power已經小於0了
06/02 15:24, 14F

06/02 15:25, 7年前 , 15F
你不用道歉啦,大家沒有任何負面的意思XD
06/02 15:25, 15F

06/02 15:25, 7年前 , 16F
你看你程式碼,最最開始第一次會發生什麼事?
06/02 15:25, 16F

06/02 15:26, 7年前 , 17F
答案:會印出 打踢大絕,Power的最終值會為1,接著因為
06/02 15:26, 17F

06/02 15:26, 7年前 , 18F
你寫的if條件判斷成立,因此跳出While迴圈
06/02 15:26, 18F

06/02 15:26, 7年前 , 19F
第一次就像我想的一樣 跑一次迴圈就終止了
06/02 15:26, 19F

06/02 15:27, 7年前 , 20F
下面你再跑第二次時呢?一樣先印打踢大絕,
06/02 15:27, 20F

06/02 15:27, 7年前 , 21F
接著Power = Power -1 ,原本Power為1,減1後則為0
06/02 15:27, 21F

06/02 15:28, 7年前 , 22F
然後if條件會否成立? 不會吧?因此就會While無窮跑,
06/02 15:28, 22F

06/02 15:28, 7年前 , 23F
Power每次都被-1,接著if總是不會成立
06/02 15:28, 23F

06/02 15:29, 7年前 , 24F
可是 while (True)才會執行不是嗎? -1>0 不是False嗎
06/02 15:29, 24F

06/02 15:30, 7年前 , 25F
While迴圈有2種方式跳出,一種是判斷條件不成立,
06/02 15:30, 25F

06/02 15:30, 7年前 , 26F
一種是裡面執行到break程式碼
06/02 15:30, 26F

06/02 15:31, 7年前 , 27F
你的程式碼來說,While的判斷式永遠為True,所以不討論
06/02 15:31, 27F

06/02 15:31, 7年前 , 28F
前者,直接看是否有任何地方會觸發後者
06/02 15:31, 28F

06/02 15:31, 7年前 , 29F
只有if裡面的條件成立,才會執行break而跳出While迴圈
06/02 15:31, 29F

06/02 15:35, 7年前 , 30F
你推文補充的兩件事都是對的,
06/02 15:35, 30F

06/02 15:35, 7年前 , 31F
你問題在「你想表達的邏輯」跟「程式碼表達的邏輯」不同
06/02 15:35, 31F

06/02 15:36, 7年前 , 32F
了解!! 感謝kobe大!
06/02 15:36, 32F

06/02 15:42, 7年前 , 33F
不會,有幫到就好XD
06/02 15:42, 33F

06/03 00:25, 7年前 , 34F
你以後遇到這種問題要debug的話,建議在迴圈中把power
06/03 00:25, 34F

06/03 00:25, 7年前 , 35F
值印出來,就能解惑了
06/03 00:25, 35F

06/03 01:07, 7年前 , 36F
不是因為if成立才會執行break嗎
06/03 01:07, 36F

06/03 01:07, 7年前 , 37F
可是跑到變負的就不成立不會執行break
06/03 01:07, 37F
謝謝大家 ! ※ 編輯: TW185930 (42.72.15.169), 06/03/2018 10:45:45
文章代碼(AID): #1R4YAoYl (Python)
討論串 (同標題文章)
文章代碼(AID): #1R4YAoYl (Python)