Python 如何打印图案

Python 如何打印图案,python,python-3.x,Python,Python 3.x,我想从一组表示流动方向的数字中打印一个图案: 0 - north 1 - north east 2 - east 3 - south east 4 - south 5 - south west 6 - west 7 - north west e、 g.如果4222006是给定的数字,则根据指示,我必须按如下所示打印 0 * * 0 0 0 0 * * 0 * 0 0 0 0 您提出了一个相当基本的算法设计问题。换句话说,除了一步一步地弄清楚之外,没有真正的方法可以做到这一点。这是我对它的看法

我想从一组表示流动方向的数字中打印一个图案:

0 - north
1 - north east
2 - east
3 - south east
4 - south
5 - south west
6 - west
7 - north west
e、 g.如果4222006是给定的数字,则根据指示,我必须按如下所示打印

0 * * 0 0
0 0 * * 0
* 0 0 0 0

您提出了一个相当基本的算法设计问题。换句话说,除了一步一步地弄清楚之外,没有真正的方法可以做到这一点。这是我对它的看法,但它受到某些限制。例如,如果需要动态生成路径和扩展数据块,则至少必须修改此代码,并且更可能选择完全不同的方法。(例如,您可以预设范围并钳制用户的移动,例如,如果用户在靠东墙时向东移动组件,您可以告诉他们“撞到了什么东西”,然后将“ne”和“se”分别映射为“n”和“s”,并将“e”映射为“no-op”。)

从输入导入元组,列表
方向_dict={i:v代表i,v在枚举中(['n','ne','e','se','s','sw','w','nw'])
定义坐标(坐标:元组,方向:str):
#对于打印,我们有行主坐标
如果方向='n':
返回坐标[0]-1,坐标[1]
如果方向==“ne”:
返回坐标[0]-1,坐标[1]+1
如果方向==“e”:
返回坐标[0],坐标[1]+1
如果方向==“se”:
返回坐标[0]+1,坐标[1]+1
如果方向=='s':
返回坐标[0]+1,坐标[1]
如果方向==“sw”:
返回坐标[0]+1,坐标[1]-1
如果方向==“w”:
返回坐标[0],坐标[1]-1
如果方向==“nw”:
返回坐标[0]-1,坐标[1]-1
定义路径(原点:元组[int,int],方向:str=None):
路径列表=[原点]
如果没有说明:
返回路径列表
对于d方向:
路径列表。追加(坐标(路径列表[-1],方向目录[int(d)])
返回路径列表
定义范围(路径列表:列表[元组[int,int]]):
行索引=[c[0]用于路径列表中的c]
列索引=[c[1]表示路径列表中的c]
最小行=最小(行索引)
最大行=最大(行索引)
最小值=最小值(列索引)
max\u col=max(列索引)
ex=((最小行,最小列),(最大行,最大列))
退换货
定义可绘制路径(字段:Tuple[Tuple[int,int],Tuple[int,int]],路径列表:list[Tuple[int,int]],
字段字符:str='*',路径字符:str='0'):
图纸=[]
对于范围内的行索引(字段[0][0],字段[1][0]+1):
绘图。追加([]))
对于范围内的列索引(字段[0][1],字段[1][1]+1):
图形[-1]。追加(路径列表else字段中的路径字符if(行索引、列索引)
返回图
方向_str='424222006'
pl=路径(0,0),方向(str)
ex=扩展数据块(pl)
可绘制=可绘制路径(例如,pl)
对于可绘制的线条:
打印(''.join(行))
将其放置在名为scratch.py的文件中的正确位置,将产生:

>>> from scratch import*
0**00
00**0
*0000
这段代码相当快而且脏。例如,您可以将
'n'
's'
'e'
'w'
映射到与整数碰撞的操作,然后将组合(如
'ne'
映射到它们的组件,然后通过解析(例如,'ne'
到(ops[direction](coordination))、ops[direction]来缩短
坐标的工作(coordinate))
之类的。这绝对是读者的练习


<>作为一个提示,关于在今后的算法设计问题上开始自己的建议,把建议作为对解决问题的较少建议,而不是解决问题。如果你把问题分解成更精细或更精确的问题,你很可能会自己找到答案。“x坐标为1时,向南移动应将x坐标更改为2”,依此类推。现在有人问您的问题,实际答案可能是:“给定'424…',只需打印(“0**00\n…”这可能会有点刺耳,但这将是一个有效的答案。算法是在澄清和细化中出现的。

您可能需要编辑您的帖子以改进输出的格式,并且在描述您的输出如何依赖于输入时更清楚一些。除此之外,OP应该发布一些代码a,否则问题太宽泛了。亲爱的同事们,我添加了一张照片来定义如何实现该模式。这似乎是一个家庭作业问题。请阅读“询问家庭作业”下的内容。谢谢迈克,这是一个很好的建议,你的程序给了我很好的见解。@RohitMallampati,如果你想将其标记为答案,那么,这对我有帮助。