Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
已关闭6年。
Improve this question
我想制作一个给它一个数字的函数,该函数返回从1到该数字的螺旋形(在二维数组中)。例如,如果将数字25赋予该函数,它将返回如下所示的内容:
我尝试了不同的方法,但没有解决。我只是想不通。
希望我能正确解释自己。 (方向)向右移动,然后向下,然后向左移动,然后向上,然后...(希望这很明显) (Magnitude)先移一,再移二,然后移二,然后移三...
因此,使用这些规则,编写一个生成
最明显的是,如果您首先设置一些辅助函数;我会更加冗长:
足够简单,现在生成器:
演示:
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
已关闭6年。
Improve this question
我想制作一个给它一个数字的函数,该函数返回从1到该数字的螺旋形(在二维数组中)。例如,如果将数字25赋予该函数,它将返回如下所示的内容:
我尝试了不同的方法,但没有解决。我只是想不通。
希望我能正确解释自己。
最佳答案
通常,这里的问题是枚举坐标之一-将数字与坐标匹配,然后根据需要将其打印出来。
首先注意两种基本模式:
因此,使用这些规则,编写一个生成
number, coordinates
元组的生成器。最明显的是,如果您首先设置一些辅助函数;我会更加冗长:
def move_right(x,y):
return x+1, y
def move_down(x,y):
return x,y-1
def move_left(x,y):
return x-1,y
def move_up(x,y):
return x,y+1
moves = [move_right, move_down, move_left, move_up]
足够简单,现在生成器:
def gen_points(end):
from itertools import cycle
_moves = cycle(moves)
n = 1
pos = 0,0
times_to_move = 1
yield n,pos
while True:
for _ in range(2):
move = next(_moves)
for _ in range(times_to_move):
if n >= end:
return
pos = move(*pos)
n+=1
yield n,pos
times_to_move+=1
演示:
list(gen_points(25))
Out[59]:
[(1, (0, 0)),
(2, (1, 0)),
(3, (1, -1)),
(4, (0, -1)),
(5, (-1, -1)),
(6, (-1, 0)),
(7, (-1, 1)),
(8, (0, 1)),
(9, (1, 1)),
(10, (2, 1)),
(11, (2, 0)),
(12, (2, -1)),
(13, (2, -2)),
(14, (1, -2)),
(15, (0, -2)),
(16, (-1, -2)),
(17, (-2, -2)),
(18, (-2, -1)),
(19, (-2, 0)),
(20, (-2, 1)),
(21, (-2, 2)),
(22, (-1, 2)),
(23, (0, 2)),
(24, (1, 2)),
(25, (2, 2))]
关于python - 如何在python中制作螺旋状螺旋形? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23706690/
10-12 14:28