Python 制作正方形时列出索引超出范围的错误
所以我尝试创建一个函数,它接受一个整数'n'并返回一个列表列表,这就是创建一个“幻方”的过程(从顶部中间的1开始,然后向右一直到下一个,都有一个“环绕”效果)。无论如何,我觉得我的代码非常笨重,但我也无法测试它是否有效,因为它不。。我得到一条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
列表索引超出范围的消息,该消息用于行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:即使修复了所有这些问题,也会因递归错误而中断,因为非递归函数没有返回。