2011-09-05 109 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*"*")