<p>由于已经有了一些很好的解决方法,我按照我喜欢的方式做了代码,它以螺旋式的顺序运行,并在一路上设置了字符。它有点长,但为了便于理解,可以缩短大约一半:</p>
<pre><code>n = 3;
grid = [[None]*n for i in range(n)]
def move(pos, d, counter): # first paint, then move
x = pos[0]
y=pos[1]
#uncomment this line to check how it moves
#print (x,y)
if d == "right":
if x == n-y-1: # if we are going right and we reach the end(n-y) -1 because of indexes, change direction to down
grid[y][x] = "\\"
y+=1
d = "down"
else:
grid[y][x] = "-"
x+=1
elif d == "down": # if we are going down and reach the end, which is the same as column number we are on, change direction to left
if y == x:
grid[y][x] = "/"
x-=1
d = "left"
else:
grid[y][x] = "|"
y+=1
elif d == "left": # if we are going left and reach the end, which is the same as in right, change directiont to up
if x == n-y-1:
grid[y][x] = "\\"
y-=1
d="up"
else:
grid[y][x] = "-"
x-=1
elif d == "up": # if we are going up and reach the end, which is x+1, change direction to right
if y ==x+1:
grid[y][x] = "/"
x+=1
d = "right"
else:
grid[y][x] = "|"
y-=1
counter+=1
if counter != n*n: # if we painted n*n times, it means we finished with the spiral
move((x,y),d,counter)
move((0,0),"right",0) # start in coords (0,0) with direction going right and counter in 0
for row in grid:
print(''.join('%s' % i for i in row))
</code></pre>