Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

已关闭6年。



Improve this question




我想制作一个给它一个数字的函数,该函数返回从1到该数字的螺旋形(在二维数组中)。例如,如果将数字25赋予该函数,它将返回如下所示的内容:

我尝试了不同的方法,但没有解决。我只是想不通。
希望我能正确解释自己。

最佳答案

通常,这里的问题是枚举坐标之一-将数字与坐标匹配,然后根据需要将其打印出来。

首先注意两种基本模式:

  • (方向)向右移动,然后向下,然后向左移动,然后向上,然后...(希望这很明显)
  • (Magnitude)先移一,再移二,然后移二,然后移三...

  • 因此,使用这些规则,编写一个生成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