我正在尝试制作一个Sudoku网格生成器但是已经坚持了最后一段时间了。我已经成功地将每一行都设为不同的数字。但现在我需要每个列号都不同,我无法弄清楚如何做到这一点。
我已经尝试通过从列表中删除该数字来删除在顶部生成相同数字的可能性。但是对于不同的行,我再次需要这个数字。 (我试过.pop()并删除并删除)
import tkinter as tk
import random
buttonvalues = ["1","2","3","4","5","6","7","8","9"]
random.shuffle(buttonvalues)
root = tk.Tk()
root.title("Soduku")
i = 0
for x in range(9):
for y in range(9):
number = random.choice(buttonvalues)
btn = tk.Button(text=number, bg="white", activebackground="black", width=2)
btn.grid(row=y, column=x)
i += 1
print(number)
if number == "1":
buttonvalues.remove("1")
elif number == "2":
buttonvalues.remove("2")
elif number == "3":
buttonvalues.remove("3")
elif number == "4":
buttonvalues.remove("4")
elif number == "5":
buttonvalues.remove("5")
elif number == "6":
buttonvalues.remove("6")
elif number == "7":
buttonvalues.remove("7")
elif number == "8":
buttonvalues.remove("8")
elif number == "9":
buttonvalues.remove("9")
if not buttonvalues:
buttonvalues = ["1","2","3","4","5","6","7","8","9"]
root.mainloop()
我确实得到了我的预期结果(每行不同的数字)但现在我需要每个列号都不同,包括行中的那些。有人可以帮忙吗?image
我会以不同的方式处理问题。从有效的Sudoku网格开始:
1 2 3 | 4 5 6 | 7 8 9
4 5 6 | 7 8 9 | 1 2 3
7 8 9 | 1 2 3 | 4 5 6
------+-------+------
2 3 4 | 5 6 7 | 8 9 1
5 6 7 | 8 9 1 | 2 3 4
8 9 1 | 2 3 4 | 5 6 7
------+-------+------
3 4 5 | 6 7 8 | 9 1 2
6 7 8 | 9 1 2 | 3 4 5
9 1 2 | 3 4 5 | 6 7 8
然后随机播放网格,以便始终遵循规则。您可以将三个3x3块的任意行与任何其他行交换。您可以将三个3x3块的任何列与另一列交换。在每个块行或块列中,您可以交换单行和单列。最后,您可以置换数字,以便在不同的位置有不同的数字,只要整个板上的排列是一致的。