我目前正在嘗試在沒有幫助的情況下創建數獨,但我遇到了一個問題。
def play():
global myinput
global column_rdm
sudoku_col = [[] for _ in range(9)]
for i in range(9):
sudoku_col[i].append(0)
h = 1
try:
while h < 10:
rdm_list = random.sample(range(1, 10), 9)
test_var = 0
for j in range(9):
if rdm_list[j] not in sudoku_col[j]:
test_var = 1
if test_var == 9:
for rdm_number, g in rdm_list, range(9):
sudoku_col[g].append(rdm_number)
# Input the values found in the sudoku
column_rdm = f"{rdm_number}"
myinput = Input(h, g 1)
myinput.value_def(column_rdm) # end
h = 1
update()
# except Exception as e:
# print("Erreur dans la création du Sudoku")
finally:
print(h)
這里是應該創建我的數獨的函式。我創建了 9 個數字的隨機串列,這些數字將作為我的數獨原始資料,并且我檢查這些串列中的每一項是否已經存在于我的“sudoku_col”列中。如果測驗正常(即 test_var == 9),那么我將這個 raw 添加到我的模板中。如果沒有,我創建一個新的隨機串列并讓它再次完成測驗。我這樣做直到我有 9 個原始資料(h < 10)。
但是,由于 ValueError,代碼在“for rdm_number, g in rdm_list, range(9):”行停止。這不應該發生,因為 rdm_list 和 range(9) 具有相同的長度,并且兩個串列中的每個專案都應該正確迭代。我在這里錯過了什么?
感謝您的時間
uj5u.com熱心網友回復:
它應該是
for rdm_number, g in zip(rdm_list, range(9)):
你在做什么是一樣的
for rdm_number, g in (rdm_list, range(9)):
它創建了一個包含兩個專案的元組,你可以遍歷它,如果你這樣做,你可以看到這種情況發生(它會列印出rdm_listand是什么range(0, 9)):
for sth in rdm_list, range(9):
print(sth)
也while h < 10可以只替換為for h in range(9):并且您不需要增加任何變數并且for回圈更快。
另一個改進是這樣做(而不是使用range和 通過索引訪問值):
for rdm, s_col in zip(rdm_list, sudoku_col):
if rdm not in s_col:
test_var = 1
還有這個:
sudoku_col = [[] for _ in range(9)]
for i in range(9):
sudoku_col[i].append(0)
可以很容易地減少到
sudoku_col = [[0] for _ in range(9)]
同樣,您不應該range使用索引來訪問值,您應該像這樣迭代值:for value in iterable:,而不是for index in range(len(iterable)),如果您還需要索引,請使用以下命令:for index, value in enumerate(iterable):
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335951.html
