Python實戰案例:猜拳小游戲
文章目錄
- Python實戰案例:猜拳小游戲
- 一、案例背景
- 二、代碼實現
- 三、代碼解析
- 3.1 執行過程
- 3.2 流程圖
- 四、案例總結
- 1. 核心知識點運用
- 2. 編程思維提升
一、案例背景
猜拳游戲(石頭剪刀布)是一款規則簡單卻極具策略性的經典對決游戲,幾乎人人都能快速上手。
對于編程學習者而言,通過實現這一游戲,能夠深度理解條件判斷、循環控制、數據結構等核心編程概念,同時鍛煉邏輯思維與代碼調試能力。
本文將從基礎規則出發,逐步完成一個具備輸入驗證、勝負判定、戰績統計的完整猜拳小游戲案例。
游戲規則:
游戲中雙方需在 石頭、剪刀、布 三種手勢中選擇其一,勝負判定規則如下:
- 石頭 勝 剪刀 (石頭砸壞剪刀)
- 剪刀 勝 布 (剪刀剪碎布)
- 布 勝 石頭 (布包裹石頭)
- 若雙方手勢相同,則判定為 平局
通過將現實規則轉化為代碼邏輯,可以鍛煉我們將抽象生活場景轉換為程序模型的能力。
接下來,讓我們看看如何用Python代碼模擬實現猜拳小游戲。
二、代碼實現
本案例代碼需要使用random
模塊相關方法, 所以需先導入模塊。
import random# 游戲初始化
# 定義游戲規則:鍵代表玩家選擇,值代表該選擇能擊敗的對象
game_rules = {'石頭': '剪刀', '剪刀': '布', '布': '石頭'}
# 從游戲規則中提取所有可用的選擇項
choices = list(game_rules.keys())
# 初始化歷史戰績統計字典
history = {'贏': 0, # 記錄勝利次數'輸': 0, # 記錄失敗次數'平局': 0, # 記錄平局次數'回合數': 0, # 記錄總游戲回合數'勝率': '0%' # 記錄當前勝率
}
# 定義打印分隔線的格式
spec = '=^30' # 格式(居中,寬度30,用=填充)# 打印游戲開始信息
print('\n歡迎來到猜拳小游戲.\n')
print(f"{'游戲開始':{spec}}\n") # 使用定義好的格式打印"游戲開始"
print("當前第1回合".center(30, '-')) # 使用字符串格式化方法打印當前回合數# 主游戲循環
while True:# 獲取用戶輸入# strip()去除首尾空格,lower()轉換為小寫user_select = input('請輸入你的選擇--石頭/剪刀/布(輸入Q退出): ').strip().lower()# 檢查用戶是否選擇退出if user_select == 'q': # 使用定義好的格式打印"游戲退出"print(f"\n{'游戲退出':{spec}}")# 打印歷史戰績print(f"歷史戰績: 回合數 {history['回合數']} | 勝利 {history['贏']} |"f" 失敗 {history['輸']} | 平局 {history['平局']} | 勝率 {history['勝率']}\n")break # 退出游戲循環 # 驗證用戶輸入是否有效if user_select not in choices:print('選擇輸入錯誤,請重新輸入(輸入Q退出)')continue # 跳過當前循環,重新獲取輸入# 電腦隨機選擇一個選項pc_select = random.choice(choices)# 判斷游戲結果# 平局情況if user_select == pc_select:history['平局'] += 1 # 平局次數加1print(f'\n平局! 你:{user_select} vs 電腦:{pc_select}')else:# 獲勝情況:檢查玩家的選擇是否能擊敗電腦的選擇if game_rules[user_select] == pc_select:history['贏'] += 1 # 勝利次數加1print(f'\n你贏了! 你:{user_select} 擊敗 電腦:{pc_select}')else:# 失敗情況history['輸'] += 1 # 失敗次數加1print(f'\n你輸了! 電腦:{pc_select} 擊敗 你:{user_select}')# 更新回合數history['回合數'] += 1# 計算并更新勝率(避免除以零的錯誤)if history['回合數'] > 0:# 計算勝率winning_rate = history['贏'] / history['回合數']# 將勝率轉換為百分比格式字符串history['勝率'] = f"{winning_rate:.1%}"# 打印當前戰績print(f"當前戰績:勝利 {history['贏']} | 失敗 {history['輸']} |"f" 平局 {history['平局']} | 勝率 {history['勝率']}\n")# 使用定義好的格式打印"游戲繼續"print(f"{'游戲繼續':{spec}}\n")# 使用字符串格式化方法打印當前回合數print(f"當前第{history['回合數'] + 1}回合".center(30, '-'))
三、代碼解析
3.1 執行過程
-
游戲初始化:
- 定義游戲規則字典
game_rules
,明確石頭克剪刀、剪刀克布、布克石頭。 - 從規則中提取所有可用選擇(石頭、剪刀、布)存入
choices
列表。 - 初始化歷史戰績字典
history
,記錄勝負平次數、回合數和勝率。 - 設置打印格式
spec
用于美化輸出。 - 打印游戲開始信息和當前回合數(第1回合)。
- 定義游戲規則字典
-
主游戲循環:
- 通過
while True
創建無限循環,直到用戶主動退出。 - 獲取用戶輸入并處理:
- 去除輸入首尾空格并轉為小寫。
- 若輸入為
q
,則打印游戲退出信息和完整歷史戰績,然后終止循環。 - 若輸入無效(不在選擇列表中),提示錯誤并繼續循環。
- 通過
-
游戲邏輯處理:
- 電腦從
choices
中隨機選擇一項。 - 判斷游戲結果:
- 若用戶和電腦選擇相同,記錄平局。
- 否則根據
game_rules
判斷勝負:用戶選擇能擊敗電腦選擇則獲勝,否則失敗。
- 更新歷史戰績:
- 增加相應的勝負平次數。
- 更新總回合數。
- 計算并更新勝率(格式化為百分比,保留1位小數)。
- 電腦從
-
結果展示與循環:
- 打印當前回合結果(勝/負/平)。
- 顯示當前戰績統計。
- 打印游戲繼續信息和下一回合編號,繼續循環。
3.2 流程圖
四、案例總結
1. 核心知識點運用
- 基礎語法:條件判斷(
if-elif-else
)、循環(while
)、輸入輸出(input/print
)。 - 數據結構:字典(存儲規則和戰績)、列表(存儲合法手勢)。
- 實用技巧:字符串格式化、隨機數生成(
random.choice
)、輸入驗證邏輯。
2. 編程思維提升
- 抽象能力:將現實規則(石頭剪刀布克制關系)轉化為代碼可處理的字典結構。
- 健壯性設計:通過輸入驗證和異常處理(如避免除零錯誤)提升程序穩定性。
- 交互式設計:合理使用分隔線和實時反饋,增強交互友好性。
通過本案例,我們可清晰看到如何從簡單規則逐步構建功能完整的程序,該案例適合作為Python入門的實戰練手項目。
在編程學習中,實現經典小游戲是掌握基礎語法和邏輯思維的最佳方式。快來動手嘗試自己實現代碼功能,體驗編程與游戲結合的樂趣吧!