Pyramid of asterisks program in Python

53.2k Views Asked by At

I've written a program in C++ that displays a pyramid of asterisk (see below) and now I'd like to see how it's done in Python but it's not as easy as I'd thought it would be.

Has anyone tried this and if so could you show me code that would help out?

Thanks in advance.

       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
14

There are 14 best solutions below

1
Hugh Bothwell On BEST ANSWER
def pyramid(rows=8):
    for i in range(rows):
        print ' '*(rows-i-1) + '*'*(2*i+1)

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

pyramid(12)
           *
          ***
         *****
        *******
       *********
      ***********
     *************
    ***************
   *****************
  *******************
 *********************
***********************
0
kelloti On

You can use string multiplication like so:

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

This code isn't very pythonic, but it's readable. Look at Hugh Bothewell's answer for a compact pyramid drawing function:

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
Chaos Manor On

I would suggest the following function:

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

Then try with:

pyramid()

or with:

pyramid(4)
0
kleytont On

Or you could try:

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

You can also draw a 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)

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

pyramid(row=8)
0
Rohit On

Though I am very much new to python, so here is how I solved it:

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

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


0
Ramesh On
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



     * 
    * * 
   * * * 
  * * * * 
 * * * * * 
  * * * * 
   * * * 
    * * 
     * 
0
sivaprasad On
#!/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
1737973 On
$ 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
hansaplast On

If you like list comprehensions:

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

    *
   ***
  *****
 *******
*********
0
Vgowda On
n=4
m = (2*n)-2
for i in range(0, m):
    for j in range(0, m):
       print(end=" ")
    m = m - 1 # decrementing m after each loop
    for j in range(0, i + 1):
    # printing full Triangle pyramid using stars
       print("* ", end=' ')
print(" ")  


  *   
 *  *   
*  *  *   



0
greyk0 On
user_input = input("How many rows do you want to print? \n")
def stars(a):
    size = int(a)
    for i in range(1, size+1):
        print(" "*(size-i),"*"*(i*2-1))
    

stars(user_input)

How many rows do you want to print?
20
                    *
                   ***
                  *****
                 *******
                *********
               ***********
              *************
             ***************
            *****************
           *******************
          *********************
         ***********************
        *************************
       ***************************
      *****************************
     *******************************
    *********************************
   ***********************************
  *************************************
 ***************************************