首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Magic Square with python,使用itertools

Magic Square with python,使用itertools
EN

Stack Overflow用户
提问于 2016-12-29 02:50:26
回答 3查看 1.8K关注 0票数 -5

我有一些代码可以确定一个N*N整数列表是否构成一个幻方:

代码语言:javascript
复制
import itertools

#Function square magic
def magic_square(matrix):
    dimension = len(matrix[0])
    sum_list = []

    #Horizontal code:
    sum_list.extend([sum (lines) for lines in matrix])   

    #Vertical code:
    for col in range(dimension):
        sum_list.append(sum(row[col] for row in matrix))

    #Diagonals code
    diagonal1 = 0
    for i in range(0,dimension):
        diagonal1 +=matrix[i][i]
    sum_list.append(diagonal1)  

    diagonal2 = 0
    for i in range(dimension-1,-1,-1):
        diagonal2 +=matrix[i][i]
    sum_list.append(diagonal2)

    if len(set(sum_list))>1:
        return False
    return True

m=[[7, 12, 1, 14], [2, 13, 8, 11], [16, 3, 10, 5], [9, 6, 15, 4]] 
print(magic_square(m))

m=[[2, 7, 6], [9, 5, 1], [4, 3, 8]]
print(magic_square(m))

m=[[2, 7, 6], [9, 5, 1], [4, 3, 7]]
print(magic_square(m))

print("**************************")

#Now, i use itertools like this:
for i in itertools.combinations(range(1,10), 3):
    if sum(i) == 15:
        print (i)
# I get the combinations each of three numbers with sum 15

我的问题是最后一部分:我想生成整数1到N^2的所有排列,将每个排列分成一个正方形--一个由N行和N列组成的二维列表--并使用我的函数找到所有幻方。我写的itertools代码可以找到3个数字的组合,但我找不到组成正方形的组合。

感谢@Prune的帮助。

如果我有:

1 5 9

1 6 8

2 4 9

2 5 8

2 6 7

3 4 8

3 5 7

4 5 6

我如何一次使用三个矩阵元素,生成一个平方魔术,并知道它是否是真是假?

示例:

[1 5 9,1 6 8,2 4 9]

[1 5 9,1 6 8,2 5 8]

[1 5 9,1 6 8,2 6 9]等,等。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41368021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档