2017-05-18 22 views
-2

私のコードは通常スドクを解決するはずです、私のテキストファイルは間違っていますか?IndexError:リストのインデックスが範囲外です。

私はこのエラーを取得しています:

D:\Oneg\Python\sudoku2.py", line 85, in estDansSousMatrice
if grille[i][j]==v: IndexError: list index out of range

309000400 
200709000 
087000000 
750060230 
600904008 
028050041 
000000590 
000106007 
006000104 

これは私のコードです:

def estDansSousMatrice(grille, l, c, v): 
    bc = (c/3) * 3 
    bl = (l/3) * 3 

    for i in range(int(bl), int(bl) + 3): 
     for j in range(int(bc), int(bc) + 3): 
      if grille[i][j] == v: 
       return True 
    return False 

私のテキストは、そのように開く:Pythonの3では

def charge(nom_du_fichier): 
    mon_fichier = open(nom_du_fichier, "r") 
    x = [[0] * 9 for i in range(9)] 
    for j in range(9): 
     line = mon_fichier.readline().split(" ") 
    for i in range(len(line)): 
     if line[i].isdigit(): 
      x[j][i] = int(line[i]) 
     else:  
      return(x) 
+0

とするとき、その後、彼らはrange_の_OUTている理由を見つける:

は、使用してみてください? – Picard

答えて

0

を、式(c/3) * 3は常に表示されますcと同じ値の浮動小数点数にする必要があります。最も近い3の倍数に切り捨てたい場合は、かっこ内の部分にintを明示的に呼び出すか、//演算子を使用して、「真」の除算ではなく「床」除算を要求する必要があります。 /オペレータ)。

これはインデックス問題の原因と思われます。関数と呼ばれる座標が最後の3行または列にある場合、最終的に範囲外のインデックスが取得されます。たぶんそのループ内のインデックスをデバッグ

bc = c // 3 * 3 # the parentheses were not necessary 
bl = l // 3 * 3 
関連する問題