"ValueError: too many values to unpack (expected 2)" should not happen here
"ValueError: too many values to unpack (expected 2)" should not happen here
我目前正在尝试在没有帮助的情况下创建一个数独游戏,但我遇到了一个问题。
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),那么我将这个原始文件添加到我的模板中。如果没有,我创建一个新的随机列表并让它再次完成测试。我这样做直到我有 9 个原料 (h < 10)。
但是,由于 ValueError,代码在“for rdm_number, g in rdm_list, range(9):”行停止。这不应该发生,因为 rdm_list 和 range(9) 具有相同的长度,并且两个列表中的每个项目都应该正确迭代。我在这里错过了什么?
感谢您的宝贵时间
应该是
for rdm_number, g in zip(rdm_list, range(9)):
你做的和
一样
for rdm_number, g in (rdm_list, range(9)):
它创建了一个包含两个项目的元组,你可以迭代它,你可以看到如果你这样做(它会打印出 rdm_list
和 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):
我目前正在尝试在没有帮助的情况下创建一个数独游戏,但我遇到了一个问题。
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),那么我将这个原始文件添加到我的模板中。如果没有,我创建一个新的随机列表并让它再次完成测试。我这样做直到我有 9 个原料 (h < 10)。
但是,由于 ValueError,代码在“for rdm_number, g in rdm_list, range(9):”行停止。这不应该发生,因为 rdm_list 和 range(9) 具有相同的长度,并且两个列表中的每个项目都应该正确迭代。我在这里错过了什么?
感谢您的宝贵时间
应该是
for rdm_number, g in zip(rdm_list, range(9)):
你做的和
一样for rdm_number, g in (rdm_list, range(9)):
它创建了一个包含两个项目的元组,你可以迭代它,你可以看到如果你这样做(它会打印出 rdm_list
和 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):