2017-10-20 205 views
2
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] 

我不知道,每次运行该程序,它说它超出范围? 我该如何解决这个问题? (另外,忘了说这个问题,如果发现“*”它返回j + 1和i + 1)索引错误:字符串索引超出范围 -

+0

请确保'star'是至少5列表中的每个至少5个元素的列表。从错误来看,事实并非如此。 –

+0

另外,不要试图手动修改'i'和'j',它可能不会像您期望的那样运行。 –

+0

什么是'board'(我假设可以迭代某种)。另外,请确保您过去有效的代码。我发现在两个内部for循环中缺少关闭括号并且缩进是错误的。该代码不会运行,所以不是很有用。 – jorgeh

回答

4

对于for循环,您不需要增加循环体​​中的迭代器,因为它会在每个循环后自动更新为新值(在这种情况下,由于您将其分配到迭代range(步长为1),因此增量为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循环。

0

你应该从你的代码中移除j + = 1和i + = 1并修改你的返回值,如下所示:return(j + 1,i + 1)。我认为那就是你想要做的。

if star[j][i] == '*': 
     return [j+1,i+1] 
相关问题