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遍头都看晕了 还是没找出来!😭
OK
参考ChatGPT部分内容作答:
代码中存在以下问题:
1、在 make_holes 函数中,return 语句应该放在 while 循环外面,否则只会执行一次。
2、在 soduk_mini 函数中,当用户输入的数字与正确答案不同时,应该给出更具体的提示,例如告诉用户正确答案是多少。
3、在 get_messege 函数中,应该将输入的字符串转换为整数,否则会导致后面的比较出错。
4、在 get_level 函数中,应该使用 while 循环来确保用户输入的是合法的等级,而不是使用多个 if/elif 语句。
5、在 show_board 函数中,应该使用 print 函数的 end 参数来避免每个数字后面都有一个空格。
以下是修改后的代码:
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_message(message, a, b):
while True:
try:
value = int(input(message))
if a <= value <= b:
return value
except ValueError:
pass
def get_level():
while True:
level = input("请输入数独等级(1-3):")
if level in ("1", "2", "3"):
return int(level) * 2 + 4
def make_holes(copy_board, level):
while level > 0:
i = random.randint(0, 3)
j = random.randint(0, 3)
if copy_board[i][j] != 0:
copy_board[i][j] = 0
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 sudoku_mini():
solution = creation_4x4()
clone = copy_board(solution)
level = get_level()
copy_board = make_holes(clone, level)
show_board(copy_board)
while level > 0:
i = get_message("请输入行数(1-4):", 1, 4) - 1
j = get_message("请输入列数(1-4):", 1, 4) - 1
if copy_board[i][j] != 0:
print("这里已经有数了,请重新输入")
continue
n = get_message("请输入数字(1-4):", 1, 4)
if n == solution[i][j]:
copy_board[i][j] = solution[i][j]
show_board(copy_board)
level -= 1
else:
print("数字有误,请重新输入(正确答案是{})".format(solution[i][j]))
print("恭喜你完成数独!")
sudoku_mini()
# 导入随机模块
import random
# 初始化一个4x4的数独
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
# 生成一个4x4的数独
def creation_4x4():
board=initialize_4x4() # 初始化一个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() # 生成一个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 # 如果这个位置已经有数了,重新输入
else:
data-=1 # 数独等级减1
data1[i][j]=solution[i][j] # 将用户输入的数字填入数独中
show_board(data1) # 显示数独
@Dick_不周 啊啊啊啊 哥我找到哪里错了😭 对不起 打扰了!!!!!
函数应该是某一个功能的集合体,编写程序需要该功能的时候就去调用它
并不需要每次需要该功能的时候都写一段代码,即节省时间又节省空间
def qiuhe():
num1 = 20
num2 = 30
result = num1 + num2
print('%d + %d = %d' %(num1,num2,result))
qiuhe()调用函数
注意:这个函数只能算11+12的值,并不能计算任意两个数的和,不是真正意义上的函数
函数的嵌套
def python():
print('python')
def westos():
print('westos')
python()没有调用westos函数
函数的嵌套
def python():
print('python')
def westos():
print('westos')
westos()函数只有调用才会执行
python()
def hello(a):
print('hello',a)
hello('laoli')
hello('laowu')
hello('coco')
抱歉,以上参考资料并没有直接回答数独游戏的问题。但是我可以给你一些关于Python解决数独游戏的参考资料和思路,希望可以帮到你。
数独游戏本质上是一个逻辑谜题,需要利用计算机算法来解决。数独游戏的解法可以参考以下文章:
https://www.cnblogs.com/coco7/p/9764525.html
https://zhuanlan.zhihu.com/p/21890984
可以使用Python编写一个数独游戏的解函数,来自动解决数独谜题。也可以使用Python来编写一个数独游戏的生成函数,来生成新的数独谜题。
具体的Python代码实现可以参考以下文章:
https://zhuanlan.zhihu.com/p/37418573
https://blog.csdn.net/qq_41185868/article/details/80704668
对于数独游戏的错误检查,可以编写一个函数来判断数独游戏的答案是否正确。可以通过逐行、逐列和逐九宫格来判断是否有重复数字。具体的Python代码实现可以参考以下文章:
https://www.runoob.com/python/python-exercise-example36.html
https://www.cnblogs.com/BrightSunshine/p/9038064.html
Notepad++是一个非常实用的文本编辑器,可以用来编辑各种编程语言的代码。具体的使用方法可以参考以下文章:
https://blog.csdn.net/oqdasa/article/details/80513016
https://blog.csdn.net/chuxin2010/article/details/78951890
希望以上信息可以对你有所帮助。如果还有其他的问题,可以再次向我提问。