Python中如何获取列表元素及其索引?游戏场景调试求助
问题分析与修复方案
你的代码存在几个关键问题,导致测试无输出且enumerate()用法错误,下面逐个解决:
1. 修正enumerate()的核心错误
enumerate(iterable)返回的是**(索引, 元素值)**的元组,你搞反了两者的对应关系——代码里用索引a去匹配"8",但"8"是元素值,应该判断b == "8":
async def movePlayer(): move = input("What direction would you like to go? ") print(screenLine) # 修正:idx是索引,value是元素值 for idx, value in enumerate(playingArea): if value == "8": print(f"玩家索引: {idx}") print(f"玩家标识: {value}")
2. 修复游戏区域初始化问题
你要做5x5的游戏区域,但当前playingArea包含26个元素(含开头空字符串),正确的5x5应该是25个元素(索引0-24):
# 初始化5x5区域,玩家初始在索引1的位置,其余为空位0 playingArea = ["0"] * 25 playingArea[1] = "8"
3. 简化游戏区域打印逻辑
原来的打印判断条件过于冗余,用取余操作可以简洁实现每5个元素换行:
def printPlayingArea(): for i, cell in enumerate(playingArea): # 每5个元素后换行(索引0-4为第一行,5-9为第二行...) if i % 5 == 4: print(cell) else: print(cell, end=" ") print(screenLine)
4. 修正异步函数调用问题
movePlayer()是async函数,直接调用不会执行,需要用asyncio.run()启动(Python 3.7+支持):
import asyncio # ... 其他代码 ... asyncio.run(movePlayer())
完整修复后的代码
import asyncio screenLine = "----------------------------------------------------------------" # 初始化5x5游戏区域,玩家初始在索引1的位置 playingArea = ["0"] * 25 playingArea[1] = "8" def printPlayingArea(): for i, cell in enumerate(playingArea): if i % 5 == 4: print(cell) else: print(cell, end=" ") print(screenLine) async def movePlayer(): move = input("What direction would you like to go? ") print(screenLine) # 定位玩家位置 player_idx = -1 for idx, value in enumerate(playingArea): if value == "8": player_idx = idx print(f"当前玩家位置索引: {idx}") break # 示例移动逻辑:向右移动(需判断边界) if move == "right" and player_idx != -1 and player_idx % 5 != 4: playingArea[player_idx] = "0" playingArea[player_idx + 1] = "8" print("移动后游戏区域:") printPlayingArea() # 启动异步函数 asyncio.run(movePlayer())
补充提示
- 移动逻辑需添加完整边界判断:向左不能小于0,向上需满足
player_idx -5 >=0,向下需满足player_idx +5 <25 - 每次移动后调用
printPlayingArea()可刷新显示游戏状态
内容的提问来源于stack exchange,提问作者GoudyuGood
相关产品推荐
相关产品推荐

