iT邦幫忙

1

【開心碼農養成記】Python初新者練習手札-Toyota(頭又大)的while迴圈

PIZZ 2023-08-25 17:31:251180 瀏覽
  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230823/20159965qshI1EyEjh.png

前情提要:

作為一個開心碼農,就是要不停碼、不斷農,一時碼、一時爽,一直農、一直爽......個P/images/emoticon/emoticon03.gif

不過要做為一個開心碼農肯定不能一直做

print('Hello World')

其他的迴圈、變數等等的練習肯定少不了!

所以提到迴圈就得說說for和while兩種了......


最近的練習中,for迴圈倒是滿常用到了,一般理解&操作起來也不很困難

大部分就是無腦的

for i in range(0, xxx):

或是

for i in range(1, xxx+1):

這樣的/images/emoticon/emoticon10.gif

然而換到了while迴圈的練習題:"請列出從1~使用者輸入的整數間的所有偶數"的時候,我的腦子都快燒了.../images/emoticon/emoticon46.gif

腦袋燒掉的主要原因有:
1.知道要做判斷式
2.判斷式做好了
3.判斷式放進去以後,不是報錯,就是無限迴圈去啦~/images/emoticon/emoticon17.gif

雖然這問題看起來應該是非常蠢,但因為被整到了,所以感覺這個debug非常的有意義,足夠來發篇文章紀念下!!


這次的練習題如前面說的,"請列出從1~使用者輸入的整數間的所有偶數"

原本的範例中一開始是把變數i設為2下去做計算,這部分倒是沒太大問題。

i = 2
n =int(input('請輸入一個數字:'))
while(i <= n):
    print(i, end=' ')
    i = i +2

有問題的則是作為延伸題的"其他的寫法:不在第一時間宣告 i = 2,而是 i=1 其後再用判斷式"

看到這題目加上最近在新手村砍木人的成果,就知道要用

if(i % 2 ==0):

但一開始組合到while下面之後就開始了一場陣痛;因為一下說標齊的位置不對,一下報錯,一下無限迴圈...

這真的是新手任務嗎?/images/emoticon/emoticon46.gif

不過好在突然像柯南一樣閃過一道光,就是那道光讓我改變戰略,跑去開另一個檔案並把if+for迴圈的判斷式給寫好/images/emoticon/emoticon39.gif

i = 1
n=int(input('請輸入一個整數:'))
for i in range(1, n+1):
    if (i % 2 ==0):
        print(i, end=' ')
        i = i +1 

※如果要改成列出奇數的話,就把i % 2 == 0改成i % 2 != 0

然後跑起來是正常的之後,就一切看似很美好的塞到while迴圈裡面去,然後......就無限迴圈了!/images/emoticon/emoticon14.gif

無限迴圈的寫法是這樣:

n=int(input('請輸入一個整數:'))
i = 1
while (i <= n):
    if(i %2 ==0):
        print(i, end=' ') 
        i = i +1  

看樣子,就算在if判斷式內有包含 i = i + 1,但while迴圈也是不會承認的喔!/images/emoticon/emoticon06.gif

所以初新者碼農挺住了while魔獸攻擊,並在損傷999之後,以HP1的狀態在if判斷式的外層再加上一次i = i + 1,然後這支程式才終於正常執行了...

(怎覺得我好像在做if & else,但卻不用寫出else)

最後能正常執行的是:

n=int(input('請輸入一個整數:'))
i = 1
while (i <= n):
    if(i %2 ==0):
        print(i, end=' ') 
        i = i +1        
    i = i +1  #如果i %2 != 0, 一樣要讓i跑到下一個數字(迴圈) 

雖然整個debug的過程好像殺了個什麼了不起的大Boss的感覺,但實際上大概就是Lv.1的青蛙和Lv.15的毒蛙的那種差異吧....../images/emoticon/emoticon01.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
hung19091
iT邦新手 5 級 ‧ 2023-08-28 16:52:51

感謝分享挑戰BOSS的歷程心得
如果有興趣繼續燒腦
可以試試看,我把[i = i +1]刪掉一行
這樣也可以執行
你知道為什麼嗎XD?

n=int(input('請輸入一個整數:'))
i = 1
while (i <= n):
    if(i %2 ==0):
        print(i, end=' ') 
    i = i +1  #如果i %2 != 0, 一樣要讓i跑到下一個數字(迴圈) 
PIZZ iT邦新手 2 級 ‧ 2023-08-28 17:23:45 檢舉

是不論if是ture/false,i往下一位數去的+1動作都直接讓while迴圈去處理?

if那邊其實是不用做這件事情的嗎?/images/emoticon/emoticon19.gif

hung19091 iT邦新手 5 級 ‧ 2023-08-29 08:24:13 檢舉

PIZZ
沒錯,如果預期結果是,讓迴圈從[1、2、3、4、5...、n]
依序判斷(遍歷),再用取餘數的方式挑出偶數,這樣的話不論奇數、偶數,總之都要[加1],因此不需要在if裡面[加1]


那麼,一開始的答案為何正確呢?
雖然答案正確,但是i的記數會變成:
[1、2、4、6、8...]
發現了嗎,除了一開始的[i = 1],後面全部都是偶數
因為[i加1]執行了兩次
後續都變成[i加2]了!

PIZZ iT邦新手 2 級 ‧ 2023-08-29 08:30:34 檢舉

@hung19091

收到,我來筆記下,感謝指導/images/emoticon/emoticon41.gif

我要留言

立即登入留言