Python 打印迷宫地图小游戏

article/2025/3/11 0:51:24

在实现玩转小迷宫这个游戏时,分别使用了input()输入函数、print()输出函数、if…elif…else语句、二维列表、while循环、for循环

下面对这些用法再一次重温

1.input()输入函数
在 Python 中,使用内置函数 input() 可以接收用户的键盘输入。input() 函数的基本用法如下:

variable = input("提示文字")

其中,variable 为保存输入结果的变量,双引号内的文字用于提示要输入的内容。例如,想要接收 用户输入的内容,并保存到变量tip中,可以使用下面的代码:

tip = input("请输入文字:")

在ython3.x中,无论输入的是数字还是字符都将被作为字符串读取。如果想要接收数值,需要把接收到的字符串进行类型转换。例如,想要接收整型的数字并保存到变量age中,可以使用下面的代码:

age = int(input("请输入数字:"))

说明:在Python2.x中,input()函数接收内容时,数值直接输入即可,并且接收后的内容作为数字类型;而如果要输入字符串类型的内容,需要将对应的字符串使用引号括起来,否则会报错。

实现根据身高、体重计算BMI指数的示例代码如下:

height = float(input("请输入您的身高(单位为米):"))      # 输入身高,单位:米
weight = float(input("请输入您的体重(单位为千克):"))     # 输入体重,单位:千克
bmi=weight/(height*height)           # 用于计算BMI指数,公式为“体重/身高的平方”
print("您的BMI指数为:"+str(bmi))   # 输出BMI指数
# 判断身材是否合理
if bmi<18.5:print("您的体重过轻 ~@_@~")
if bmi>=18.5 and bmi<24.9:
print("正常范围,注意保持 (-_-)")
if bmi>=24.9 and bmi<29.9:print("您的体重过重 ~@_@~")
if bmi>=29.9:print("肥胖 ^@_@^")

2.print()输出函数
默认的情况下,在Python中,使用内置的print()函数可以将结果输出到IDLE或者标准控制台上。其基本语法格式如下:

print(输出内容)

中,输出内容可以是数字和字符串(字符串需要使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式,此类内容将计算结果输出。例如:

a = 10 # 变量a,值为10
b = 6  # 变量b,值为6
print(6)   # 输出数字6
print(a*b) # 输出变量a*b的结果60
print(a if a>b else b) # 输出条件表达式的结果10
print("成功的唯一秘诀——坚持最后一分钟")  # 输出字符串“成功的唯一秘诀——坚持最后一分钟”

3.if…elif…else语句
在开发程序时,如果遇到多选一的情况,则可以使用if…elif…else语句,该语句是一个多分支选择语句,通常表现为“如果满足某种条件,就会进行某种处理,否则,如果满足另一种条件,则执行另一种处理……”。if…elif…else语句的语法格式如下:

if 表达式1: 语句块1
elif 表达式2: 语句块2
elif 表达式3: 语句块3

else:语句块n

使用if…elif…else语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式,如果表达式为真,执行语句;而如果表达式为假,则跳过该语句,进行下一个elif的判断,只有在所有表达式都为假的情况下,才会执行else中的语句。if…elif…else语句的流程如下图1所示

注意:if和elif都需要判断表达式的真假,而else则不需要判断;另外,elif和else都必须跟if一起使用,不能单独使用。
使用if…elif…else多分支语句实现根据用户输入的年龄输出相应的提示信息的功能,示例代码如下:

your_age = int(input("请输入您的年龄:"))      # 获取用户输入的年龄,并转换为整型
if your_age <= 18:                              # 调用if语句判断输入的数据是否小于等于18# 如果小于等于18则输出提示信息print("您的年龄还小,要努力学习哦!")
elif 18 < your_age <= 30:         # 判断是否大于18岁,并且小于30岁
# 如果输入的年龄大于18岁并且小于30岁则输出提示信息print("您现在的阶段正是努力奋斗的黄金阶段!")
elif 30 < your_age <= 50:         # 判断输入的年龄是否大于30岁小于等于50岁# 如果输入的年龄大于30岁而小于等于50岁则输出提示信息print("您现在的阶段正是人生的黄金阶段!")
else:print("最美不过夕阳红!")

说明:第1行代码中的int()函数用于将用户的输入强制转换成整型。
4.二维列表
在Python中,由于列表元素还可以是列表,所以它也支持二维列表的概念。那么什么是二维列表?前文提到酒店有很多房间,这些房间都可以构成一个列表,如果这个酒店有500个房间,那么拿到499号房钥匙的旅客可能就不高兴了,从1号房走到499号房要花好长时间,因此酒店设置了很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊到每个楼层,这种结构就是二维列表结构。使用二维列表结构表示酒店每个楼层的房间号的效果如图2所示。

在Python中,二维列表是包含列表的列表,即一个列表的每一个元素又都是一个列表。创建二维列表可以参考以下代码:

listname = [['千', '山', '鸟', '飞', '绝'],['万', '径', '人', '踪', '灭'],['孤', '舟', '蓑', '笠', '翁'],['独', '钓', '寒', '江', '雪']]

创建二维数组后,可以通过以下语法格式访问列表中的元素:

listname[下标1][下标2]

参数说明如下:

  • listname :列表名称。
  • 下标 1 :表示列表中第几行,下标值从 0 开始,即第一行的下标为 0。
  • 下标 2 :表示列表中第几列,下标值从 0 开始,即第一列的下标为 0。 例如,要访问二维列表中的第 2 行,第 4
    列,可以使用下面的代码:
print(listname[1][3])

5.while循环
while循环是通过一个条件来控制是否要继续反复执行循环体中的语句。语法如下:

while 条件表达式: 
循环体

说明:循环体是指一组被重复执行的语句。
当条件表达式的返回值为真时,则执行循环体中的语句,执行完毕后,重新判断条件表达式的返 回值,直到表达式返回的结果为假时,退出循环。while 循环语句的执行流程如图3所示。

使用while循环语句实现从1开始依次尝试符合条件的数,直到找到符合条件的数时,才退出循环。具体的实现方法是:首先定义一个用于计数的变量number和一个作为循环条件的变量none(默认值为真),然后编写while循环语句,在循环体中,将变量number的值加1,并且判断number的值是否符合条件,当符合条件时,将变量none设置为假,从而退出循环。具体代码如下:

print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?\n")
none = True                                                # 作为循环条件的变量
number = 0                                                  # 计数的变量
while none:number += 1                                             # 计数加1if number%3 ==2 and number%5 ==3 and number%7 ==2:  # 判断是否符合条件print("答曰:这个数是",number)                      # 输出符合条件的数none = False                                        # 将循环条件的变量赋值为否

6.for循环
for循环是一个依次重复执行的循环。通常适用于枚举或遍历序列,以及迭代对象中的元素。语法如下:

for 迭代变量 in 对象:
循环体

其中,迭代变量用于保存读取出的值;对象为要遍历或迭代的对象,该对象可以是任何有序的序列对象,如字符串、列表和元组等;循环体为一组被重复执行的语句。
for循环语句的执行流程如图4所示。

在使用 for 循环时,最基本的应用就是进行数值循环。例如,想要实现从 1 到 100 的累加,可以 通过下面的代码实现:

print("计算1+2+3+……+100的结果为:")
result = 0 # 保存累加结果的变量
for i in range(101):result += i    # 实现累加功能print(result)  # 在循环结束时输出结果

上面的代码中,使用了range()函数,该函数是Python内置的函数,用于生成一系列连续的整数,多用于for循环语句中。其语法格式如下:
range(start,end,step)
参数说明如下:

  • start :用于指定计数的起始值,可以省略,如果省略则从 0 开始。
  • end :用于指定计数的结束值(但不包括该值,如 range(7),则得到的值为 0~6,不包括 7), 不能省略。当 range()
    函数中只有一个参数时,即表示指定计数的结束值。
  • step :用于指定步长,即两个数之间的间隔,可以省略,如果省略则表示步长为 1。例如, range(1,7) 将得到
    1、2、3、4、5、6。

注意:在使用range()函数时,如果只有一个参数,那么表示指定的是end;如果有两个参数,则表3
示指定的是start和end;如果3个参数都存在时,最后一个参数才表示步长。

实例

import time     # 导入时间模块
# 模拟迷宫地图的二维列表
map_list=[
["  ","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@"],
["=>","Y"," "," ","@","@"," "," "," "," "," "," ","@"," "," "," ","@","@"," "," "," ","@"," ","@"," ","@"," ","@"," ","@","@"],
["  ","@"," "," ","@","@","@"," ","@"," ","@"," ","@","@","@"," "," "," "," ","@"," ","@"," ","@","@","@"," ","@","@","@","@"],
["  ","@"," ","@"," "," "," ","@","@"," ","@"," "," "," ","@","@","@","@","@","@"," ","@"," ","@","@","@"," "," "," ","@","@"],
["  ","@"," "," "," ","@"," ","@","@"," "," ","@","@","@"," ","@","@"," ","@"," "," ","@"," "," ","@","@"," ","@","@","@","@"],
["  ","@","@","@","@","@"," ","@"," ","@","@"," "," ","@"," ","@","@","@","@","@"," ","@","@"," "," "," "," ","@","@","@","@"],
["  ","@"," "," "," ","@"," ","@","@","@","@","@"," ","@"," "," "," ","@","@","@"," ","@"," ","@"," ","@"," "," "," "," ","@"],
["  ","@"," ","@"," ","@"," ","@","@"," ","@","@","@"," "," ","@","@"," "," "," "," ","@","@","@"," ","@"," ","@","@","@","@"],
["  ","@"," ","@"," "," "," ","@","@"," "," "," ","@","@","@","@","@","@","@","@","@","@","@"," ","@","@","@"," "," "," ","@"],
["  ","@"," ","@","@","@","@","@","@"," ","@"," ","@","@","@","@","@"," "," "," "," "," "," "," "," "," "," "," ","@"," ","@"],
["  ","@"," "," "," "," "," "," "," "," ","@"," ","@"," "," "," "," "," ","@","@","@","@","@"," ","@","@","@"," ","@"," "," ","=>"],
["  ","@"," ","@","@","@","@","@","@","@","@"," ","@","@","@","@","@"," ","@","@","@","@","@"," ","@","@","@"," ","@","@","@"],
["  ","@"," "," "," "," "," ","@"," ","@","@"," ","@","@","@","@","@"," ","@","@","@"," "," "," "," "," "," "," ","@","@","@"],
["  ","@","@","@","@","@"," ","@"," ","@","@"," ","@"," "," "," "," "," "," ","@","@","@","@","@","@","@","@"," ","@"," ","@"],
["  ","@"," "," "," "," "," ","@"," ","@","@"," ","@","@"," ","@","@","@"," "," "," "," "," "," "," "," ","@"," "," "," ","@"],
["  ","@"," ","@"," ","@","@","@"," "," "," "," "," "," "," ","@","@","@","@","@","@"," ","@","@","@","@","@","@","@"," ","@"],
["  ","@"," "," "," "," "," "," "," ","@","@"," ","@","@"," "," "," "," "," "," ","@"," "," "," "," "," "," "," "," "," ","@"],
["  ","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@","@"]]
# 更新地图
def up_map():# 打印小标题并指定打印区域的文字以及背景颜色print("\033[1;30;42m  ----------小迷宫-----------")for i,values in enumerate(map_list):       # 遍历二维列表中的18个子列表for j in range(len(values)):   # 遍历子列表中的元素# 打印每个子列表中的所有元素,并且不换行打印print(map_list[i][j], end="")print("")             # 每打印一个子列表所有元素,换行一次print("\033[0m",end="")          # 背景色结束位置if __name__ == '__main__':x = 1            # 横向坐标默认值y = 1            # 纵向坐标默认值step_number = 0  # 记录行走步数的变量up_map()         # 更新模拟地图start = time.time()  # 获取开始时的时间戳while True:# 判断当小人走到迷宫出口时,打印胜利文字,跳出循环if x == 30 and y == 10:print("\033[31m恭喜您!走出了迷宫!\033[0m")print("\033[31m共计行走了",step_number,"步!\033[0m")print("\033[31m共计用时",int(time.time()-start),"秒!\033[0m")breakprint("\033[31m请输入行走的方向(输入exit将退出游戏!)\033[0m")# 获取输入的行走方向w为上、s为下、a为左、d为右direction = input("\033[31mw为上、s为下、a为左、d为右:\033[0m")# 当用户输入w,控制人物向上走if (direction == "w"):if map_list[y - 1][x] != "@":map_list[y][x] = " "y -= 1map_list[y][x] = "Y"step_number += 1  # 修改小人移动步数else:print('\033[31m碰到墙壁!\033[0m')up_map()   # 更新地图# 当用户输入s,控制人物向下走elif (direction == "s"):if map_list[y+1][x] != "@":    # 判断行走位置不是墙时,@(表示墙)map_list[y][x] = " "          # 将小人原来的位置设置为空y += 1                     # 修改Y坐标位置map_list[y][x] = "Y"          # 将移动后的位置设置为Y(表示小人)step_number+=1             # 修改小人移动步数else:print('\033[31m碰到墙壁!\033[0m')   # 当用户输入的位置是墙时,做出提示up_map()    # 更新地图# 当用户输入a,控制人物向左走elif (direction == "a"):if map_list[y][x - 1] != "@":map_list[y][x] = " "x -= 1map_list[y][x] = "Y"step_number += 1  # 修改小人移动步数else:print('\033[31m碰到墙壁!\033[0m')up_map()  # 更新地图# 当用户输入d,控制人物向右走elif (direction == "d"):if map_list[y][x + 1] != "@":map_list[y][x] = " "x += 1map_list[y][x] = "Y"step_number += 1  # 修改小人移动步数else:print('\033[31m碰到墙壁!\033[0m')up_map()   #更新地图# 当用户输入退出命令,跳出循环elif (direction == "exit"):print("游戏退出。")break

http://chatgpt.dhexx.cn/article/sBX4HE1P.shtml

相关文章

html5的canvas绘制迷宫地图

canvas标签一直是html5的亮点,用它可以实现很多东西。我想用它来绘画像迷宫那样的地图。借助到的工具有瓦片地图编辑器tiled(点击跳转到下载链接)。 如图:如果你想要画像这样的迷宫地图,如果不用canvas,可以通过dom操作拼接一个一个div,以达成这个效果。那样是不是很不合…

深度优先,Kruskal,Prim几种方式生成迷宫地图

小时候玩过一款3D版迷宫&#xff0c;那时还是功能机时代&#xff0c;黑白界面拼凑的伪3D效果还是给我带来了很多快乐。后来出现了智能机&#xff0c;却再也没找到过那样纯粹的迷宫游戏。总算自己找时间做一个出来。 本文主要介绍一下深度优先&#xff0c;Kruskal,Prim几种方式生…

二维数组随机生成地图迷宫_经验分享:三套简单的迷宫地图生成方案

文/兔四 概述:文章基于一种基础的地图,来讨论三套不同的地图生成方案。 文章不会出现跟代码相关的内容,会以较为通俗的语句和不少简单的示意图来表示迷宫的生成方案。其中不少方法来自于游戏界前辈,我根据自己的基础地图做了不少修正(毕竟迷宫和地图的形式多种多样,适合自…

算法自动生成迷宫地图

文章目录 前言一、什么是&#xff08;DFS&#xff09;深度优先算法&#xff1f;深度优先算法实现步骤1.引入库2.初始化参数3.Turtle画方格函数4.开始生成数组并调用Turtle画图 二、什么是&#xff08;BFS&#xff09;广度优先算法&#xff1f;广度优先算法实现步骤1.引入库2.初…

【工具篇】Unity迷宫地图生成器MazeSpawner随机迷宫信手拈来

目录 一.迷宫生成效果 二.使用流程 三.使用场景 四.源码地址 一.迷宫生成效果 二.使用流程 1.导入后结构目录如下,打开prefab文件夹找到MazeSpawner放进场景里面

C++实现随机生成迷宫地图自动完成寻径

#include<iostream> #include<stack> #include<vector> using namespace std;template<class T> class Maze { public:Maze( //默认参数值pair<int, int> initSize make_pair(15, 17),pair<string, string> initStyle m…

Python 制作迷宫游戏(一)——地图

Python 制作迷宫游戏&#xff08;一&#xff09;——地图 序 作为一个迷宫类的游戏&#xff0c;其最重要的是什么&#xff1f;当然是它的地图啦♪(∇*) 那么我们又该如何制作一张迷宫地图呢⊙(・◇・)&#xff1f; 很显然&#xff0c;我们不可能一张张自己画吧 网络上常见的迷…

三套简单的迷宫地图生成方案

地图基础 地图的形式很多&#xff0c;这里我使用的地图是以tile块为单位分割的地图&#xff0c;地图上的tile块形式很多&#xff0c;但主要分成三种&#xff1a; A&#xff1a;陆地&#xff0c;可以在上面分布一些角色啦物件啦&#xff1b; B&#xff1a;过渡&#xff0c;根据物…

SenticNet情感词典介绍

在进行情感分析时&#xff0c;一个好的情感词典能够让我们的工作事半功倍&#xff0c;较为出名的情感词典有SentiWordNet&#xff0c;General Inquirer等&#xff0c;这篇博客将介绍另外一个出色情感词典&#xff0c;SenticNet。 简介 当谈论SenticNet时&#xff0c;我们正在…

中文金融领域情感词典构建

2019年10月4日-6日 Python爬虫与文本分析工作坊 & 课题申报高级研修班 这篇文章是公众号关注者郝童鞋今早发给我的&#xff0c;在此谢谢郝童鞋。 文章基于简单算法和人工判断&#xff0c;使用多阶段剔除法&#xff0c;构建了 中文金融情感词典CFSD&#xff08;ChineseFinan…

《学术小白的学习之路 02》情感分析02 之基于大连理工情感词典的情感分析和情绪计算

本文主要是学习参考杨秀璋老师的博客,笔记总结。 原文链接 文章目录 书山有路勤为径&#xff0c;学海无涯苦作舟原文链接一.大连理工情感词典二、七种情绪的计算2.1 pandas读取数据2.2 导入大连理工大学中文情感词典2.3 统计七种情绪的分布情况2.4 增加中文分词词典和自定义的停…

中文情感词典的构建

首先&#xff0c;国外英文的情感分析已经取得了很好的效果&#xff0c;得益于英文单词自身分析的便捷性与英文大量的数据集 WordNet。但由于中文的多变性&#xff0c;语义的多重性与数据集的缺乏&#xff0c;使得国内的情感分析暂落后于国外。本文将记录博主在项目中构建情感词…

基于情感词典的网络文本情感倾向分类模型

目录 前言一、模型构建1.归类2.判定3.输出 二、代码实现三、结果展示 前言 文本情感倾向性分析&#xff08;也称为意见挖掘&#xff09;是指识别和提取原素材中的主观信息&#xff0c;并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容&#xf…

使用SO-PMI算法构建行业/专业情感词典

文章目录 1. 情感词典内容2. 情感倾向点互信息算法&#xff08;SO-PMI&#xff09;算法点互信息算法 PMI情感倾向点互信息算法 SO-PMI 3. 构建情感词典1. 导入项目2. 构建情感种子词3. 使用TF-IDF方便构建情感种子词4. 构建专业词典的效果与使用方法5. 其他说明 1. 情感词典内容…

在微雕中使用的电脑设计

需求是我们要在铜器上复刻很小的凹印,可以选用的技术方案还是很多:激光雕刻,篆刻、钢印。 激光雕刻有利有弊,前期复制是最方便的,激光雕刻有专门的设计软件,可以很轻松的把自己的图案运用到机器上去。制作和时间的成本都非常的低,但是激光对金属的雕刻有一个大大的缺点…

闲人闲谈PS之四十二——顾问的“禁忌之地”—制造能力计划

惯例闲话&#xff1a;上个月有幸成为乐老师乐谈IT系列培训课程的讲师&#xff0c;分享主题是&#xff0c;PS在装备制造和工程行业的应用。虽然培训规模不是很大&#xff0c;但是闲人很有信心&#xff0c;至少在小范围之内&#xff0c;参与培训的听友人来说&#xff0c;PS一直以…

ibm x201 怎么清理内部_ThinkPad X201拆解,联想Thinkpad X201拆机图解

1.jpg (25.79 KB, 下载次数: 2552) 2010-6-1 20:13 上传 ThinkPad X201掌托&#xff0c;没有防滚架&#xff0c;这个掌托就显得很软。电磁屏蔽做得很用心。 2.jpg (39.16 KB, 下载次数: 2556) 2010-6-1 20:13 上传 ThinkPad X201掌托特写&#xff0c;可以看到掌托塑料件是MITSU…

学习opencv:PS滤镜—浮雕

实现浮雕效果的算子有很多&#xff0c;效果大同小异&#xff0c;不同算子的处理结果在细节上会有所差异。事实上&#xff0c;任何一阶差分算子都可用于实现浮雕效果&#xff0c;简单起见&#xff0c;这里使用算子[-1,1]。 代码如下 #include<iostream> #include <…

ps给图片加钢印方法

给图片加一个钢印其实很简单 这样的效果只能类似钢印 简单可以按照下面的方法 准备资料 &#xff1a;一个要加钢印的图片 一个透明印章即可实现 方法&#xff1a;斜面和浮雕 一、打开图片 二、打开透明印章 三、将透明印章移动到图片中 四、进行图层设置 右击印章图层---混合…

PS钢印效果制作

PS制作钢印效果一法 转载教程:严禁做假.... 附件 1.jpg (37.05 KB) 2008-6-10 22:39 2.jpg (33.59 KB) 2008-6-10 22:39 3.jpg (38.57 KB) 2008-6-10 22:39 4.jpg (42.49 KB) 2008-6-10 22:39 5.jpg (39.2 KB) 2008-6-10 22:39 6.jpg (44.63 KB) 2008-6-10 22:39 7.jpg…