iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
佛心分享-IT 人自學之術

30天轉職馬拉松:從0到Offer的學習計畫系列 第 19

程式語言基礎V:你必須認識的迴圈與迭代

  • 分享至 

  • xImage
  •  

越南大戰遊戲畫面

在程式設計中,迴圈(loop)是另一個非常重要的控制流程結構。迴圈允許我們不斷地重複執行某段程式碼,直到滿足特定條件為止。有了它,我們就能將大量重複性的任務交給程式去處理,實在是太香啦!

本文將介紹迭代的概念,以及兩種主要的迴圈結構:for 迴圈和 while 迴圈。我們將以經典動作射擊遊戲《越南大戰》為例,來理解這些概念。

什麼是迭代?

在了解迴圈之前,我們需要先認識「迭代」這個概念。迭代是迴圈的核心,它是重複執行某個過程的行為。

想像你正在玩《越南大戰》,我們可以將過程拆分為以下行為:

  1. 推進地圖
  2. 遭遇敵人
  3. 擊殺敵人
  4. 然後,你重複這個過程,直到闖關成功或是生命歸零遊戲結束。

在這個例子中,每一次完整的「推進、遭遇、擊殺」我們稱作一次迭代。你會不斷重複這個動作組合(迭代),直到達成目標條件(過關或遊戲結束)。

For 迴圈

For 迴圈用於可預期迭代次數的情況,當滿足特定迭代次數後就會結束。

想像一下《越南大戰》中遊戲的關卡設計,一個章節共有五個關卡,所以我們需要經歷五次迭代,完成五次上述的過程「推進、遭遇、擊殺」,即可通關:

關卡數量 = 5
for 關卡進度 in range(關卡數量):
    print(關卡進度)
    
print("恭喜闖關成功!")

While 迴圈

While 迴圈用於不確定需要迭代多少次,而是設定條件,當條件符合時,就會執行 while 迴圈內的程式碼。

就像是《越南大戰》的遊戲機制,根據生命值的狀態來判斷遊戲是否持續進行,遭到攻擊時,生命值減一,只要還有生命值,遊戲就會繼續。如果生命值歸零則遊戲結束:

生命值 = 5

# 遭到攻擊時,需要判定是否能夠繼續遊戲
while 生命值 > 0:
    生命值 = 生命值 - 1
    print("復活角色,遊戲繼續!")

print("遊戲結束,請投幣!")

迴圈控制語句 break, continue

讓我們接續上述的遊戲機制,新增額外條件來增加遊戲複雜度,讓你們理解 break, continue 是怎樣的概念。

break

用於滿足特定條件時,結束整個迴圈。

我們給《越南大戰》加入新的遊戲機制,最終關卡大魔王的攻擊具有一擊必殺的效果,當玩家遭受大魔王攻擊時,無論多少生命值,都會直接遊戲結束:

生命值 = 5

# 遭到攻擊時,需要判定是否能夠繼續遊戲
while 生命值 > 0:
    if 敵人 == "大魔王":
        print("遭到一擊必殺!")
        break # 結束 while 迴圈
    
    生命值 = 生命值 - 1
    print("復活角色,遊戲繼續!")

print("遊戲結束,請投幣!")

continue

用於滿足特定條件時,結束本次迭代,繼續下一個迭代。

《越南大戰》本身有一個遊戲機制,當遭到木乃伊的毒氣攻擊時,會變身為行動緩慢的木乃伊繼續進行遊戲,而不是生命值減一:

生命值 = 5

# 遭到攻擊時,需要判定是否能夠繼續遊戲
while 生命值 > 0:
    if 敵人 == "木乃伊":
        print("變身木乃伊!")
        continue # 結束本次迭代
    
    生命值 = 生命值 - 1
    print("復活角色,遊戲繼續!")

print("遊戲結束,請投幣!")

結語

透過《越南大戰》這款經典遊戲,我們認識了程式語言中的迴圈和迭代概念,從 for 迴圈到 while 迴圈,再到 break 和 continue 這些控制語句。接著,讓我們想像一下如何在不能出門的颱風天裡,將這些概念應用到日常生活中。

使用 for 迴圈來檢查家中窗戶是否關緊:

rooms = ["客廳", "臥室", "客房", "廚房", "浴室"]
for room in rooms:
    print(f"檢查{room}的窗戶是否關緊")
print("所有窗戶都檢查完畢,安心了!")

上一篇
程式語言基礎IV:掌控程式的工作流程
下一篇
程式語言基礎VI:你懂函式,函式就會幫你!
系列文
30天轉職馬拉松:從0到Offer的學習計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言