Write a program that prompts the user to enter an integer number from 1 to 9 and displays two pyramids

Question:

This is the question.

I have the code for the 1st and the second pyramid, I just don’t know how to put it together like how the question is asking. The first code below is for pyramid 1 and second is for the 2nd pyramid.

`

rows = int(input("Enter number of rows: "))

k = 0

for i in range(1, rows+1):
    for space in range(1, (rows-i)+1):
        print(end="  ")
   
    while k!=(2*i-1):
        print("* ", end="")
        k += 1
   
    k = 0
    print()

`

`

rows = int(input("Enter number of rows: "))

k = 0
count=0
count1=0

for i in range(1, rows+1):
    for space in range(1, (rows-i)+1):
        print("  ", end="")
        count+=1
    
    while k!=((2*i)-1):
        if count<=rows-1:
            print(i+k, end=" ")
            count+=1
        else:
            count1+=1
            print(i+k-(2*count1), end=" ")
        k += 1
    
    count1 = count = k = 0
    print()

`

Asked By: Billy Know

||

Answers:

You just need to run the second loop after the first loop. Also your code for the second pyramid is incorrect so I changed that.

rows = int(input("Enter number of rows: "))

k = 0

for i in range(1, rows+1):
    for space in range(1, (rows-i)+1):
        print(end="  ")
   
    while k!=(2*i-1):
        print("* ", end="")
        k += 1

    k = 0
    print()

k = 0
count=0
count1=0

for i in range(1, rows+1):
    for space in range(1, (rows-i)+1):
        print("  ", end="")
        count+=1
    
    for k in range(i,0,-1):
        print(k, end=' ')
    for k in range(2,i+1):
        print(k, end=' ')
    count = 0
    print()
Answered By: Utkarsh

Since the algorithm for constructing both pyramids is similar, it is better to make a function

def pyramid(n_rows, s_type='*'):
    max_width = n_rows * 2 - 1
    for i in range(0, n_rows):
        stars = i * 2 + 1
        side = (max_width - stars) // 2
        if s_type == '*':
            print(f"{'  ' * side}{'* ' * stars}")
        else:
            side_nums = ' '.join(f'{x+1}' for x in range(0,i+1))
            print(f"{'  ' * side}{side_nums[1:][::-1]}{side_nums}")


rows = int(input("Enter number of rows: "))
pyramid(rows)
pyramid(rows, s_type='0')
Answered By: Алексей Р

You only need to input the row count once. You may also find using str.rjust easier for formatting.

rows = int(input('Enter a number from 1 to 9: '))
assert rows > 0 and rows < 10
output = [None] * (rows*2)
stars = '*' * (rows * 2 - 1)
for i in range(rows):
    output[i] = stars[:i*2+1].rjust(rows+i)
    s = ''.join(map(str, range(1, i+2))) + ''.join(map(str, range(i, 0, -1)))
    output[i+rows] = s.rjust(rows+i)

print(*output, sep='n')

Output:

Enter a number from 1 to 9: 6
     *
    ***
   *****
  *******
 *********
***********
     1
    121
   12321
  1234321
 123454321
12345654321
Answered By: Cobra
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.