首页 > 解决方案 > 我该如何解决这个错误,它说列表索引超出范围?

问题描述

我想知道为什么这个错误一直显示。我尽我所能。我只想用星号打印我的名字。你能帮我么?PS。我是初学者。错误是第 55 行,在:

print(print_A[i][j], end=" ")
IndexError: list index out of range

这是我的完整代码

str1 = "MARC"
print_M = [[" " for i in range(7)] for j in range(7)]
print_A = [[" " for i in range(7)] for j in range(5)]
print_R = [[" " for i in range(7)] for j in range(5)]
print_C = [[" " for i in range(7)] for j in range(5)]

# code for M
for row in range(7):
for col in range(7):
    if (col == 0 or col == 6) or (row == col and col < 4) or (row + 
col == 6 and col > 3):
        print("* ", end="")
    else:
        print("  ", end="")
print()

# for A
str1 = ""
for row in range(7):
for col in range(5):
    if ((col == 0 or col == 4) and row != 0) or ((row == 0 or row == 
3) and (col > 0 and col < 4)):
        str1 = str1 + "*"
    else:
        str1 = str1 + " "
str1 = str1 + "\n"
print(str1)

# for R
for row in range(7):
for col in range(5):
    if col == 0 or (col == 4 and (row != 0 and row != 3)) or ((row == 
0 or row == 3) and (0 < col < 4)):
        print("*", end="")
    else:
        print(end=" ")
print()
# for C
for row in range(7):
for col in range(5):
    if (col == 0) or ((row == 0 or row == 6) and (col > 0)):
        print("*", end="")
    else:
        print(end="")
print()

for i in range(7):
for j in range(7):
    print(print_M[i][j], end=" ")
print(end="  ")
for j in range(5):
    print(print_A[i][j], end=" ")
print(end="  ")
for j in range(5):
    print(print_R[i][j], end=" ")
print(end="  ")
for j in range(5):
    print(print_C[i][j], end=" ")
print()

标签: python

解决方案


这将创建一个包含 5 个元素的列表,每个元素都是一个 7 项列表(实际上每次都相同)。

print_A = [[" " for i in range(7)] for j in range(5)]

你可以做(​​最多):

print_A[4][6]

但这是错误的形状:

print_A[6][4]

这里(假设您想要的缩进,因为您发布的内容无效)是您循环它的方式:

for i in range(7):
    for j in range(5):
        print(print_A[i][j], end=" ")

因此,您正在尝试查找超出此(矩形)形状范围的索引 -当为 6print_A[i]时失败(因此未达到查找)。i[j]

你可能的意思是:

for i in range(5):
    for j in range(7):
        print(print_A[i][j], end=" ")

(或交换ij循环,取决于您打算为每个内部和外部循环使用哪个循环变量)。

同样对于print_Rprint_Cprint_M没关系,因为它是方形的。


推荐阅读