python写一个数独

可以用以下代码来生成一个数独:

import random

def generate_sudoku():
    # 创建一个9x9的空白数独
    sudoku = [[0 for _ in range(9)] for _ in range(9)]

    # 填充第一行
    for i in range(9):
        sudoku[0][i] = (i + 1) % 9 + 1

    # 使用洗牌算法生成数独
    for i in range(1, 9):
        for j in range(9):
            sudoku[i][j] = sudoku[0][(j + i * 3) % 9]

    # 随机打乱行
    random.shuffle(sudoku)

    # 随机打乱列
    for i in range(9):
        col1 = random.randint(0, 2)
        col2 = random.randint(0, 2)
        for j in range(9):
            sudoku[j][i] = sudoku[j][(i + 3 * col1) % 9]
            sudoku[j][(i + 3 * col1) % 9] = sudoku[j][(i + 3 * col2) % 9]
            sudoku[j][(i + 3 * col2) % 9] = sudoku[j][i]

    return sudoku

def print_sudoku(sudoku):
    for i in range(9):
        for j in range(9):
            print(sudoku[i][j], end=" ")
        print()

sudoku = generate_sudoku()
print_sudoku(sudoku)

运行此代码将生成并打印一个数独。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单的数独游戏实现: ```python import random # 生成一个新的数独盘面 def new_board(): # 首先生成一个空白的9x9数独盘面 board = [[0 for x in range(9)] for y in range(9)] # 然后填充每一行 for i in range(9): # 每一行从1-9中选择一个随机数填充 nums = random.sample(range(1, 10), 9) for j in range(9): board[i][j] = nums[j] # 然后挖去一些格子,留作玩家填充 squares_to_remove = random.randint(40, 50) for i in range(squares_to_remove): x = random.randint(0, 8) y = random.randint(0, 8) board[x][y] = 0 return board # 检查一个数是否可以填入数独盘面中的某个位置 def is_valid_move(board, x, y, num): # 检查行和列 for i in range(9): if board[x][i] == num: return False if board[i][y] == num: return False # 检查九宫格 square_x = (x // 3) * 3 square_y = (y // 3) * 3 for i in range(square_x, square_x + 3): for j in range(square_y, square_y + 3): if board[i][j] == num: return False # 如果通过了上述所有检查,那么这个数是合法的 return True # 用递归的方式解决数独盘面 def solve_board(board): # 首先找到下一个空白格子 for x in range(9): for y in range(9): if board[x][y] == 0: # 然后尝试对这个格子填充1-9中的每一个数 for num in range(1, 10): # 如果这个数是合法的,那么填充这个格子并递归解决剩下的盘面 if is_valid_move(board, x, y, num): board[x][y] = num if solve_board(board): return True # 如果递归解决剩下的盘面失败了,那么将这个格子还原为空白 board[x][y] = 0 # 如果1-9中的所有数都无法填入这个格子,那么返回False return False # 如果所有格子都已经填满了,那么返回True return True # 打印数独盘面 def print_board(board): for i in range(9): for j in range(9): print(board[i][j], end=" ") if j == 2 or j == 5: print("|", end=" ") print() if i == 2 or i == 5: print("------+-------+------") # 主程序 board = new_board() print("数独盘面:") print_board(board) if solve_board(board): print("解决方案:") print_board(board) else: print("无解!") ``` 这个程序会生成一个随机的数独盘面,然后挖去一些格子留作玩家填充。玩家填完之后,程序会自动解决数独盘面并输出解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷爱码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值