import numpy as np import random def generate_game(): """ 生成数独游戏 """ game = np.zeros((9, 9), dtype=int) for i in range(9): for j in range(9): if random.random() < 0.6: game[i][j] = random.randint(1, 9) return gamedef check_game(game): """ 检查数独游戏是否合法 """ for i in range(9): for j in range(9): if game[i][j] == 0: return False for k in range(9): if k != i and game[k][j] == game[i][j]: return False if k != j and game[i][k] == game[i][j]: return False if k != (i % 3 * 3 + j % 3) and game[i // 3 * 3 + k // 3][j // 3 * 3 + k % 3] == game[i][j]: return False return True def input_number(game, i, j): """ 提示用户输入数字 """ while True: number = input("请输入数字(1-9),输入0表示清空:") if number.isdigit(): number = int(number) if number >= 0 and number <= 9: break game[i][j] = number def main(): """ 主程序 """ game = generate_game() while not check_game(game): game = generate_game() print(game) while True: i = int(input("请输入行号(1-9):")) - 1 j = int(input("请输入列号(1-9):")) - 1 input_number(game, i, j) print(game) if check_game(game): print("恭喜您,游戏结束!") break if __name__ == "__main__": main()
时间: 2024-02-10 19:16:48 浏览: 128
这是一个基于 NumPy 的数独游戏生成和验证程序。程序分为三个部分:生成数独游戏、检查数独游戏是否合法、提示用户输入数字。
首先,`generate_game`函数生成一个 9x9 的数独游戏,其中随机填充60%的数字。生成的游戏通过 NumPy 数组表示,并返回。
其次,`check_game`函数检查数独游戏是否合法。对于每个空格,检查该行、该列和该宫是否有重复数字。如果有重复数字,则返回 False,否则返回 True。
最后,`input_number`函数提示用户输入数字,并将输入的数字填入相应的位置。如果输入的数字不是 1-9 的整数或者 0,则要求用户重新输入。
在主程序中,首先生成数独游戏并打印出来,然后不断循环提示用户输入数字,直到用户输入的数独游戏合法为止。如果用户输入的数独游戏合法,则打印出“恭喜您,游戏结束!”并结束程序。
注意,代码中存在缩进错误,正确的代码应该是这样的:
```
import numpy as np
import random
def generate_game():
"""
生成数独游戏
"""
game = np.zeros((9, 9), dtype=int)
for i in range(9):
for j in range(9):
if random.random() < 0.6:
game[i][j] = random.randint(1, 9)
return game
def check_game(game):
"""
检查数独游戏是否合法
"""
for i in range(9):
for j in range(9):
if game[i][j] == 0:
return False
for k in range(9):
if k != i and game[k][j] == game[i][j]:
return False
if k != j and game[i][k] == game[i][j]:
return False
if k != (i % 3 * 3 + j % 3) and game[i // 3 * 3 + k // 3][j // 3 * 3 + k % 3] == game[i][j]:
return False
return True
def input_number(game, i, j):
"""
提示用户输入数字
"""
while True:
number = input("请输入数字(1-9),输入0表示清空:")
if number.isdigit():
number = int(number)
if number >= 0 and number <= 9:
break
game[i][j] = number
def main():
"""
主程序
"""
game = generate_game()
while not check_game(game):
game = generate_game()
print(game)
while True:
i = int(input("请输入行号(1-9):")) - 1
j = int(input("请输入列号(1-9):")) - 1
input_number(game, i, j)
print(game)
if check_game(game):
print("恭喜您,游戏结束!")
break
if __name__ == "__main__":
main()
```
阅读全文