python - Python Sudoku:如何实现 for 循环子网格?
问题描述
我正在尝试实现一个函数,该函数获取数独的嵌套列表,如果有效则返回 True,否则返回 False。我实现了行检查和列检查,但子网格检查不起作用。
GRID_SIZE = 9
SUBGRID_SIZE = 3
def check_grid_if_valid(grid):
gridlist = []
for i in range(GRID_SIZE):
# column
for j in range(GRID_SIZE):
if grid[j][i] in gridlist and grid[j][i] != None:
return False
gridlist.append(grid[j][i])
gridlist.clear()
# row
for j in range(GRID_SIZE):
if grid[i][j] in gridlist and grid[i][j] != None:
return False
gridlist.append(grid[i][j])
gridlist.clear()
# it is working now
# subgrid
for row in range(0, GRID_SIZE, SUBGRID_SIZE):
for column in range(0, GRID_SIZE, SUBGRID_SIZE):
for i in range(row, row + SUBGRID_SIZE):
for j in range(column, column + SUBGRID_SIZE):
if grid[i][j] in gridlist and grid [i][j] != None:
return False
gridlist.append(grid[i][j])
gridlist.clear()
return True
感谢@OneCricketeer 的帮助!
解决方案
尝试以下
for subgrid_col in range(GRID_SIZE, step=SUBGRID_SIZE):
for subgrid_row in range(GRID_SIZE, step=SUBGRID_SIZE):
print(f"Checking subgrid ({subgrid_col}, {subgrid_row})")
for i in range(SUBGRID_SIZE):
for j in range(SUBGRID_SIZE):
num = grid[subgrid_col+i][subgrid_row+j]
另外,我建议将数字简单地添加到集合而不是列表中,然后在添加所有数字后检查集合的长度是否为 10,而不是在添加数字时检查包含。您也不需要检查in range(1,10)
您是否在其他地方限制用户输入;仅当您从不限制输入的外部源读取网格时,才需要进行此检查
推荐阅读
- ios - Swift Dictionary 避免将空字典存储在具有高阶函数的值中
- email - Outlook 电子邮件地址格式:gmail 中是否有 + 的等价物?
- nginx - 是否可以在 gcp 中创建一个在区域范围内没有实例组的负载均衡器?
- python - 关于分类的 LSTM 结构(在这种情况下,它是情绪分析)
- r - 错误“结果 1 必须是单个双精度,而不是长度为 4 的双精度向量”是什么意思?
- android - 如何在 Jetpack compose 中将文本字段输入转换为整数?
- vba - VBA:刷新电源查询并随后更新数据透视表
- php - 如何在php中解析层次结构函数
- javascript - Uncaught (in promise) TypeError: $(...).submit(...).then is not a function when making a API call
- amazon-web-services - 如何使用 AWS CLI 获取 RDS 数据库实例的最新快照的名称?