2011-02-06 17 views
5

Ho scritto un programma in C++ che visualizza una piramide di asterisco (vedi sotto) e ora mi piacerebbe vedere come è fatto in Python ma non è così facile come pensavo sarebbe.Pyramid of asterisks program in Python

Qualcuno ha provato questo e in tal caso potrebbe mostrarmi il codice che potrebbe aiutare?

Grazie in anticipo.

 * 
     *** 
    ***** 
    ******* 
    ********* 
    *********** 
************* 
*************** 
+3

come hai scritto in C++? – Jordan

+2

Cosa hai fino ad ora, e come non funziona? –

+0

Dai un'occhiata a questo [albero di natale] (http://stackoverflow.com/a/34241421/389289) – zvone

risposta

22
def pyramid(rows=8): 
    for i in range(rows): 
     print ' '*(rows-i-1) + '*'*(2*i+1) 

pyramid(8) 
     * 
     *** 
    ***** 
    ******* 
    ********* 
    *********** 
************* 
*************** 

pyramid(12) 
      * 
      *** 
     ***** 
     ******* 
     ********* 
     *********** 
    ************* 
    *************** 
    ***************** 
    ******************* 
********************* 
*********************** 
+3

Wow, la riga 'print '' * (righe- i-1) + '*' * (2 * i + 1) 'sicuramente fa molto! È dannatamente figo. :) ... e la variabile che "fa" nel programma è qualcosa che ... non aveva pensato di usarla in quel modo. Grazie per la risposta, lo apprezzo! – jimmyc3po

3

È possibile utilizzare stringa di moltiplicazione in questo modo:

>>> for i in range(size): 
...  print '%s%s'%(' '*(size-(i-1)),'*'*((i*2)-1)) 
... 
2

Questo codice non è molto divinatorio, ma è leggibile. Guardate la risposta di Hugh Bothewell per una funzione di disegno piramide compatta:

def drawPyramid(rows): 
    result = '' 

    for i in xrange(rows): 
    row = '' 
    row += ' ' * (rows - i - 1) 
    row += '*' * (2 * i + 1) 

    result += row + '\n' 

    return result 

print drawPyramid(20) 
+0

Grazie! Anche se questo non è realmente legato alla mia domanda ho notato la parola "pythonic" e sono curioso. C'è un buon libro (o una guida) su come scrivere il codice che è più pitonico? Scrivi di più Python è probabilmente la risposta, ma ho pensato che avrei chiesto.:) Tutto ciò che sembra provare e scrivere in Python viene sempre fuori come se stessi cercando di codificare in un linguaggio simile a C e penso che sia parte del motivo per cui ho qualche problema, solo un'ipotesi. Grazie ancora! – jimmyc3po

2

vorrei suggerire la seguente funzione:

def pyramid(rows=8): 
    pyramid_width = rows * 2 
    for asterisks in range(1, pyramid_width, 2): 
     print("{0:^{1}}".format("*" * asterisks, pyramid_width)) 

quindi provare con:

pyramid() 

o con:

pyramid(4) 
5

Oppure si potrebbe provare:

def pyramid(size=8): 
    for i in range(size): 
     row = '*'*(2*i+1) 
     print row.center(2*size) 
-1

Si può anche disegnare un DIAMOND

def pyramid(r): 
    for i in range(r): 
     print (" "*(r-i-1) + "*"*(2*i+1)) 
    for i in range(r-1,-1,-1): 
     print (' '*(r-i-1) + "*"*(2*i+1)) 

n=int(input("Enter no of rows:")) 
pyramid(n) 

pyramid(10) 

        * 
       * * * 
       * * * * * 
      * * * * * * * 
      * * * * * * * * * 
     * * * * * * * * * * * 
     * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * 
     * * * * * * * * * * * * * 
     * * * * * * * * * * * 
      * * * * * * * * * 
      * * * * * * * 
       * * * * * 
       * * * 
        * 
>>> 
-1
def pyramid(row): 
     for n in range(row): 
       print(' '*(n+1)+' '*(2*(row-n))+'x'+'x'*(2*n+1)) 

pyramid(row=8) 
-1

Anche se sono molto nuovo a Python: ecco come ho risolto:

k=int(input("Enter the number of rows")) 
for i in range(1,k): 
    print(' '*(k-i),'* '*(i)) 

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


1
Pyramid, Inverted Pyramid and Diamond Rhombus in Python: 

Pyramid 

i=1 
j=5 
while i<=5: 
print((j*' ')+i*'* ') 
j=j-1 
i=i+1 




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


Inverted Pyramid 

i=1 
j=5 
while i<=5: 
print((i*' ')+j*'* ') 
j=j-1 
i=i+1 

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

Diamond Rhombus 

i=1 
j=5 
while i<=5: 
print((j*' ')+i*'* ') 
while j<=5 & i==5: 
    print(((j+1)*' ')+(5-j)*'* ') 
    j=j+1 
j=j-1 
i=i+1 



    * 
    * * 
    * * * 
    * * * * 
* * * * * 
    * * * * 
    * * * 
    * * 
    * 
-2
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,i+1): 
    print "*", 
print 

O/P: 
=== 
* 
* * 
* * * 
* * * * 
* * * * * 

2) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,7-i): 
    print "*", 
print 

O/P: 
* * * * * 
* * * * 
* * * 
* * 
* 

3) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,6-i): 
    print "", 
for k in range(1,i+1): 
    print "*", 
print 

O/P: 

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

4) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,1+i): 
    print "", 
for k in range(1,7-i): 
    print "*", 
print 

O/P: 
* * * * * 
    * * * * 
    * * * 
    * * 
    * 
5) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,6-i): 
    print "", 
for k in range(1,i+1): 
    print "*", 
print 
for i in range(1,5): 
for j in range(1,1+i): 
    print "", 
for k in range(1,6-i): 
    print "*", 
print 


O/P: 
    * 
    * * 
    * * * 
* * * * 
* * * * * 
* * * * 
    * * * 
    * * 
    * 
0
$ cat tree.py 
def line(n, i): 
    line = '' 
    for j in range(n - i - 1): 
     line += ' ' 
    for j in range(2 * i + 1): 
     line += '*' 
    for j in range(n - i - 1): 
     line += ' ' 
    return line 

def tree(n): 
    for i in range(n): 
     line_ = line(n, i) 
     print(line_) 

def run(): 
    tree(3) 

if __name__ == '__main__': 
    run() 
$ python3 tree.py 
    * 
*** 
***** 
$ _ 
0

Se ti piace list comprehension:

> n = 5 
> print("\n".join((i*"*").center(n*2) for i in range(1, n*2, 2))) 

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