2017-05-25 8 views
0

私のコードは次の行に無限ループに陥っているのはなぜ私にはわからない:コードは無限ループにあり、

while i <= len(mylist): 
     if mylist[i][j] == number: 

私は、コードを強化しましたが、まだ修正する方法がわかりませんそれ。次のように私が解決しようとしている問題は、次のとおりです。

は、入力として、n×nの 数独パズルの解を表すリストの広場一覧 を取り、入力された場合はTrueブール を返す手順、check_sudoku、 の定義します有効な sudoku squareを返し、ブール値False を返します。

有効な数独正方形満たすこれら 二つの特性:

  1. 正方形の各列は 整数のそれぞれ1からN回だけを含んでいます。

  2. 各行には、1からnの整数のそれぞれが正確に1回ずつ含まれています( )。

    入力が正方形で、少なくともの行と列が含まれていると仮定できます。

私が書いた以下のコードは、列ではなく行を確認する必要があります。それを修正する方法や私が間違っていたことについてのアドバイスは大いにありがたく思うので、私は理解して、間違いをもう一度はしません。

def check_sudoku(mylist): 
    i = 0 
    j = 0 
    number = len(mylist) 
    while i <= len(mylist): 
     if mylist[i][j] == number: 
      number = number - 1 
      j = 0 
      if number == 0: 
       i = i + 1 
       number = len(mylist) 
      else: 
       j = j + 1 
       if number not in list: 
        break 
        return False 
    return True 



check_sudoku([[1, 2, 3, 4], 
       [1, 3, 1, 4], 
       [3, 1, 2, 3], 
       [4, 4, 4, 4]]) 
+1

デバッガを試しましたか? –

+1

'number == 0'なら' i'をインクリメントしますが、そうでなければインクリメントします。あなたの問題がどこにあるのですか? – inspectorG4dget

+0

@AlessandroSuglia私はPyCharmを使用しています。 – johnnewbie25

答えて

1

ここでは、例として指定したリストの機能について説明します。何が起こっている

は次のとおりです。

number = len(mylist) 

数= 4

while 0 <= 4 
    if 1 == 4: // This condition will never be true and therefore doesn't run the code below it 

しばらくは再び実行され、同じことが起こります。

+0

ありがとうございます!私は自分のコードを変更します。 – johnnewbie25

0

あなただけのWhileループが始まるの下で、このラインに

 print("i: " + str(i) + " j: " + str(j)) 

を入れた場合は、i、jはインクリメントないことを認識し、それが最初の場所にとどまります。

大きなif文の後にiとjを増やす必要があります