大家好,欢迎来到Python零基础入门系列。上节课我们学习了input()用户输入、while/for循环以及break/continue控制语句,最后我们一起完成了一个简单的游戏循环菜单,就是这段我们已经写好的代码:
# 上节课我们完成的循环菜单系统while True: # 1. 打印菜单 print("====== 游戏菜单 ======") print("1. 开始游戏") print("2. 查看帮助") print("3. 退出游戏") print("======================") # 2. 获取用户输入 choice = input("请输入你的选择(1/2/3):") # 3. 根据选择执行功能 if choice == "1": print("游戏开始!冲呀!") elif choice == "2": print("帮助:输入1开始,3退出") elif choice == "3": print("退出成功,欢迎下次再来!") break # 退出循环,结束程序 else: print("输入错误,请重新输入!") # 空行分隔,界面更整洁 print()
但是你有没有发现,这个菜单太简单了?我们的勇者去冒险,打怪会捡到各种道具,比如小红药水、铁剑、铜钥匙... 这些东西要放在哪里呢?
之前的代码里,我们没有地方存这些道具,也没法查看背包、使用道具。今天我们就来解决这个问题,学习Python中最常用的数据结构——列表,然后我们一起给上节课的菜单加上背包系统,让我们的勇者可以捡道具、存道具、用道具!
一、为什么我们需要列表?
在这之前,我们学过的变量都只能存一个值:
name = "小勇者" # 存一个名字hp = 100 # 存一个血量attack = 15 # 存一个攻击力
但是如果我们要存背包里的一堆道具呢?难道要定义一堆单独的变量吗?
item1 = "小红药水"item2 = "铁剑"item3 = "铜钥匙"item4 = "金币"# ... 如果捡了新道具,还要再定义item5, item6... 太麻烦了!
而且更麻烦的是,我们根本不知道用户会捡多少个道具,没法提前定义这么多变量。这时候,列表(List)就派上用场了!
列表就像一个有序的储物格,你可以把一堆东西放进去,随时添加、删除、查看,而且它的大小是动态的,想加多少加多少(只要内存够),完美适合做我们的背包!
二、认识列表:你的背包格子
2.1 创建你的第一个列表
在Python里,列表用方括号[]来表示,里面的元素用逗号隔开。就这么简单!
# 1. 创建空列表(就像一个空背包)backpack = []print(backpack) # 输出: []# 2. 创建带初始元素的列表(初始背包里有药水和剑)backpack = ["小红药水", "铁剑"]print(backpack) # 输出: ['小红药水', '铁剑']# 列表里的元素可以是不同类型哦!字符串、数字、布尔都可以放mixed_list = ["药水", 100, True, 3.14]print(mixed_list) # 输出: ['药水', 100, True, 3.14]
2.2 访问列表里的道具:索引
列表是有序的,每个元素都有自己的位置,我们叫它索引(Index)。
⚠️ 新手踩坑提醒:
Python的列表索引是从0开始的!很多刚学编程的同学会搞错,以为第一个元素的索引是1,这会导致"索引越界"的错误哦!
举个例子:列表有3个元素,索引分别是0、1、2,最大的索引是2,刚好等于 len(列表)-1。
backpack = ["小红药水", "铁剑", "铜钥匙"]# 访问第一个元素(索引0)print(backpack[0]) # 输出: 小红药水# 访问第二个元素(索引1)print(backpack[1]) # 输出: 铁剑# 访问最后一个元素(索引2)print(backpack[2]) # 输出: 铜钥匙# 也可以用负数索引!-1代表最后一个,-2代表倒数第二个print(backpack[-1]) # 输出: 铜钥匙print(backpack[-2]) # 输出: 铁剑
2.3 往背包里加道具:append()
当你冒险捡到新道具的时候,要把它加到背包里,最常用的就是append()方法,它会把新元素加到列表的最后面。
backpack = ["小红药水", "铁剑"]print("捡道具前的背包:", backpack) # 输出: 捡道具前: ['小红药水', '铁剑']# 捡到了铜钥匙,加到背包里backpack.append("铜钥匙")print("加了钥匙后:", backpack) # 输出: 加了钥匙后: ['小红药水', '铁剑', '铜钥匙']# 又捡到了金币backpack.append("金币")print("现在的背包:", backpack) # 输出: 现在的背包: ['小红药水', '铁剑', '铜钥匙', '金币']
💡 小技巧:append()是最常用的添加元素的方法,它的速度非常快,大部分时候我们都用它来加新元素。
2.4 从背包里删道具:remove()和pop()
当你用了道具,或者要丢东西的时候,就要删除列表里的元素。我们有两个常用的方法:
remove(元素值)pop(索引):根据索引删除,比如删除第3个位置的元素,不写索引默认删最后一个
backpack = ["小红药水", "铁剑", "铜钥匙", "金币"]# 1. 用了小红药水,按内容删除backpack.remove("小红药水")print("用了药水后:", backpack) # 输出: 用了药水后: ['铁剑', '铜钥匙', '金币']# 2. 丢掉了最后一个道具(金币),用pop()backpack.pop()print("丢了金币后:", backpack) # 输出: 丢了金币后: ['铁剑', '铜钥匙']# 3. 丢掉第一个道具(铁剑),按索引popbackpack.pop(0)print("丢了铁剑后:", backpack) # 输出: 丢了铁剑后: ['铜钥匙']
2.5 看看背包有多大:len()
len()函数可以告诉你列表里有多少个元素,也就是背包里现在有多少道具。我们可以用它来判断背包是不是满了!
backpack = ["小红药水", "铁剑", "铜钥匙"]# 背包当前的道具数量count = len(backpack)print(f"背包里有 {count} 个道具") # 输出: 背包里有 3 个道具# 假设背包最大容量是5MAX_CAPACITY = 5if len(backpack) < MAX_CAPACITY: print("背包还有空间,可以捡新道具!")else: print("背包满了,捡不了新东西了!")
2.6 遍历背包:把所有道具都列出来
当你要查看背包里的所有东西的时候,就需要遍历列表,也就是把每个元素都拿出来看一遍。用我们上节课学的for循环就可以轻松做到!
backpack = ["小红药水", "铁剑", "铜钥匙", "金币"]print("你的背包里有:")# 遍历列表,每个item就是列表里的元素for item in backpack: print(f"- {item}")
运行结果:
你的背包里有: - 小红药水 - 铁剑 - 铜钥匙 - 金币
如果你想要给每个道具加个编号,比如1. 小红药水,2. 铁剑,就可以用enumerate()函数,它可以同时拿到索引和元素:
backpack = ["小红药水", "铁剑", "铜钥匙", "金币"]print("你的背包:")# enumerate会返回 (索引, 元素),注意索引从0开始,所以我们加1变成从1开始for index, item in enumerate(backpack): print(f"{index+1}. {item}")
运行结果:
你的背包: 1. 小红药水 2. 铁剑 3. 铜钥匙 4. 金币
2.7 快速判断:道具在不在背包里?
用in关键字,可以快速判断某个元素是不是在列表里,比如判断你有没有小红药水:
backpack = ["小红药水", "铁剑"]if "小红药水" in backpack: print("你有小红药水,可以使用!")else: print("你没有小红药水!")if "大蓝药水" in backpack: print("你有大蓝药水!")else: print("你没有大蓝药水!")
这个方法非常方便,我们后面会经常用到它!
三、实战:给上节课的菜单加背包系统!
好了,知识点都学完了!现在我们回到上节课的菜单代码,一步步给它加上背包功能,让它变成一个完整的冒险游戏!
我们要做的修改很简单:
- 把原来的"开始游戏"改成"外出打怪",打怪可以捡道具
下面是修改后的完整代码,你可以对比一下上节课的代码,看看我们加了哪些东西:
# 导入随机数工具,用来随机掉落道具import random# ========== 我们新增的部分:初始化背包 ==========player_hp = 100backpack = ["小红药水", "铁剑"]MAX_BACKPACK_CAPACITY = 5# ==============================================# 上节课的主循环,我们修改了里面的菜单和功能while True: # ========== 我们修改了菜单,加了新选项 ========== print("====== 游戏菜单 ======") print("1. 外出打怪") print("2. 查看背包") print("3. 使用小红药水") print("4. 查看帮助") print("5. 退出游戏") print("======================") # ============================================== choice = input("请输入你的选择:") if choice == "1": # ========== 新增:外出打怪捡道具 ========== print("你进入了森林,遇到了一只史莱姆!") print("你挥起铁剑,轻松击败了它!") # 随机掉落道具 drops = ["小红药水", "金币", "皮革"] got_item = random.choice(drops) print(f"史莱姆掉落了:{got_item}!") # 检查背包容量,把捡到的道具加进去 if len(backpack) < MAX_BACKPACK_CAPACITY: backpack.append(got_item) print(f"你把{got_item}放进了背包!") else: print("背包满了,捡不了了!") # ========================================= elif choice == "2": # ========== 新增:查看背包功能 ========== print(f"\n【你的背包】") print(f"容量:{len(backpack)} / {MAX_BACKPACK_CAPACITY}") for index, item in enumerate(backpack): print(f"{index+1}. {item}") # ======================================= elif choice == "3": # ========== 新增:使用药水功能 ========== if "小红药水" in backpack: backpack.remove("小红药水") player_hp += 30 print(f"你喝下了小红药水,恢复了30点生命!当前生命:{player_hp}") else: print("你没有小红药水了!") # ======================================= elif choice == "4": # 上节课的帮助,我们更新了一下 print("帮助:1打怪 2看背包 3用药水 5退出") elif choice == "5": # 上节课的退出,没变 print("退出成功,欢迎下次再来!") break else: print("输入错误,请重新输入!") print()
你看!我们只在上节课的代码基础上,加了一点点内容,就把一个简单的菜单,变成了一个可以捡道具、存道具、用道具的冒险游戏!这就是列表的威力!
你可以把这段代码复制到Python里运行一下,体验一下我们做的背包系统,看看捡道具、用道具的效果!
四、课后小练习
来试试自己动手,给我们的背包系统加新功能吧!
- 添加丢弃道具功能:在菜单里加一个"丢弃道具"的选项,让用户可以选择要丢掉背包里的哪个道具。
- 背包扩容:做一个"扩容卷轴"道具,使用后可以把背包的最大容量从5增加到8!
五、本节课总结
今天我们学到了什么?
- ✅ 列表:可以存储多个元素的有序集合,完美用来做我们的背包
- 访问元素:用索引,
backpack[0],注意索引从0开始 - 删除元素:
remove()按内容删,pop()按索引删
- ✅ 实战:在上节课的菜单代码基础上,我们实现了完整的背包系统,把课程内容紧密衔接了起来!
下节课我们会学习字典,用它来实现更强大的道具堆叠和属性系统,让我们的背包系统更完善!