【Dison夏令營 Day 04】如何用 Python 編寫簡單的數字猜謎游戲代碼

上個周末,我整理了一份可以用 Python 編寫的游戲列表。但為什么呢?

如果您是 Python 程序員初學者,編寫有趣的游戲可以幫助您更快更好地學習 Python 語言,而不會被語法之類的東西所困擾。我在學習 Python 的時候曾制作過一些這樣的游戲;我非常享受這個過程!

你可以編寫的第一個游戲,也是最簡單的一個游戲,就是猜數字游戲(或者叫 “猜數字”!)。因此,我想寫一篇循序漸進的教程來編寫這個游戲的代碼,并幫助初學者學習一些基礎知識。

Let’s begin!

在這里插入圖片描述

數字競猜游戲是如何進行的?

在數字競猜游戲中,用戶要在給定的嘗試次數內猜出一個隨機生成的秘密數字。

每次猜測之后,用戶都會得到提示,告訴他們猜測的數字是過高、過低還是正確。是的,當用戶猜中秘密數字或嘗試次數用完時,游戲就結束了。

數字猜謎游戲編碼

讓我們開始編碼吧!創建一個新的 Python 腳本并開始編碼。

第 1 步 - 導入隨機模塊

讓我們從導入內置 random 模塊開始。random 模塊中的函數可以用來生成指定范圍內的隨機秘密數字:

import random

注意random模塊給出的是偽隨機數,而不是真正的隨機數。因此,請勿將其用于密碼生成等敏感應用。

第 2 步 - 設置范圍和最大嘗試次數

接下來,我們需要確定秘密號碼的范圍和允許玩家嘗試的最大次數。在本教程中,我們把 lower_boundupper_bound 分別設為 1 和 1000。另外,將允許的最大嘗試次數 max_attempts 設為 10:

lower_bound = 1
upper_bound = 1000
max_attempts = 10

第 3 步 - 生成隨機數

現在,讓我們使用 random.randint() 函數在指定范圍內生成一個隨機數。這就是用戶需要猜測的秘密數字:

secret_number = random.randint(lower_bound, upper_bound)

第 4 步 - 讀取用戶輸入信息

為了獲取用戶的輸入,讓我們創建一個名為 get_guess() 的函數。記住,用戶可以輸入無效輸入:超出 [lower_bound, upper_bound] 范圍的數字、字符串或浮點數等。

我們將在 get_guess() 函數中處理這種情況,該函數會不斷提示用戶輸入一個數字–在指定范圍內–直到他們提供一個有效的輸入。

在這里,我們使用 while 循環來提示用戶輸入有效輸入,直到他們輸入一個介于 lower_boundupper_bound 之間的整數:

def get_guess():while True:try:guess = int(input(f"Guess a number between {lower_bound} and {upper_bound}: "))if lower_bound <= guess <= upper_bound:return guesselse:print("Invalid input. Please enter a number within the specified range.")except ValueError:print("Invalid input. Please enter a valid number.")

第 5 步 - 驗證用戶的猜測

接下來,讓我們定義一個 check_guess() 函數,它將用戶的猜測和秘密數字作為輸入,并就猜測是否正確、過高或過低提供反饋。

該函數將玩家的猜測與秘密數字進行比較,并返回相應的信息:

def check_guess(guess, secret_number):if guess == secret_number:return "Correct"elif guess < secret_number:return "Too low"else:return "Too high"

第 6 步 - 跟蹤嘗試次數并檢測游戲結束條件

現在我們將創建函數 play_game(),該函數負責處理游戲邏輯并將所有內容整合在一起。該函數使用 attempts 變量來跟蹤用戶的嘗試次數。在一個 while 循環中,用戶會被提示輸入一個猜測,并由 get_guess() 函數進行處理。

調用 check_guess() 函數可以獲得用戶猜測的反饋信息:

  • 如果猜測正確,用戶獲勝,游戲結束。
  • 否則,用戶將獲得另一次猜測機會。
  • 這個過程一直持續到玩家猜中秘密數字或猜完為止。
    下面是 play_game() 函數:
def play_game():attempts = 0won = Falsewhile attempts < max_attempts:attempts += 1guess = get_guess()result = check_guess(guess, secret_number)if result == "Correct":print(f"Congratulations! You guessed the secret number {secret_number} in {attempts} attempts.")won = Truebreakelse:print(f"{result}. Try again!")if not won:print(f"Sorry, you ran out of attempts! The secret number is {secret_number}.")

第 7 步 - 玩游戲!

最后,每次運行 Python 腳本時,都可以調用 play_game() 函數:

if __name__ == "__main__":print("Welcome to the Number Guessing Game!")play_game()

將所有內容整合在一起

現在我們的 Python 腳本是這樣的

# main.py
import random# define range and max_attempts
lower_bound = 1
upper_bound = 1000
max_attempts = 10# generate the secret number
secret_number = random.randint(lower_bound, upper_bound)# Get the user's guess
def get_guess():while True:try:guess = int(input(f"Guess a number between {lower_bound} and {upper_bound}: "))if lower_bound <= guess <= upper_bound:return guesselse:print("Invalid input. Please enter a number within the specified range.")except ValueError:print("Invalid input. Please enter a valid number.")# Validate guess
def check_guess(guess, secret_number):if guess == secret_number:return "Correct"elif guess < secret_number:return "Too low"else:return "Too high"# track the number of attempts, detect if the game is over
def play_game():attempts = 0won = Falsewhile attempts < max_attempts:attempts += 1guess = get_guess()result = check_guess(guess, secret_number)if result == "Correct":print(f"Congratulations! You guessed the secret number {secret_number} in {attempts} attempts.")won = Truebreakelse:print(f"{result}. Try again!")if not won:print(f"Sorry, you ran out of attempts! The secret number is {secret_number}.")if __name__ == "__main__":print("Welcome to the Number Guessing Game!")play_game()

下面是腳本運行樣本的輸出結果:

Welcome to the Number Guessing Game!
Guess a number between 1 and 1000: 500
Too low. Try again!
Guess a number between 1 and 1000: 750
Too high. Try again!
Guess a number between 1 and 1000: 625
Too low. Try again!
Guess a number between 1 and 1000: 685
Too low. Try again!
Guess a number between 1 and 1000: 710
Too low. Try again!
Guess a number between 1 and 1000: 730
Congratulations! You guessed the secret number 730 in 6 attempts.

結束

恭喜你您已經成功地用 Python 構建了一個數字競猜游戲。我們很快會在另一個教程中再見。不過,別等我了。Python很有趣的,你也可以在互聯網上找到更多有意思的代碼和程序哦!

感謝大家花時間閱讀我的文章,你們的支持是我不斷前進的動力。期望未來能為大家帶來更多有價值的內容,請多多關注我的動態!

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

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

相關文章

Hadoop-03-Hadoop集群 免密登錄 超詳細 3節點公網云 分發腳本 踩坑筆記 SSH免密 服務互通 集群搭建 開啟ROOT

章節內容 上一節完成&#xff1a; HDFS集群XML的配置MapReduce集群XML的配置Yarn集群XML的配置統一權限DNS統一配置 背景介紹 這里是三臺公網云服務器&#xff0c;每臺 2C4G&#xff0c;搭建一個Hadoop的學習環境&#xff0c;供我學習。 之前已經在 VM 虛擬機上搭建過一次&…

短視頻矩陣系統搭建APP源碼開發

前言 短視頻矩陣系統不僅有助于提升品牌影響力和營銷效率&#xff0c;還能幫助企業更精準地觸達目標受眾&#xff0c;增強用戶互動&#xff0c;并利用數據分析來持續優化營銷策略。 一、短視頻矩陣系統是什么&#xff1f; 短視頻矩陣系統是一種通過多個短視頻平臺進行內容創作…

Vue 3 實戰教程(快速入門)

Vue 3 實戰教程&#xff08;快速入門&#xff09; Vue.js 是一個用于構建用戶界面的漸進式框架&#xff0c;Vue 3 是 Vue 的最新版本&#xff0c;帶來了許多改進和新特性。本文將通過一個簡單的項目示例&#xff0c;帶你快速入門 Vue 3 的基礎使用。 環境設置 安裝 Node.js …

多多代播24小時值守:電商直播時代是帶貨爆單的關鍵

在電商直播盛行的今天&#xff0c;直播帶貨已成為品牌與消費者溝通的關鍵。然而&#xff0c;流量波動大&#xff0c;競爭激烈&#xff0c;使品牌面臨諸多挑戰。因此&#xff0c;許多品牌尋求專業代播服務&#xff0c;并特別強調24小時值守的重要性。 流量來源的不穩定性是一個顯…

《VUE.js 實戰》讀書筆記

1. 初識vue.js MVVM模式從MVC模式演化而來&#xff0c;但是MVVM模式更多應用在前端&#xff0c;MVC則是前后端共同表現。傳統開發模式&#xff1a;jQuery RequireJS ( SeaJS ) artTemplate ( doT ) Gulp ( Grunt)。vue.js可以直接通過script引入方式開發&#xff0c;也可以…

Linux下安裝RocketMQ:從零開始的消息中間件之旅

感謝您閱讀本文&#xff0c;歡迎“一鍵三連”。作者定會不負眾望&#xff0c;按時按量創作出更優質的內容。 ?? 1. 畢業設計專欄&#xff0c;畢業季咱們不慌&#xff0c;上千款畢業設計等你來選。 RocketMQ是一款分布式消息中間件&#xff0c;具有高吞吐量、低延遲、高可用性…

本末倒置!做660+880一定要避免出現這3種情況!

每年都有不少人做過660題&#xff0c;但是做過之后&#xff0c;并沒有真正理解其中的題目&#xff0c;所以做過之后效果也不好&#xff01;再去做880題&#xff0c;做的也會比較吃力。 那該怎么辦呢&#xff0c;不建議你繼續做880題&#xff0c;先把660給吃透再說。 接下來給…

PostgreSQL使用教程

安裝 PostgreSQL 您可以從 PostgreSQL 官方網站下載適合您操作系統的安裝程序&#xff0c;并按照安裝向導進行安裝。 啟動數據庫服務器 安裝完成后&#xff0c;根據您的操作系統&#xff0c;通過相應的方式啟動數據庫服務器。 連接到數據庫 可以使用命令行工具&#xff08;如 p…

Objective-C使用塊枚舉的細節

對元素類型的要求 在 Objective-C 中&#xff0c;NSArray 只能存儲對象類型&#xff0c;而不能直接存儲基本類型&#xff08;例如 int&#xff09;。但是&#xff0c;可以將基本類型封裝在 NSNumber 等對象中&#xff0c;然后將這些對象存儲在 NSArray 中。這樣&#xff0c;en…

Maven編譯打包時報“PKIX path building failed”異常

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 方法11.報錯信息2.InstallCert.java3.生成證書文件 jssecacerts4.復制 jssecacerts 文件5. 然后重啟Jenkins 或者maven即可 方法21.下載證書2. 導入證書執行keytool…

7.優化算法之分治-快排歸并

0.分治 分而治之 1.顏色分類 75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; 給定一個包含紅色、白色和藍色、共 n 個元素的數組 nums &#xff0c;原地對它們進行排序&#xff0c;使得相同顏色的元素相鄰&#xff0c;并按照紅色、白色、藍色順序排列。 我們使用整數…

Elasticsearch (1):ES基本概念和原理簡單介紹

Elasticsearch&#xff08;簡稱 ES&#xff09;是一款基于 Apache Lucene 的分布式搜索和分析引擎。隨著業務的發展&#xff0c;系統中的數據量不斷增長&#xff0c;傳統的關系型數據庫在處理大量模糊查詢時效率低下。因此&#xff0c;ES 作為一種高效、靈活和可擴展的全文檢索…

PHP爬蟲類的使用技巧與注意事項

php爬蟲類的使用技巧與注意事項 隨著互聯網的迅猛發展&#xff0c;大量的數據被不斷地生成和更新。為了方便獲取和處理這些數據&#xff0c;爬蟲技術應運而生。PHP作為一種廣泛應用的編程語言&#xff0c;也有許多成熟且強大的爬蟲類庫可供使用。在本文中&#xff0c;我們將介…

Qt Creator 的設置文件保存位置

在使用 Qt Creator 進行開發時,備份或遷移設置(例如文本編輯器偏好、語法高亮等)是常見需求。了解這些設置文件在不同操作系統中的保存位置,可以簡化這個過程。本文將為您詳細介紹 Qt Creator 保存設置文件的位置。 默認文件位置 Qt Creator 會創建多個文件和目錄來存儲其…

springboot系列八: springboot靜態資源訪問,Rest風格請求處理, 接收參數相關注解

文章目錄 WEB開發-靜態資源訪問官方文檔基本介紹快速入門注意事項和細節 Rest風格請求處理基本介紹應用實例注意事項和細節思考題 接收參數相關注解基本介紹應用實例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute ?? 上一篇…

微服務-網關Gateway

個人對于網關路由的理解&#xff1a; 網關就相當于是一個項目里面的保安&#xff0c;主要作用就是做一個限制項。&#xff08;zuul和gateway兩個不同的網關&#xff09; 在路由中進行配置過濾器 過濾器工廠&#xff1a;對請求或響應進行加工 其中filters&#xff1a;過濾器配置…

探索QCS6490目標檢測AI應用開發(三):模型推理

作為《探索QCS6490目標檢測AI應用開發》文章&#xff0c;緊接上一期&#xff0c;我們介紹如何在應用程序中介紹如何使用解碼后的視頻幀結合Yolov8n模型推理。 高通 Qualcomm AI Engine Direct 是一套能夠針對高通AI應用加速的軟件SDK&#xff0c;更多的內容可以訪問&#xff1a…

摸魚大數據——Spark基礎——Spark環境安裝——PySpark搭建

三、PySpark環境安裝 PySpark: 是Python的庫, 由Spark官方提供. 專供Python語言使用. 類似Pandas一樣,是一個庫 Spark: 是一個獨立的框架, 包含PySpark的全部功能, 除此之外, Spark框架還包含了對R語言\ Java語言\ Scala語言的支持. 功能更全. 可以認為是通用Spark。 功能 P…

Golang | Leetcode Golang題解之第199題二叉樹的右視圖

題目&#xff1a; 題解&#xff1a; /** 102. 二叉樹的遞歸遍歷*/ func levelOrder(root *TreeNode) [][]int {arr : [][]int{}depth : 0var order func(root *TreeNode, depth int)order func(root *TreeNode, depth int) {if root nil {return}if len(arr) depth {arr a…

線性代數--行列式1

本篇來自對線性代數第一篇的行列式的一個總結。 主要是行列式中有些關鍵點和注意事項&#xff0c;便于之后的考研復習使用。 首先&#xff0c;對于普通的二階和三階行列式&#xff0c;我們可以直接對其進行拆開&#xff0c;展開。 而對于n階行列式 其行列式的值等于它的任意…