4. 迴圈

I. 迴圈的用途

  • 重複地做一樣的事情

  • 用某個條件判斷決定是否結束不斷重複的輪迴

想想看,日常生活中有那些不斷重複做的事情呢?

在Python程式語言當中,迴圈有兩種表示方法:whilefor

II. while迴圈

A. while迴圈的基本架構

執行步驟:step1 → step2 → step3 → step4 → (step2 → step3 → step4)×n次

注意! 縮排也別忘了唷!

注意! step1 (計圈變數) 通常有各式型態,接下來我們就會陸續見到

while迴圈撰寫時可能會遇到的錯誤情況

【下方為正確撰寫方式】

【例題1】

小蚯很喜歡~符號 請寫一個程式能夠讀入一個整數 再印出該整數個~符號

【例題2】

家裡最近領養了一頭神牛超會算數學,只要給他一個數字,他就能加總出從1到該數字的總和 輸入說明 讓使用者能夠輸入一個正整數 輸出說明 若輸入值為10,則輸出55

B. 多變的迴圈

有時候,我們不必使用計圈變數來控制迴圈次數,而是直接改變while的判斷條件來讓迴圈停止

通常這種寫法用於不確定迴圈需要進行幾圈的情況下

【例題1】

小奇有一個很特殊的個性,就是非常討厭偶數,只要看到偶數,就會反覆把它除以二,直到這個數字變成奇數為止。若現在給一個正整數,請問這個數字經過小奇的處理之後,會變成多少呢?

【例題2】

嘗試輸入各種血型來觀看今年的運勢(輸入00可結束此程式)

偶爾,我們會期待迴圈能永遠執行下去,永不停止

【例題3】

請撰寫一個能讓使用者輸入成績進而判斷:及格、可補考、死當

【例題4】

請撰寫一個能夠不斷印出小印地安人的程式

C. 讓迴圈中途停止或跳過迴圈中的某圈

break

從上方【例題2】中我們可以發現,需要讓迴圈在i值為 '00' 時結束,須於 while 外頭先宣告 i 變數,讓程式碼看起來似乎有那麼一點不完美,這時,若我們能使用break即能夠避免這樣的情形

break:當電腦執行到break時會立即終止該層迴圈

【例題】

上方【例題2】的改寫

continue

偶爾,我們會希望當某個條件成立時,不做某件事而直接進行下一輪迴圈,這時,我們就可以使用continue

continue:當電腦執行到continue時會立即跳過該輪迴圈,直接進行下一輪

【例題】

請製作一個倒數器,讓使用者輸入一個正整數後,即從該正整數開始不斷 -1 直至數到 1 為止,但中間過程若數到 5 的倍數,請跳過

想想看,上方的 i -= 1continue 可以互換位置嗎?

由於continue的特性,我們其實能省略else,因此可將上方程式碼改寫如下:

III. for迴圈

for迴圈跟while迴圈用法相似,最主要區別是在while迴圈通常會用於不知道要執行多少圈的情況下,而for迴圈通常用在已經知道要執行多少次的情況 例如:

1. 印出100個Hello 2. 算出某個數字的某次方 3. 算出某個數字的階乘

注意! 若不希望計圈變數在每一圈的變化值都相同,使用while會優於用for

A. for迴圈的基本架構

for迴圈中也必須有一個計圈變數用來計算目前執行了幾圈,只是計圈變數放在for迴圈結構中。 【每輪迴圈完畢後,計算圈數的變數會產生變動】

以下三種為for迴圈常見的架構

B. forwhile 間的轉換

兩者功能相同,也都需要一個計圈變數來記錄總共跑了幾圈。(唯while較簡便使用於無窮迴圈的情況下)

【例題】

C. for 迴圈的計圈變數

for 迴圈中的計圈變數i沒辦法於range範圍中做更動,舉個範例如下

即使想將過程中的i改為1,但在range中實際上它仍是2 3 4 ,因為在執行range時,它就已經將i值存在一個陣列中,無法更動

補充:迴圈搭配 else

python的迴圈有個很特殊的用法,即是能夠搭配else使用,若迴圈沒有在中途結束執行,就會執行else,舉個範例如下

IV. 巢狀迴圈

A. 巢狀迴圈的意義

巢狀迴圈顧名思義就是迴圈中還有迴圈的概念囉~~

相信大家對積木程式都已經不陌生了,先回想看看這題應該如何解?

先利用迴圈走完一個小三角形

再利用一個迴圈走完12個相同的小三角形

B. 巢狀迴圈的範例

【例題1】

據說變態的人都喜歡打A 設計一個能讓使用者輸入的程式 例如:列為3,行為5時,輸出: AAAAA AAAAA AAAAA

思路:

1. 印出A

2. 重複?次

3. 換一行

4. 1~3重複?次

while改寫

【例題2】

輸入n,輸出n行星號,第一行有一個 每往下一行,就多一個星號 例如:n為4時,輸出如下 * ** *** ****

思路:

1. 印出" "

2. 重複?次

3. 印出"*"

4. 重複?次

5. 換一行

6. 1~5重複?次

思考看看,第二個for迴圈為何上限寫i+1而非i

你也可以這樣改寫

while改寫

C. 巢狀迴圈中的 continuebreak

breakcontinue都僅作用於本身所存在的該層迴圈而已

上方程式碼執行後的結果如下:

III. 學習單

Last updated

Was this helpful?