2011-09-05 7 views
5

私はこの写真をパイソンで作りたいです!悲しいことに、上の写真のようにドットの右側番号から何かを生み出すように見えるアスタリスクの芸術(パイソン)

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

が、これらのドットアスタリスクのそれぞれは、互いに離間によって分離されています

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

は、私はこれを入力します、全体として正当な権利ではなく、

誰かが私が望むものを達成する方法を賢明に思いついていますか? %*演算子は同じ優先順位グループを持っているので

+8

オベリクスはどうですか? – 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や

+0

素晴らしい!ワラ!すてきな答え!本当にありがとう - 完璧に動作します! - これは私が見る最初の答えですので、私はあなたに感謝の言葉を述べていますが、もちろん他の皆に感謝します!もちろん私の深い感謝! – Azz

+0

私はあなたが "Voila!"を意味すると思う、 "There is!"、 "Presto!"、または "Woot、doggie!" – PaulMcG

+0

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

8

文字列オブジェクトはまさにこの事についてrjustljustメソッドを持っていますC.で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, '*') 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

私の第二の例は、充填文字として印刷可能な文字としてスペース文字を使用し、*。

ljustまたはrjustの引数は、端末の幅です。私はしばしば、あなたがチャットデバッグの印刷物を持っているときに見出しでセクションを区切るためにこれらを使用します。 print '--Spam!'.ljust(80, '-')。それが原因で演算子の優先順位のだ

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

は、このいずれかを使用します。あなたの写真が10個のアスタリスクで終わるよう

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

は、正確には、次のものが必要です。

for i in range(1, 11): 
    print "%10s"%('*' *i) 
関連する問題