2017-05-25 118 views
0

我的代碼粘貼在以下幾行無限循環:代碼是無限循環,我不知道爲什麼

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

我已經通過代碼加強,但仍然不知道如何解決它。我試圖解決的問題如下:

定義的過程,check_sudoku, 是作爲輸入代表n×n的 數獨題解表的方名單 並返回布爾 真,如果輸入的是一個有效的 數獨正方形,否則返回布爾錯誤 。

有效數獨正方形滿足這些 兩個屬性:

  1. 正方形的每一列包含每個從1整數的 到n正好一次。

  2. 正方形的每一行包含從1到n的整個數字的每個 恰好一次。

    您可能會認爲輸入是正方形,並且至少包含一行和一列的 。

我寫的下面的代碼應該只檢查行而不是列。任何有關如何解決這個問題以及我做錯了什麼的建議都將不勝感激,所以我會理解並不會再犯這個錯誤。

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

如果你把此行

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

剛下While循環開始的地方,你就會意識到,i和j永不遞增,它停留在第一現場。

你必須增加i和j之後,你的聲音更大

相關問題