gpt4 book ai didi

python - 拼写错误,Python 函数仍然有效。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:35 25 4
gpt4 key购买 nike

我已经使用 Udacity 学习编程和 Python 大约一个月了。对于其中一个问题,我们应该编写一个函数来检查传入的数独列表是否有效。

在下面的 for 循环中,我想使用 zip()< 同时遍历 rowcol 原始列表和转置列表 但在我的 or 语句的后半部分错误地留在了 row 中。我运行了它,令我惊讶的是,它仍然继续返回正确答案。

def check_sudoku(array):  
is_sudoku = True
reference = range(1, len(array) + 1)
transposed = zip(array)

for row, col in zip(array, transposed):
if sorted(row) != reference or sorted(row) != reference:
is_sudoku = False
break
return is_sudoku

我的猜测是因为我默认定义了 is_sudoku = True,并且我正在将 rows 与引用列表进行比较,因此它会捕获无效值,即使我的转置没有工作。但是,当我用 col 替换第二个 row 时,它坏了。

我的问题是,我的猜测是否正确?如果不是,为什么这段代码可以工作,我怎样才能更好地编写这段代码?

谢谢! (如果您想查看我传入的列表,也可以粘贴在键盘上 - http://codepad.org/IXDlZuUu)

最佳答案

如果正确的值为 False,那么您的函数会起作用,因为在某个时候 sorted(row) != reference。至于重写它,我认为这样的事情会更清楚:

def check_sudoku(array):  
reference = range(1, len(array) + 1)
transposed = zip(array)
for row, col in zip(array, transposed):
if sorted(row) != reference or sorted(row) != reference:
return False
return True

此外,我很难理解您为什么执行 transposed = zip(array) 然后执行 zip(array, transposed)。据我所知,只需将 [1, 2, 3] 这样的列表转换为 [(1, (1,)), (2, (2,) ), (3, (3,))].

如果您希望遍历行和列,这是一种可行的方法。

>>> rows = incorrect
>>> cols = [[row[i] for i in range(len(rows[0]))] for row in rows]
>>> cols = [[row[i] for row in rows] for i in range(len(row))]
>>> cols
[[4, 6, 3, 9, 7, 8, 1, 5, 2], [1, 5, 9, 6, 3, 2, 4, 8, 7], [2, 8, 7, 4, 5, 1, 9, 3, 6], [3, 9, 5, 2, 1, 7, 6, 4, 8], [6, 4, 2, 3, 8, 9, 5, 7, 1], [7, 1, 8, 5, 4, 6, 3, 2, 9], [8, 3,
1, 7, 6, 4, 2, 9, 5], [5, 2, 6, 8, 9, 3, 7, 1, 4], [1, 7, 4, 1, 2, 5, 8, 6, 3]]
>>> rows
[[4, 1, 2, 3, 6, 7, 8, 5, 1], [6, 5, 8, 9, 4, 1, 3, 2, 7], [3, 9, 7, 5, 2, 8, 1, 6, 4], [9, 6, 4, 2, 3, 5, 7, 8, 1], [7, 3, 5, 1, 8, 4, 6, 9, 2], [8, 2, 1, 7, 9, 6, 4, 3, 5], [1, 4,
9, 6, 5, 3, 2, 7, 8], [5, 8, 3, 4, 7, 2, 9, 1, 6], [2, 7, 6, 8, 1, 9, 5, 4, 3]]

关于python - 拼写错误,Python 函数仍然有效。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10145059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com