1 问题
有1-9个数字,将他们填入一个3*3的九宫格中,使得他们的每行,每列,以及对角线上的和相等,且要求每个格子的数字不可以重复。使用python列出所有可能的组合。示例如下:
2 方法
每行,列,对角线的和相等,那么和一定为15。
这里使用itertools模块中的product()方法避免多次调用for循环,提高代码可读性与效率
找出所有三个数和为15的组合。
再上一步的基础上,找出使每行、每列、对角线和相等的所有组合。
通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。
代码清单 1
from itertools import product lst = range(1,10) arr = [] for n1,n2,n3 in product(lst,lst,lst): if n1+n2+n3 == 15 and len({n1,n2,n3})==3: arr.append([n1,n2,,n3]) print(arr) from itertools import product for a, b, C in product(arr,arr,arr): if len(set(a+b+c))==9: sum1 = a[0]+b[0]+0q0]#第一列求和 sum2 = a[1]+b[1]+c[1]#第二列求和 sum3 = a[2]+b[2]+c[2]#第三列求和 sum4 = a[0]+b[1]+c[2]#对角线求和 sum5 = a[2]+b[1]+c[0]#对角线求和 if sum1 == sum2 == sum3== sum4 == sum5: print(a,end ='\t') print(b,end ='\t') print(c,end ='\t') |
3 结语
针对实现利用python实现九宫格数独小游戏,我们提出了使用itertools模块中的product()方法避免多次调用for循环,提高代码可读性与效率。然后找出所有三个数和为15的组合,再上一步的基础上,找出使每行、每列、对角线和相等的所有组合。再依次进行第一列求和,第二列求和、第三列求和、对角线求和、对角线求和;最后打印出九宫格。通过这次代码的学习,我们的代码还并不完善,需要继续改进。通过实验、实践等证明提出的方法是有效的。