前情提要:
作為一個開心碼農,就是要不停碼、不斷農,一時碼、一時爽,一直農、一直爽......個P
不過要做為一個開心碼農肯定不能一直做
print('Hello World')
其他的迴圈、變數等等的練習肯定少不了!
所以提到迴圈就得說說for和while兩種了......
最近的練習中,for迴圈倒是滿常用到了,一般理解&操作起來也不很困難
大部分就是無腦的
for i in range(0, xxx):
或是
for i in range(1, xxx+1):
這樣的
然而換到了while迴圈的練習題:"請列出從1~使用者輸入的整數間的所有偶數"的時候,我的腦子都快燒了...
腦袋燒掉的主要原因有:
1.知道要做判斷式
2.判斷式做好了
3.判斷式放進去以後,不是報錯,就是無限迴圈去啦~
雖然這問題看起來應該是非常蠢,但因為被整到了,所以感覺這個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下面之後就開始了一場陣痛;因為一下說標齊的位置不對,一下報錯,一下無限迴圈...
這真的是新手任務嗎?
不過好在突然像柯南一樣閃過一道光,就是那道光讓我改變戰略,跑去開另一個檔案並把if+for迴圈的判斷式給寫好
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迴圈裡面去,然後......就無限迴圈了!
無限迴圈的寫法是這樣:
n=int(input('請輸入一個整數:'))
i = 1
while (i <= n):
if(i %2 ==0):
print(i, end=' ')
i = i +1
看樣子,就算在if判斷式內有包含 i = i + 1,但while迴圈也是不會承認的喔!
所以初新者碼農挺住了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的毒蛙的那種差異吧......
感謝分享挑戰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跑到下一個數字(迴圈)
是不論if是ture/false,i往下一位數去的+1動作都直接讓while迴圈去處理?
if那邊其實是不用做這件事情的嗎?
PIZZ
沒錯,如果預期結果是,讓迴圈從[1、2、3、4、5...、n]
依序判斷(遍歷),再用取餘數的方式挑出偶數,這樣的話不論奇數、偶數,總之都要[加1],因此不需要在if裡面[加1]
那麼,一開始的答案為何正確呢?
雖然答案正確,但是i的記數會變成:
[1、2、4、6、8...]
發現了嗎,除了一開始的[i = 1],後面全部都是偶數
因為[i加1]執行了兩次
後續都變成[i加2]了!
@hung19091
收到,我來筆記下,感謝指導