2011-09-05 82 views
-2

您可能已经注意到我对最近一次类似任务的查询。 我想复制这个结构:ASCII Python艺术#2

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

如果你认为它是由4个三角形 - 我能够产生每个单独的角落,然后把它们彼此下。 我不知道我会如何将它们放在一个更大的结构中。 我会尝试这个吗?还是我会通过解决问题来解决问题,就好像是一个单独的构造,并按照与单独的三角形部分一样的方式逐行处理它?我只是假设把三角形变成更大的东西可能是一条捷径。

+0

计算顶点位置有什么问题,为每条边线对准一条线,然后测试网格中(边界框内)的每个位置是在图的内部还是外部? – Marcin

+2

这样的声音可能需要一个“家庭作业”标签。 –

+0

哦,jeez我对python很陌生。 @Marcin。你能否详细说明一下?我不知道什么: *参与的手段,以及每个边缘 - 暗示它 *测试您的网格中的每个位置 - 我不知道任何关于网格,测试或python边界,但我会爱学习 - 请给我一点提示 – Azz

回答

0

如何:在工作

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]) 
1

我会把它作为一个不同的问题。如果您想象图中的原点,那么您只需打印一个*,其中该单元的"Manhattan distance"大于边缘长度的一半。例如,你可以做到以下几点:

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 

...产生这样的:

*********** 
***** ***** 
**** **** 
***  *** 
**  ** 
*   * 
**  ** 
***  *** 
**** **** 
***** ***** 
*********** 
2

这为我工作

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:

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

http://codepad.org/Z46ldEOG

0

如果你的教练一直在寻找简单的循环,这可能会帮助(尽管它可能为时已晚,而且只有真正甚至作品“W”值的)

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

或者,如果你想拿出变量 “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*"*")