2011-09-05 14 views
5

Mi piacerebbe produrre questa immagine in python!Asterisco in pitone

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

sono entrato in questa:

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

che sembra purtroppo per produrre qualcosa composto dal giusto numero di punti come l'immagine di cui sopra, ma ciascuno di questi asterischi punti sono separati da distanziate l'una dall'altra , piuttosto che giustificato nel suo complesso.

Qualcuno ha una mente intelligente su come potrei ottenere quello che voglio?

+8

Che dire di Obelix? – Tsar

+3

3 modifiche e nessuno ha corretto Asterix-> Asterisk =) – Tsar

risposta

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

sia analizzato come

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

perché gli operatori % e * hanno la stessa priorità e gruppo da sinistra a destra [docs]. È necessario aggiungere parentesi, in questo modo:

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

Se si desidera collegare attraverso una serie di numeri, è considerato più idiomatico per utilizzare un ciclo for di un ciclo while. Come questo:

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

for x in range(0, 10) è equivalente a for(int x = 0; x < 10; x++) in Java o C.

+0

Superbo! Walla! Che bella risposta! Grazie mille - funziona perfettamente! - questa è la prima risposta che vedo quindi sto commentando per ringraziarvi, ma naturalmente molte grazie a tutti gli altri! Il mio più profondo apprezzamento ovviamente! – Azz

+0

Penso che tu intenda "Voila!", Francese per "Eccolo!", "Presto!", O "Woot, cagnolino!" – PaulMcG

+0

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

8

oggetto stringa ha rjust e ljust metodi per proprio questa cosa.

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

o, in alternativa:

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

mio secondo esempio utilizza uno spazio come carattere stampabile, e * come carattere di riempimento.

L'argomento su ljust o rjust corrisponde alla larghezza del terminale. Li uso spesso per separare sezioni con intestazioni quando si ha una stampa debug per chat, ad es. print '--Spam!'.ljust(80, '-').

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

E 'a causa della precedenza degli operatori, utilizzare questo:

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

per l'esattezza, come immagine si conclude con 10 asterischi, è necessario.

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