Python列表操作遇IndexError: index out of range错误,求原因与解法
IndexError: index out of range 错误原因及解决方法
错误原因分析
你的代码直接触发报错的核心问题是**map变量的结构定义错误**:
- 你写了
map = [row1 + row2 + row3],这会把三个行列表拼接成一个包含9个元素的一维列表,再把这个大列表嵌套进另一个列表,最终map的结构是[[😔,😔,...(共9个元素)]]——也就是一个仅有1个元素的列表,这个元素是9元素的一维列表。 - 当你输入
23时,row-1 = 1,但map只有索引0的元素,访问map[1]自然会触发IndexError: index out of range。
另外还有潜在隐患:输入未做验证,如果用户输入非两位字符(比如单个数字、字母),会引发其他类型的错误。
解决方法
1. 修正map的定义
把map改成包含三个行列表的二维列表,这才符合你对“地图”的预期结构:
row1 = ["😔", "😔", "😔"] row2 = ["😔", "😔", "😔"] row3 = ["😔", "😔", "😔"] # 修正这里:用逗号分隔行列表,而非拼接后嵌套 map = [row1, row2, row3] print(f"{row1}\n{row2}\n{row3}\n") position = input("Where do you want to put the treasures?") row = int(position[0]) column = int(position[1]) map[row-1][column-1] = "x" print(f"{row1}\n{row2}\n{row3}\n")
修正后map的结构是[[row1元素], [row2元素], [row3元素]],访问map[row-1][column-1]就能正确定位到对应行和列的位置。
2. 增加输入验证(可选但推荐)
为了避免用户输入不符合要求的内容(比如非两位数字、行/列超出1-3范围),可以添加验证逻辑:
row1 = ["😔", "😔", "😔"] row2 = ["😔", "😔", "😔"] row3 = ["😔", "😔", "😔"] map = [row1, row2, row3] print(f"{row1}\n{row2}\n{row3}\n") while True: position = input("Where do you want to put the treasures?") # 验证输入是两位数字 if len(position) != 2 or not position.isdigit(): print("请输入两位数字(比如11、23)") continue row = int(position[0]) column = int(position[1]) # 验证行和列在1-3范围内 if 1 <= row <=3 and 1 <= column <=3: break else: print("行和列必须在1-3之间,请重新输入") map[row-1][column-1] = "x" print(f"{row1}\n{row2}\n{row3}\n")
内容的提问来源于stack exchange,提问作者Hanzla Ashraf
相关产品推荐
相关产品推荐

