Python 制作正方形时列出索引超出范围的错误

Python 制作正方形时列出索引超出范围的错误,python,python-3.x,magic-square,Python,Python 3.x,Magic Square,所以我尝试创建一个函数,它接受一个整数'n'并返回一个列表列表,这就是创建一个“幻方”的过程(从顶部中间的1开始,然后向右一直到下一个,都有一个“环绕”效果)。无论如何,我觉得我的代码非常笨重,但我也无法测试它是否有效,因为它不。。我得到一条列表索引超出范围的消息,该消息用于行msq[row][col]=v。代码如下: def magicsquare(n): msq = [[0 for c in range(n)] for r in range(n)] row, col= n-1

所以我尝试创建一个函数,它接受一个整数'n'并返回一个列表列表,这就是创建一个“幻方”的过程(从顶部中间的1开始,然后向右一直到下一个,都有一个“环绕”效果)。无论如何,我觉得我的代码非常笨重,但我也无法测试它是否有效,因为它不。。我得到一条
列表索引超出范围的消息,该消息用于行
msq[row][col]=v
。代码如下:

def magicsquare(n):
    msq = [[0 for c in range(n)] for r in range(n)]
    row, col= n-1, (n-1)/2
    M = n*(n+1)/2
    v, r, c = 1,0,0
    msq[row][col] = v
    while v != M:
        v= v+1
        if row+1 >= n:
            r = 0
        else: r = row + 1
        if (col+1) < n:
            c = col + 1
        else: c = 0
        if msq[r][c]:
            if (row+1) < n:
                r = row+1
                c = col
            grid[r][c] = v
            row = r
            col = c
    return magicsquare(n)
def magicsquare(n):
msq=[[0表示范围(n)中的c]表示范围(n)中的r]
行,列=n-1,(n-1)/2
M=n*(n+1)/2
v、 r,c=1,0,0
msq[行][列]=v
而v!=M:
v=v+1
如果行+1>=n:
r=0
其他:r=行+1
如果(列+1)

哦,我要通过的测试是
magicsquare(3)==magicsquare([[4,3,8],[9,5,1],[2,7,6]])
。非常感谢您的帮助,谢谢

msq
有多少个元素?打印
len(msq)
,您将看到。
[[…]]
做什么?@cdarke在这种情况下,它应该在一个更大的列表中有3个列表,因为3是n。m=[[0代表范围内(n)]代表范围内(n)]应该只是创建一个2d数组,但您的代码没有这样做,您的
]
位置错误。此外,
col
必须转换为
int
…什么是
M
?当v!=M:
即使你修复了所有这些,你也会因为
recursiveError
而中断,因为函数没有返回非递归的。
msq
有多少个元素?打印
len(msq)
,您将看到。
[[…]]
做什么?@cdarke在这种情况下,它应该在一个更大的列表中有3个列表,因为3是n。m=[[0代表范围内(n)]代表范围内(n)]应该只是创建一个2d数组,但您的代码没有这样做,您的
]
位置错误。此外,
col
必须转换为
int
…什么是
M
?当v!=M:
即使修复了所有这些问题,也会因递归错误而中断,因为非递归函数没有返回。