【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.mzph.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; 短视频矩阵系统是一种通过多个短视频平台进行内容创作…

多多代播24小时值守:电商直播时代是带货爆单的关键

在电商直播盛行的今天&#xff0c;直播带货已成为品牌与消费者沟通的关键。然而&#xff0c;流量波动大&#xff0c;竞争激烈&#xff0c;使品牌面临诸多挑战。因此&#xff0c;许多品牌寻求专业代播服务&#xff0c;并特别强调24小时值守的重要性。 流量来源的不稳定性是一个显…

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 作为一种高效、灵活和可扩展的全文检索…

springboot系列八: springboot静态资源访问,Rest风格请求处理, 接收参数相关注解

文章目录 WEB开发-静态资源访问官方文档基本介绍快速入门注意事项和细节 Rest风格请求处理基本介绍应用实例注意事项和细节思考题 接收参数相关注解基本介绍应用实例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute ⬅️ 上一篇…

微服务-网关Gateway

个人对于网关路由的理解&#xff1a; 网关就相当于是一个项目里面的保安&#xff0c;主要作用就是做一个限制项。&#xff08;zuul和gateway两个不同的网关&#xff09; 在路由中进行配置过滤器 过滤器工厂&#xff1a;对请求或响应进行加工 其中filters&#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阶行列式 其行列式的值等于它的任意…

C++特殊类设计单例模式...

文章目录 请设计一个类&#xff0c;不能被拷贝请设计一个类&#xff0c;只能在堆上创建对象请设计一个类&#xff0c;只能在栈上创建对象请设计一个类&#xff0c;不能被继承请设计一个类&#xff0c;只能创建一个对象(单例模式)单例模式&#xff1a;饿汉模式&#xff1a;懒汉模…

代发考生战报:6月25号 南宁 HCIP-Transmission传输 H31-341考试884分通过

代发考生战报&#xff1a;6月25号 南宁 HCIP-Transmission传输 H31-341考试884分通过 &#xff0c;今天我和同事两个人去考的&#xff0c;我考试遇到1个新题&#xff0c;他遇到两个新题&#xff0c;客服提供的题库很稳定&#xff0c;全覆盖了&#xff0c;轻松通过&#xff0c;考…

【语言模型】Xinference的部署过程

一、引言 Xinference&#xff0c;也称为Xorbits Inference&#xff0c;是一个性能强大且功能全面的分布式推理框架&#xff0c;专为各种模型的推理而设计。无论是研究者、开发者还是数据科学家&#xff0c;都可以通过Xinference轻松部署自己的模型或内置的前沿开源模型。Xinfe…

pikachu靶场 利用Rce上传一句话木马案例(工具:中国蚁剑)

目录 一、准备靶场&#xff0c;进入RCE 二、测试写入文件 三、使用中国蚁剑 一、准备靶场&#xff0c;进入RCE 我这里用的是pikachu 打开pikachu靶场&#xff0c;选择 RCE > exec "ping" 测试是否存在 Rce 漏洞 因为我们猜测在这个 ping 功能是直接调用系统…

性能评测系列:云架构扩展演进横向对比

原始测评报告 性能评测系列&#xff08;PT-010&#xff09;&#xff1a;Spring Boot RDS for MySQL&#xff0c;高并发insert 性能评测系列&#xff08;PT-012&#xff09;&#xff1a;Spring Boot(K8s多实例) RDS for MySQL&#xff0c;高并发insert 性能评测系列&#xff…