一年的五分之四 2023-05-17 11:29 采纳率: 90%
浏览 37
已结题

python 数独游戏4x4 一共16个格子


import random
def initialize_4x4():
    row0=[1,2,3,4]
    random.shuffle(row0)
    row1=row0[2:4]+row0[0:2]
    row2=[row0[1],row0[0],row0[3],row0[2]]
    row3=row2[2:4]+row2[0:2]
    return [row0,row1,row2,row3]

def hanghuanhang(board):
    top=board[:2]
    bottom=board[2:]
    random.shuffle(top)
    random.shuffle(bottom)
    return top+bottom
def hengshuhuan(board):
    size=len(board)
    k=[]
    for i in range(size):
        k.append([])
    for row in board:
         for g in range(size):
            k[g].append(row[g])
    return k
def creation_4x4():
    board=initialize_4x4()
    board=hanghuanhang(board)
    board=hengshuhuan(board)
    board=hanghuanhang(board)
    board=hengshuhuan(board)
    return board
def copy_board(board):
    j=[]
    for row in board:
        j.append(row[:])
    return j
def get_messege(messege,a,b):
    messeges=input(messege)
    while not(messeges.isdigit() and a<=int(messeges)<=b):
        messeges=input(messege)
    return int(messeges)

def get_level():
    print("输入你的数独等级")
    level=input("一共1~3个等级 请输入你想进行的等级:")
    while level not in("1","2","3"):
        level=input("一共1~3个等级 请输入你想进行的等级")
    if level=="1":
        return 6
    elif level=="2":
        return 8
    else:
        return 10
def make_holes(copy_board,get_level):
    while get_level >0:
        i=random.randint(0,3)
        j=random.randint(0,3)
        if copy_board[i][j]!=0:
            copy_board[i][j]=0
            get_level-=1
        return copy_board
def show_board(copy_board):
    for row in copy_board:
        for entry in row:
            if entry==0:
                print(".",end=" ")
            else:
                print(entry,end=" ")
    print()
def soduk_mini():
    solution=creation_4x4()
    clone=copy_board(solution)
    data=get_level()
    data1=make_holes(clone,data)
    show_board(data1)
    while data>0:
        i = get_messege("行数#", 1, 4) - 1
        j = get_messege("列数#", 1, 4) - 1
        if data1[i][j]!=0:
            print("这里已经有数了重新输入")
            continue
        n=get_messege("数字#:",1,4)
        if n ==solution[i][j]:
            data1[i][j]=solution[i][j]
            show_board(data1)
            data-=1
        else:
            print("数字有误重新输入")
    print("做的真好,再试一次吧!")
soduk_mini()

@Dick_不周 哥 能不能帮我查一下我哪里没弄对 我检查了2~3遍头都看晕了 还是没找出来!😭

  • 写回答

5条回答 默认 最新

  • Dick_不周 2023-05-17 13:23
    关注

    OK

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 已采纳回答 5月17日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程