数独是一个很好玩的游戏,可以锻炼推理能力。下面的代码可以自动生成数独游戏题目。
from random import shuffle, randrange
def generate():
# 初始网格
result = []
line = list(range(1,10))
for i in range(9):
result.append(line)
line.append(line.pop(0))
# 注意,这里的切片很重要
line = line[:]
# Python允许函数的嵌套定义
def switchRows(first, second):
# 这里的括号和换行不是必须的
# 只是为了方便手机阅读
(result[first],
result[second]) =\
(result[second],
result[first])
def switchColumns(first, second):
for index in range(9):
(result[index][first],
result[index][second]) =\
(result[index][second],
result[index][first])
# 随机交换行
randomRows = list(range(9))
shuffle(randomRows)
for i in range(0,7,2):
switchRows(randomRows[i],\
randomRows[i+1])
# 随机交换列
randomColumns = list(range(9))
shuffle(randomColumns)
for i in range(0,7,2):
switchColumns(randomColumns[i],\
randomColumns[i+1])
# 随机清空一些格子
num = randrange(25, 50)
positions = {(randrange(9),randrange(9))\
for i in range(num)}
for row, col in positions:
result[row][col] = ' '
return result
def output(grids):
print('+'+'-+'*9)
for row in range(9):
line = '|'.join(map(str,grids[row]))
line = line.join(['|']*2)
print(line)
print('+'+'-+'*9)
grids = generate()
output(grids)
运行结果一:
运行结果二:
运行结果三: