You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:16:23