索引器:字符串索引超出范围

2024-06-14 14:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

def find_starman(board):
    row_number = 0
    column_number = 0

for star in board:
        for j in range(len(board):
           for i in range(len(board):
               if star[j][i] == '*':
                    j += 1
                    i += 1
     return [j,i]   

我不知道,每次我运行程序,它说它是超出范围? 我怎样才能解决这个问题? (还有,忘了说问题,if找到“*”时返回j+1和i+1)


Tags: in程序boardnumberforlenreturnif
2条回答

您应该从代码中删除j+=1和i+=1,并修改return,如下所示:return(j+1,i+1)。我想这就是你想做的

 if star[j][i] == '*': 
         return [j+1,i+1]  

对于for循环,您不需要在循环体中增加迭代器,因为它将在每个循环后自动更新为新值(在本例中,增量为1,因为您将它指定为在range上迭代,步骤为1)

换句话说,这些行是不必要的:

j += 1
i += 1

此外,从您编辑的问题来看,似乎您希望返回找到的*的坐标(i+1, j+1)。在这种情况下:

1)如果您只想返回可以找到的第一个*的坐标,并立即退出函数,您可以执行以下操作:

if star[j][i] == '*':
   return (j+1, i+1)

2)如果要返回数组中所有*的坐标,可以在构建循环之前创建新变量(如空列表),对于for循环的每次运行,将找到的i+1j+1存储为该变量的子元组/列表(使用append)。换言之,是这样的:

found_coordinates = []
for i in range(len(board)):
    for j in range(len(board)):
        if star[i][j] == '*':
            found_coordinates.append((j+1, i+1))

在任何情况下,迭代器(ij)要么立即返回,要么存储在另一个对象中,并且不应在for循环中修改(使用+=或其他内容)

相关问题 更多 >