ASCII Python艺术#2

ASCII Python艺术#2,python,Python,您可能已经注意到我上次询问的类似任务。 我试图复制这种结构: ******************** ********* ********* ******** ******** ******* ******* ****** ****** ***** ***** **** **** *** *** ** ** * * **

您可能已经注意到我上次询问的类似任务。 我试图复制这种结构:

********************
*********  *********
********    ********
*******      *******
******        ******
*****          *****
****            ****
***              ***
**                **
*                  *
**                **
***              ***
****            ****
*****          *****
******        ****** 
*******      *******
********    ********
*********  *********
********************
如果你认为它是由4个三角形组成的-我可以单独生成每个角,然后把它们放在另一个下面。 不过,我不知道如何将它们组合成一个更大的结构。 我会尝试这样做,还是像处理单个三角形部件一样,通过处理单个构造并逐行处理来解决问题?我只是假设三角形变成一个更大的东西可能是一条捷径。

怎么样:

W = 10

for i in range(10):
    this_str = "*"*(W-i)+" "*i
    print this_str+this_str[::-1]

for i in range(9,-1,-1):
    this_str = "*"*(W-i)+" "*i
    print this_str+this_str[::-1]
工作中的同龄人压力。下面是一个简短的版本,以跟上我所有同胞的步伐:

W=10
lines = ["*"*(W-i)+" "*2*i+"*"*(W-i) for i in range(W)]
print "\n".join(lines + lines[-2::-1])

我会把它当作一个不同的问题。如果您设想一个原点位于图形的中心,那么您只想打印一个
*
,其中该单元格的长度大于边长度的一半。例如,您可以执行以下操作:

import sys

r = 5

for y in range(-r,r+1):
    for x in range(-r,r+1):
        c = ' ' if (abs(x) + abs(y)) < r else '*'
        sys.stdout.write(c)
    print
这对我有用

w = 20
lines = []
for y in xrange(w / 2, 0, -1):
    lines.append("".join(("*" * y, " " * (w - (y * 2)), "*" * y))
lines += reversed(lines[:-1])
for l in lines:
    print l
如果您愿意,还可以进一步缩小:

lines = ["".join(("*" * y, " " * (w - (y * 2)), "*" * y)) for y in xrange(w / 2, 0, -1)]
print "\n".join(lines + lines[-2::-1])
输出w=20:

********************
*********  *********
********    ********
*******      *******
******        ******
*****          *****
****            ****
***              ***
**                **
*                  *
**                **
***              ***
****            ****
*****          *****
******        ******
*******      *******
********    ********
*********  *********
********************

如果您的讲师正在寻找简单的循环,这可能会有所帮助(尽管可能太晚了,而且它只适用于“w”值)

或者,如果您想同时取出变量“w”:

for a in range (0,10):
    print((10-a)*"*"+2*a*" "+(10-a)*"*")
for a in range (2,11):
    print(a*"*"+(20-2*a)*" "+a*"*")

计算顶点的位置,在每个边上画一条线,然后测试网格中的每个位置(在边界框内)是在图形内部还是外部,这有什么不对?听起来可能需要一个“家庭作业”标记。哦,天哪,我对python很陌生@马辛。你能详细说明一下吗?我不知道:*子结尾意味着什么,每个边意味着什么*测试网格中的每个位置-我不知道python中的网格、测试或边界,但是我很想学习-你能给我一点提示吗*什么是边界框*这就像@CARL F建议的家庭作业一样。但是我不知道以后如何添加标签,这是一个非常基本的级别,所以我认为解决方案比Marcin建议的要简单得多。这仅仅是一个书本练习,因为我是出于兴趣而学习python的,但我不知道这里有什么约定,所以我应该给它加上标签吗?到目前为止,我只使用“python”。谢谢。@Rooney:我的建议不是针对Python的,甚至不是针对计算机的。我建议你读一些基本的计算机图形学或几何课本。
print '\n'.join('*' * (20 - i) + ' ' * (i * 2) + '*' * (20 - i) for i in range(0, 20))
print '\n'.join('*' * i + ' ' * (40 - i * 2) + '*' * i for i in range(0, 20))
w = 20  
for a in range (0,w/2):
    print((w/2-a)*"*"+2*a*" "+(w/2-a)*"*")
for a in range (2,w/2+1):
    print(a*"*"+(w-2*a)*" "+a*"*")
for a in range (0,10):
    print((10-a)*"*"+2*a*" "+(10-a)*"*")
for a in range (2,11):
    print(a*"*"+(20-2*a)*" "+a*"*")