python 数独
Sudoku with python
def print_map(sudoku_map):
for line in sudoku_map:
print(line)
print("\n")
#it will determine whether there is a same a in row or not
def search_row(sudoku_map_search, a, row):
for i in range(9):
if sudoku_map_search[row][i] == a:
return 0;
else:
return 1;
#it will determine whether there is a same a in column or not
def search_column(sudoku_map_search, a, column):
for b in range(9):
if sudoku_map_search[b][column] == a:
return 0;
else:
return 1;
sudoku_map = [
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0]
];
for row in range(9):
for column in range(9):
#if block is empty loop will place a number;
if sudoku_map[row][column]==0:
#a will be a number which will try all the numbers between 0-10 for blank places
for a in range(1,10):
if search_row(sudoku_map, a ,row)==1 and search_column(sudoku_map, a, column)==1:
sudoku_map[row][column]= a
print_map(sudoku_map)
我的目标是打印一张如下所示的地图:
- 9 8 7 6 5 4 3 2 1
- 8 7 6 5 4 3 2 1 9
- 7 6 5 4 3 2 1 9 8
- 6 5 4 3 2 1 9 8 7
- 5 4 3 2 1 9 8 7 6
- 4 3 2 1 9 8 7 6 5
- 3 2 1 9 8 7 6 5 4
- 2 1 9 8 7 6 5 4 3
- 1 9 8 7 6 5 4 3 2
但我不明白为什么它只是打印:
- 9 8 8 8 8 8 8 8 8
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
你知道为什么我无法达到我的目标吗?
在搜索函数中使用带有 for 循环的 else。这样,如果没有迭代 returned 中断,则仅 returned 1。您甚至可以在 for 循环之后简单地 return 1。
#it will determine whether there is a same a in row or not
def search_row(sudoku_map_search, a, row):
for i in range(9):
if sudoku_map_search[row][i] == a:
return 0;
else:
return 1;
或者在 for 循环之后只是 return 1。 1 只有在没有迭代成功的情况下才会被 returned。
#it will determine whether there is a same a in row or not
def search_row(sudoku_map_search, a, row):
for i in range(9):
if sudoku_map_search[row][i] == a:
return 0;
return 1;
您可以使用 生成器表达式 使用 any 将 return 1 或 0,即 True 或 False。您的代码看起来像您正在尝试编写 c 而不是 python,在 python 中您可以迭代列表的元素而无需索引,并且您不需要分号。
您的函数可以简化为:
def search_row(sudoku_map_search, a, row):
return any(ele == a for ele in sudoku_map_search[row])
any
懒惰地评估任何 ele == a
为 True 的短路,如果找不到匹配项,它将简单地 return False。
要检查是否存在匹配项,您只需要:
if search_row(sudoku_map, a ,row):
sudoku_map[row][column] = a
您不需要使用 ==
显式检查 return 值。
您还可以使用 str.join
:
来简化打印功能
def print_map(sudoku_map):
print("\n".join(sudoku_map))
或者使用 print 作为函数:
# needed for python2
from __future__ import print_function
def print_map(sudoku_map):
print(*sudoku_map, sep="\n")
def print_map(sudoku_map):
for line in sudoku_map:
print(line)
print("\n")
#it will determine whether there is a same a in row or not
def search_row(sudoku_map_search, a, row):
for i in range(9):
if sudoku_map_search[row][i] == a:
return 0;
else:
return 1;
#it will determine whether there is a same a in column or not
def search_column(sudoku_map_search, a, column):
for b in range(9):
if sudoku_map_search[b][column] == a:
return 0;
else:
return 1;
sudoku_map = [
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0]
];
for row in range(9):
for column in range(9):
#if block is empty loop will place a number;
if sudoku_map[row][column]==0:
#a will be a number which will try all the numbers between 0-10 for blank places
for a in range(1,10):
if search_row(sudoku_map, a ,row)==1 and search_column(sudoku_map, a, column)==1:
sudoku_map[row][column]= a
print_map(sudoku_map)
我的目标是打印一张如下所示的地图:
- 9 8 7 6 5 4 3 2 1
- 8 7 6 5 4 3 2 1 9
- 7 6 5 4 3 2 1 9 8
- 6 5 4 3 2 1 9 8 7
- 5 4 3 2 1 9 8 7 6
- 4 3 2 1 9 8 7 6 5
- 3 2 1 9 8 7 6 5 4
- 2 1 9 8 7 6 5 4 3
- 1 9 8 7 6 5 4 3 2
但我不明白为什么它只是打印:
- 9 8 8 8 8 8 8 8 8
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
- 8 9 9 9 9 9 9 9 9
你知道为什么我无法达到我的目标吗?
在搜索函数中使用带有 for 循环的 else。这样,如果没有迭代 returned 中断,则仅 returned 1。您甚至可以在 for 循环之后简单地 return 1。
#it will determine whether there is a same a in row or not
def search_row(sudoku_map_search, a, row):
for i in range(9):
if sudoku_map_search[row][i] == a:
return 0;
else:
return 1;
或者在 for 循环之后只是 return 1。 1 只有在没有迭代成功的情况下才会被 returned。
#it will determine whether there is a same a in row or not
def search_row(sudoku_map_search, a, row):
for i in range(9):
if sudoku_map_search[row][i] == a:
return 0;
return 1;
您可以使用 生成器表达式 使用 any 将 return 1 或 0,即 True 或 False。您的代码看起来像您正在尝试编写 c 而不是 python,在 python 中您可以迭代列表的元素而无需索引,并且您不需要分号。
您的函数可以简化为:
def search_row(sudoku_map_search, a, row):
return any(ele == a for ele in sudoku_map_search[row])
any
懒惰地评估任何 ele == a
为 True 的短路,如果找不到匹配项,它将简单地 return False。
要检查是否存在匹配项,您只需要:
if search_row(sudoku_map, a ,row):
sudoku_map[row][column] = a
您不需要使用 ==
显式检查 return 值。
您还可以使用 str.join
:
def print_map(sudoku_map):
print("\n".join(sudoku_map))
或者使用 print 作为函数:
# needed for python2
from __future__ import print_function
def print_map(sudoku_map):
print(*sudoku_map, sep="\n")