iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
0
自我挑戰組

Python 30天學習日誌系列 第 6

Day06-For、While迴圈(上)

For迴圈

迴圈可以重複不停地做某些動作直到某個條件成立時,動作才會停止,總之就是個能重複進行運算的結構,以下為For迴圈的語法:

for 自訂變數 in range(起始值, 結束值, 遞增值)
    #處理自訂變數的資料
    ...
    if 關係運算式:
        continue    #進入range數列的下一行
    ...    
    if 關係運算式:
        break       #離開迴圈
    ...

這邊利用if判斷式去做結合主要是想同時介紹continue跟break指令的用法,我們來一一做說明:

  1. 第一行range()是Python的內建函式,它會依照傳入的參數,產生一個數列。這數列會從指定的起始值開始,到結束值的前一個為止。
  2. 那麼「自訂變數」是用來儲存數列中每一個值,但一次只存一個,且是從數列第一個值開始。
  3. 接下來在迴圈裡用if可以檢查判斷執行情況,或是增加自己需要的條件。同時可以利用continue指令跳過後面的程式碼,進入range數列的下一項,或是用break指令直接離開迴圈
    先來看看簡單的例子來理解一下~
total = 0

for i in range(1,11,1):
    total += i

print(total)

rangr(1,11,1)會產生一個1到10的整數數列,然後數列每一項都會依序存入自訂變數i。每存一次,就會執行迴圈中的程式碼一次,也就是把數列累加進total裡,所以最後執行結果total是1到10的數字總和55拉~
那如果想改成計算偶數總和,就可以加入上方所提到的判斷跟指令,如下:

total = 0

for i in range(1,11,1):
    if i % 2 != 0:
        continue    #如果是奇數,會直接進行下一次迴圈
        
    total += i

print(total)

如此就得出偶數和30囉~

While迴圈

當然並不是所有狀況都能用for迴圈去處理,假如想要程式一直重複去做某件事情,直到某個條件成立為止,而不是用次數去限制它,那麼就可以用條件迴圈(while)

while 關係運算式:
    #迴圈程式碼
    ...
    if 關係運算式:
        continue    #進入range數列的下一行
    ...    
    if 關係運算式:
        break       #離開迴圈
    ...

上方可看出與for迴圈差異並不大,唯一差別在於第一行的條件而已。while迴圈是利用關係運算式來控制迴圈是否執行,如果關係運算式執行結果是True,才會執行迴圈中的程式碼,反之False的話,則會離開迴圈。同樣while迴圈也可以用continue跟break指令來改變迴圈執行的流程,那麼先來看個範例:

total = 0
i = 1
while i <= 10:
    total += i
    i += 1      #改變變數值

print(total)

我故意拿了與for迴圈例子有相同執行結果的例子去做比較,兩個同樣是在算1到10的總和,不過while迴圈是檢查變數i是否為10以下,若不是則會跳出迴圈。可是用while迴圈去計算1到10的總和,還要增加一條i += 1去改變變數值,不如使用for迴圈來的簡潔,所以以下舉個適合while迴圈的範例:

score = int(input('請輸入成績:'))

while score < 0 or score > 100:
    score = int(input('成績錯誤,請重新輸入:'))

這樣就能避免學生亂打成績,只限定成績在0到100之間,只要符合條件才能繼續下去,否則就要被困在無線迴圈裡了XD

迴圈使用時機

  • 當需要重複進行運算的時候使用迴圈(for/while)
  • 當重複的次數可以清楚被計算或當迭代的表現明顯時使用for迴圈
  • 當重複的次數難以計算(但條件清楚)或是有條件的重複時使用while迴圈

明天來看看巢狀迴圈跟一些練習題吧

參考資料

  • 書名-輕鬆學Python3 /孫宏明-編著
  • 書名-Python程式設計入門 /葉難-編著

上一篇
Day05-關係運算子與if判斷式
下一篇
Day07-For、While迴圈(下)
系列文
Python 30天學習日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言