Python 打印迷宫地图小游戏

在实现玩转小迷宫这个游戏时,分别使用了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                                             # 计数加1
    if 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")
            break
        print("\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 -= 1
                map_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 -= 1
                map_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 += 1
                map_list[y][x] = "Y"
                step_number += 1  # 修改小人移动步数
            else:
                print('\033[31m碰到墙壁!\033[0m')
            up_map()   #更新地图
        # 当用户输入退出命令,跳出循环
        elif (direction == "exit"):
            print("游戏退出。")
            break

猜你喜欢

转载自blog.csdn.net/Yuyu920716/article/details/111713788
今日推荐