借助楼上的思路,先找到规律,发现有四种运动方向, 向右、向左下、向下、向右上, 我们可以认为只有两个主要方向, 分别是左下和右上, 当左下遇到边界时,可能向下或向右运动一格后改变方向,方向变为右上。 先默认一开始方向是右上,但是遇到边界,回退之后向右运动一格,之后改变方向,变为左下运动,以此类推。 关键是设置改变方向时的控制条件。 n = int(input()) #构建一个n*n的列表 matrix_ls = [[0 for _ in range(n)] for _ in range(n)] num = 0 x,y = 0,0 #状态控制 state = 0 direction_1 = [[-1,1],[1,-1]] #-1 1 右上 #1 -1 左下 direction_2 = [[0,1],[1,0]] #0 1 向右 #1 0 向下 for i in range(n**2): num += 1 matrix_ls[x][y] = num #将num值符给对应索引位置 x += direction_1[state%2][0] y += direction_1[state%2][1] #先向右上移动,如果到边界,就回退 if (state%2 == 0) and (x < 0 or y == n): #回退 x -= direction_1[state%2][0] y -= direction_1[state%2][1] #向右移动一格后的位置 x += direction_2[0][0] y += direction_2[0][1] state += 1 #如果向右移动超出了边界,就回退向下移动一格 if y == n: #回退 x -= direction_2[0][0] y -= direction_2[0][1] #向下移动一格 x += direction_2[1][0] y += direction_2[1][1] #改变方向后,向左下移动,如果到边界,就回退 if (state%2 == 1) and (y < 0 or x == n): #回退 x -= direction_1[state%2][0] y -= direction_1[state%2][1] #向下移动一格 x += direction_2[1][0] y += direction_2[1][1] state += 1 #如果向下移动超出了边界,就回退向右移动一格 if x == n: #回退 x -= direction_2[1][0] y -= direction_2[1][1] #向右移动一格 x += direction_2[0][0] y += direction_2[0][1] #遍历 for i in matrix_ls: for j in i: print(j,end=' ') print()