2011-09-05 68 views
5

我想用python製作這張圖片!python中的星號藝術

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

我進入這樣的:

x=1 
while x<10: 
print '%10s' %'*'*x 
x=x+1 

哪個可悲似乎產生點與上述圖象的權數構成的東西,但是每個那些點的星號是由彼此間隔開的分離的而不是作爲一個整體的合理權利。

任何人都有一個聰明的想法,我可以如何實現我想要的?

+8

Obelix呢? – Tsar

+3

3編輯和沒有更正Asterix-> Asterisk =) – Tsar

回答

13
'%10s' %'*'*x 

被解析爲

('%10s' % '*') * x 

因爲%*操作符具有相同的優先級和組左到右[docs]。您需要添加括號,就像這樣:

x = 1 
while x < 10: 
    print '%10s' % ('*' * x) 
    x = x + 1 

如果你想通過一系列的數字迴路,它被認爲是更地道使用比一個while循環for循環。就像這樣:

for x in range(1, 10): 
    print '%10s' % ('*' * x) 

for x in range(0, 10)等同於Java或C

+0

棒極了!瓦拉!多好的回答!非常感謝你 - 完美的作品! - 這是我看到的第一個答案,所以我要評論感謝你,但當然還有很多人要感謝其他人!當然我最深切的讚賞! – Azz

+0

我認爲你的意思是「Voila!」,法語是「There is it!」,「Presto!」或者「Woot,doggie!」 – PaulMcG

+0

http://en.wikipedia.org/wiki/Wallah_(Arabic) –

8

字符串對象有rjustljust方法正是這個東西for(int x = 0; x < 10; x++)

>>> n = 10 
>>> for i in xrange(1,n+1): 
... print (i*'*').rjust(n) 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

,或者可選地:

>>> for i in reversed(xrange(n)): 
... print (i*' ').ljust(n, '*') 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

我的第二個例子使用空格字符作爲可打印的字符,和*作爲填充字符。

ljustrjust的參數是終端寬度。我經常使用這些功能來分隔帶有標題的部分,例如,當您進行健談調試打印輸出時print '--Spam!'.ljust(80, '-')

1
print '\n'.join(' ' * (10 - i) + '*' * i for i in range(10)) 
2

這是因爲運算符優先級的,用這一個:

x=1 
while x<10: 
print '%10s' % ('*'*x) 
x=x+1 
1

確切地說,作爲您的圖片與10個星號結束,你需要的。

for i in range(1, 11): 
    print "%10s"%('*' *i)