2017-10-20 100 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]