Python實戰案例:打造趣味猜拳小游戲

Python實戰案例:猜拳小游戲


文章目錄

  • Python實戰案例:猜拳小游戲
    • 一、案例背景
    • 二、代碼實現
    • 三、代碼解析
      • 3.1 執行過程
      • 3.2 流程圖
    • 四、案例總結
      • 1. 核心知識點運用
      • 2. 編程思維提升


一、案例背景

猜拳游戲(石頭剪刀布)是一款規則簡單卻極具策略性的經典對決游戲,幾乎人人都能快速上手。
對于編程學習者而言,通過實現這一游戲,能夠深度理解條件判斷循環控制數據結構等核心編程概念,同時鍛煉邏輯思維與代碼調試能力。
本文將從基礎規則出發,逐步完成一個具備輸入驗證、勝負判定、戰績統計的完整猜拳小游戲案例。

游戲規則
游戲中雙方需在 石頭、剪刀、布 三種手勢中選擇其一,勝負判定規則如下:

  1. 石頭剪刀 (石頭砸壞剪刀)
  2. 剪刀 (剪刀剪碎布)
  3. 石頭 (布包裹石頭)
  4. 若雙方手勢相同,則判定為 平局

通過將現實規則轉化為代碼邏輯,可以鍛煉我們將抽象生活場景轉換為程序模型的能力。
接下來,讓我們看看如何用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 執行過程

  1. 游戲初始化

    • 定義游戲規則字典game_rules,明確石頭克剪刀、剪刀克布、布克石頭。
    • 從規則中提取所有可用選擇(石頭、剪刀、布)存入choices列表。
    • 初始化歷史戰績字典history,記錄勝負平次數、回合數和勝率。
    • 設置打印格式spec用于美化輸出。
    • 打印游戲開始信息和當前回合數(第1回合)。
  2. 主游戲循環

    • 通過while True創建無限循環,直到用戶主動退出。
    • 獲取用戶輸入并處理:
      • 去除輸入首尾空格并轉為小寫。
      • 若輸入為q,則打印游戲退出信息和完整歷史戰績,然后終止循環。
      • 若輸入無效(不在選擇列表中),提示錯誤并繼續循環。
  3. 游戲邏輯處理

    • 電腦從choices中隨機選擇一項。
    • 判斷游戲結果:
      • 若用戶和電腦選擇相同,記錄平局。
      • 否則根據game_rules判斷勝負:用戶選擇能擊敗電腦選擇則獲勝,否則失敗。
    • 更新歷史戰績:
      • 增加相應的勝負平次數。
      • 更新總回合數。
      • 計算并更新勝率(格式化為百分比,保留1位小數)。
  4. 結果展示與循環

    • 打印當前回合結果(勝/負/平)。
    • 顯示當前戰績統計。
    • 打印游戲繼續信息和下一回合編號,繼續循環。

3.2 流程圖


四、案例總結

1. 核心知識點運用

  • 基礎語法:條件判斷(if-elif-else)、循環(while)、輸入輸出(input/print)。
  • 數據結構:字典(存儲規則和戰績)、列表(存儲合法手勢)。
  • 實用技巧:字符串格式化、隨機數生成(random.choice)、輸入驗證邏輯。

2. 編程思維提升

  • 抽象能力:將現實規則(石頭剪刀布克制關系)轉化為代碼可處理的字典結構。
  • 健壯性設計:通過輸入驗證和異常處理(如避免除零錯誤)提升程序穩定性。
  • 交互式設計:合理使用分隔線和實時反饋,增強交互友好性。

通過本案例,我們可清晰看到如何從簡單規則逐步構建功能完整的程序,該案例適合作為Python入門的實戰練手項目。
在編程學習中,實現經典小游戲是掌握基礎語法和邏輯思維的最佳方式。快來動手嘗試自己實現代碼功能,體驗編程與游戲結合的樂趣吧!



關注「安于欣」獲取更多Python技巧

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83212.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83212.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MCP:重塑AI交互的通用協議,成為智能應用的基礎設施

目錄: 為什么我們需要一個AI世界的USB-C?MCP的核心架構與工作原理MCP如何解決當前AI生態系統的碎片化問題從代碼到實踐:構建基于MCP的智能應用MCP的未來:從工具到生態為什么我們需要一個AI世界的USB-C? 還記得在USB-C標準普及之前,我們的數字生活是什么樣子嗎?抽屜里塞…

如何保證RabbitMQ消息的順序性?

保證RabbitMQ消息的順序性是一個常見的需求,尤其是在處理需要嚴格順序的消息時。然而,默認情況下,RabbitMQ不保證消息的全局順序,因為消息可能會通過不同的路徑(例如不同的網絡連接或線程)到達隊列&#xf…

HTML-2.2 列表--無序列表、有序列表、定義列表

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。小編作為新晉碼農一枚,會定期整理一些寫的比較好的代碼,作為自己的學習筆記…

Vuex和Vue的區別

Vue和Vuex有著不同的功能和定位,主要區別如下: 概念與功能 - Vue:是一個構建用戶界面的JavaScript框架,專注于視圖層的開發,采用組件化的方式構建應用程序,通過數據綁定和指令系統,能方便地…

數據可視化-----子圖的繪制及坐標軸的共享

目錄 繪制固定區域的子圖 (一)、繪制單子圖 subplot()函數 Jupyter Notebook的繪圖模式 (二)、多子圖 subplots()--可以在規劃好的所有區域中一次繪制多個子圖 (三)、跨行跨列 subplot2grid()---將整…

基于Qt6 + MuPDF在 Arm IMX6ULL運行的PDF瀏覽器——MuPDF Adapter文檔

項目地址:總項目Charliechen114514/CCIMXDesktop: This is a Qt Written Desktop with base GUI Utilities 本子項目地址:CCIMXDesktop/extern_app/pdfReader at main Charliechen114514/CCIMXDesktop 前言 這個部分說的是Mupdf_adaper下的文檔的工…

Linux 防火墻 firewalld 實戰配置教程!

最近工作上處理了很多關系配置服務器防火墻的操作,于是想寫一篇理論與實踐并存的文章,在這里分享給大家,希望對您有所幫助! 主要包括以下幾部分內容: 防火墻概述 firewalld原理框架 與iptables的異同點 firewalld常…

C#發送文件到藍牙設備

測試環境: visual studio 2022 win11筆記本電腦,具有藍牙功能 .net6控制臺 測試步驟如下: 1 新增名為BluetoothDemo控制臺項目 2 通過nuget安裝InTheHand.Net.Bluetooth,版本選擇4.2.1和安裝InTheHand.Net.Obex,版…

初識 Pandas:Python 數據分析的利器

在數據分析、數據清洗和可視化等領域,Python 無疑是最受歡迎的語言之一,而在 Python 的數據處理生態中,Pandas 是最核心、最基礎的庫之一。如果你接觸數據分析、機器學習、金融建模,或者只是想處理一些 Excel 表格,那么…

SpringBoot項目使用POI-TL動態生成Word文檔

近期項目工作需要動態生成Word文檔的需求,特意調研了動態生成Word的技術方案。主要有以下兩種: 第一種是FreeMarker模板來進行填充;第二種是POI-TL技術使用Word模板來進行填充; 以下是關于POI-TL的官方介紹 重點關注&#xff1…

fakeroot 在沒有超級用戶權限的情況下模擬文件系統的超級用戶行為

fakeroot 是一個在 Linux 環境中使用的工具,它允許用戶在沒有超級用戶權限的情況下模擬文件系統的超級用戶行為。它是一個在 Linux 環境中廣泛使用的工具,通常包含在大多數 Linux 發行版的軟件倉庫中。? 主要功能 ?模擬 root 權限?:fake…

Spring Spring Boot 常用注解整理

Spring & Spring Boot 常用注解整理 先理解核心概念:什么是注解(Annotation)?第一部分:IOC(控制反轉)和 DI(依賴注入)1. Component2. Service, Repository, Controll…

AIGC與數字媒體實驗室解決方案分享

第1部分 概述 1.1 建設目標 1.深度融合AIGC技術,培養能夠駕馭新質生產力的數字媒體人才 通過引入前沿的AIGC技術,確保學生能夠接觸到最先進的人工智能應用。教學內容理論和實踐結合,讓學生在實際操作中熟練掌握AIGC工具,生成高…

訊聯云庫項目開發日志(二)AOP參數攔截

目錄 利用AOP實現參數攔截: 一、??HTTP請求進入Controller?(發送郵件驗證碼) 二、AOP切面觸發 1. 切面攔截(GlobalOperactionAspect.class) method.getAnnotation()?? null interceptor 判斷?? 2.參數校驗注解 3. 參…

用OBD部署OceanBase社區版的避坑指南

以下是用OBD黑屏部署 OceanBase社區版時容易碰到的幾個問題及解決思路,供大家參考。 一、 遇坑步驟:用yaml文件部署集群: obd cluster deploy obtest -c mini-single-example.yaml 報錯: Package oceanbase-ce-4.2.1.8-108000…

無錫哲訊科技:引領芯片封裝SAP系統的智能化革命

芯片封裝行業的數字化轉型 在全球半導體產業高速發展的今天,芯片封裝作為產業鏈的關鍵環節,直接影響著芯片的性能、可靠性和成本。隨著5G、人工智能、物聯網等技術的普及,市場對芯片的需求激增,封裝企業面臨著效率提升、良率優…

從海洋生物找靈感:造個機器人RoboPteropod,它能在水下干啥?

大家好!在如今人類對水下環境探索不斷深入的時代,從水下考古到珊瑚礁考察,各種任務都離不開水下機器人的助力。但傳統水下機器人尺寸較大,在狹窄的水下空間施展不開。今天,我們就來認識一款受海洋小生物啟發而設計的仿…

區塊鏈blog1__合作與信任

🍂我們的世界 🌿不是孤立的,而是網絡化的 如果是單獨孤立的系統,無需共識,而我們的社會是網絡結構,即結點間不是孤立的 🌿網絡化的原因 而目前并未發現這樣的理想孤立系統,即現實中…

Linux服務之lvs+keepalived nginx+keepalived負載均衡實例解析

目錄 一.LVSKeepAlived高可用負載均衡集群的部署 二.NginxKeepAlived高可用負載均衡集群的部署 一.LVSKeepAlived高可用負載均衡集群的部署 實驗環境 主keepalived:192.168.181.10 lvs (7-1) 備keepalived:192.168.181.10…

50天50個小項目 (Vue3 + Tailwindcss V4) ? |搭建項目框架

🖤 一個專注于「Vue3 TailwindCSS」的 50 天極簡開發挑戰,探索組件邊界,打磨技術鋒芒。 🎉 歡迎來到 50 個小項目的第一天!今天我們將從零開始搭建一個 Vue3 項目,并引入 Tailwind CSS v4,為后…