生成NXN螺旋

Nic*_*ams 9 python

我已经被赋予了在python中创建螺旋的任务,其中用户输入一个数字,例如3,它将输出一个3x3螺旋,如下所示:

- - \
/ \ |
\ - /
Run Code Online (Sandbox Code Playgroud)

我不是在寻找完整的代码我只是不知道如何去做,显然使用if语句打印出所有可能的解决方案是不可能的或合乎逻辑的.这里真正的问题是我应该做什么,for循环,定义我自己的功能?有没有人可以链接我的文件,这将有所帮助.完整的任务大纲如下:

你的任务是编写一个程序,在一个盒子里面绘制一个给定大小的螺旋.

您的程序应该询问用户一个表示盒子大小的正整数.然后你的程序应该在那个大小的盒子里打印出一个螺旋形.

例如:

Enter size: 3
- - \
/ \ |
\ - /
Run Code Online (Sandbox Code Playgroud)

和:

Enter size: 4
- - - \
/ - \ |
| \ / |
\ - - /
Run Code Online (Sandbox Code Playgroud)

和:

Enter size: 5     
- - - - \
/ - - \ |
| / \ | |
| \ - / |
\ - - - /
Run Code Online (Sandbox Code Playgroud)

输入大小始终大于1.

Joh*_*man 15

我尊重你不想要完整的代码.这故意只是部分答案.

首先制作一个二维数组.就像是:

grid = [[None]*n for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

这允许你编写像这样的代码grid[i][j] = '\'.

从开始i,j = 0,0.在围绕网格的循环螺旋中.它可能有助于获得一个变量direction,该变量将值'right', 'left', 'up', 'down'与相应的取值相加(delta例如(0,1)向右移动)(i,j)以实现移动.

沿着某个方向沿着一条线放置' - '或'|' 直到你到达角落(检查None整个网格的限制).当你到达一个角落时,放置适当的角标记并改变方向.

填充网格后,使用空字符串分隔符连接每一行,并将结果'\n'作为分隔符连接.


Mar*_*oun 14

注意事项:

  • 行/列中的字符数是n
  • 第一行总是有n - 1 -秒和1\
  • 最后一行总是有n - 2 - s,从开头到\结尾/

例如,当时n为4:

第一行:- - - \
最后一行:\ - - /

使用可以轻松实现:

def get_first_raw(n):
    return '- ' * (n - 1) + '\\'

def get_last_raw(n):
    return '\\ ' + '- ' * (n - 2) + '/'
Run Code Online (Sandbox Code Playgroud)

现在关于螺旋体,请注意以下几点:

对于n = 3:

- - \
/ \ |
\ - /
Run Code Online (Sandbox Code Playgroud)

对于n = 5:

在此输入图像描述

对于n = 6:

在此输入图像描述

请注意,其中包含 4螺旋,红色框是固定的.只有它们的长度根据n而变化.

它包含在里面.并且在n = 7之前,n = 5包含在其中.对于n = 2k也是如此,每个n将包含n/2个螺旋.

我在这里试图说你手动绘制n = 3n = 2.如果螺旋应该是偶数,你使用n = 2模式,构造第一行和最后一行,并使用循环,你可以附加螺旋体.

n = 5的示例:

def get_spiral(n):
    res = []
    res.append(get_first_raw(n))
    res.append('/ ' + spiral[0] + ' |')
    for line in spiral[1:]:
        res.append('| ' + line + ' |')

    res.append(get_last_raw(n))
    return res

print '\n'.join(get_spiral(5))
Run Code Online (Sandbox Code Playgroud)

spiral大小为3的初始螺旋在哪里:

spiral = ['- - \\', '/ \ |', '\ - /']
Run Code Online (Sandbox Code Playgroud)

为了生成7螺旋,你可以:

spiral = build_spiral(5)
print '\n'.join(build_spiral(7))
Run Code Online (Sandbox Code Playgroud)

你会得到:

- - - - - - \
/ - - - - \ |
| / - - \ | |
| | / \ | | |
| | \ - / | |
| \ - - - / |
\ - - - - - /
Run Code Online (Sandbox Code Playgroud)

当然这可以改进,你可以使程序更有效率,我只是想给你一个指导,并分享我的想法..

这里有更多有趣的螺旋:

- - - - - - - - - - \
/ - - - - - - - - \ |
| / - - - - - - \ | |
| | / - - - - \ | | |
| | | / - - \ | | | |
| | | | / \ | | | | |
| | | | \ - / | | | |
| | | \ - - - / | | |
| | \ - - - - - / | |
| \ - - - - - - - / |
\ - - - - - - - - - /
Run Code Online (Sandbox Code Playgroud)
- - - - - - - - - - - - - - - - - - - - - - - - \
/ - - - - - - - - - - - - - - - - - - - - - - \ |
| / - - - - - - - - - - - - - - - - - - - - \ | |
| | / - - - - - - - - - - - - - - - - - - \ | | |
| | | / - - - - - - - - - - - - - - - - \ | | | |
| | | | / - - - - - - - - - - - - - - \ | | | | |
| | | | | / - - - - - - - - - - - - \ | | | | | |
| | | | | | / - - - - - - - - - - \ | | | | | | |
| | | | | | | / - - - - - - - - \ | | | | | | | |
| | | | | | | | / - - - - - - \ | | | | | | | | |
| | | | | | | | | / - - - - \ | | | | | | | | | |
| | | | | | | | | | / - - \ | | | | | | | | | | |
| | | | | | | | | | | / \ | | | | | | | | | | | |
| | | | | | | | | | | \ - / | | | | | | | | | | |
| | | | | | | | | | \ - - - / | | | | | | | | | |
| | | | | | | | | \ - - - - - / | | | | | | | | |
| | | | | | | | \ - - - - - - - / | | | | | | | |
| | | | | | | \ - - - - - - - - - / | | | | | | |
| | | | | | \ - - - - - - - - - - - / | | | | | |
| | | | | \ - - - - - - - - - - - - - / | | | | |
| | | | \ - - - - - - - - - - - - - - - / | | | |
| | | \ - - - - - - - - - - - - - - - - - / | | |
| | \ - - - - - - - - - - - - - - - - - - - / | |
| \ - - - - - - - - - - - - - - - - - - - - - / |
\ - - - - - - - - - - - - - - - - - - - - - - - /
Run Code Online (Sandbox Code Playgroud)

您还可以免费获得金字塔的顶视图