1 问题
有1-9个数字,将他们填入一个3*3的九宫格中,使得他们的每行,每列,以及对角线上的和相等,且要求每个格子的数字不可以重复。使用python列出所有可能的组合。示例如下:
2 方法
- 每行,列,对角线的和相等,那么和一定为15。
- 这里使用itertools模块中的product()方法避免多次调用for循环,提高代码可读性与效率
- 找出所有三个数和为15的组合。
- 再上一步的基础上,找出使每行、每列、对角线和相等的所有组合。
通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。
代码清单 1
from itertools import productlst = 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 productfor 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的组合,再上一步的基础上,找出使每行、每列、对角线和相等的所有组合。再依次进行第一列求和,第二列求和、第三列求和、对角线求和、对角线求和;最后打印出九宫格。通过这次代码的学习,我们的代码还并不完善,需要继续改进。通过实验、实践等证明提出的方法是有效的。