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*"*")