Python Reverse Alphabet Pyramid Pattern (Slice from E)
Beginner
7 min read
Updated: Sep 2026
3 programs
Live preview
Definition
What Is This Pattern?
A right-aligned reverse alphabet pyramid prints a growing reverse slice each row — from a single top letter down to a full E D C B A base — with padding so the block stays right-aligned.
Remember
Rule: for i from top down to 'A',
print pads for A..(i-1), then letters top..i (width 2)
E
E D
E D C
E D C B
E D C B A ← top = 'E' (monospace)
Companion to Program 22: same fixed-width grid (two spaces for pads + f"{chr(j):>2}" letter cells), but each row prints a reverse slice top..i instead of a running sequential counter.
Approach
How to Solve It
Two ways to emit the same shape — start with ord/chr loops, then optionally rewrite with int row indexes.
Method
Idea
Best for
Code loops
Outer i; pad A..(i-1); letters top..i
Learning, interviews, exams
Int row index
Pad n - row; print row letters from top down
When you think in row numbers
Pseudocode
Pseudocode
for i from top down to 'A':
for j from 'A' to (i - 1):
print " " (no newline)
for j from top down to i:
print j in width-2 field (no newline)
print newline
Cheat sheet
Goal
Pattern
Countdown rows
for i in range(top, ord("A") - 1, -1):
Pad cells
for j in range(ord("A"), i): print(" ", end="")
Reverse slice
for j in range(top, i - 1, -1): print(f"{chr(j):>2}", end="")
Print cells without a newline, then end the row once.
Try it
Live Preview
Change the top letter and the right-aligned reverse pyramid updates instantly.
One letter from A to F. Tap a chip or type a letter — the preview redraws as you go.
Live resultTop E · 5 rows · 15 letters
E
E D
E D C
E D C B
E D C B A
Trace
Worked Walkthrough — Top = E
Trace each row’s pads, reverse slice, and printed line (each cell is width 2).
i
Pad cells
Letters
Printed row
E
4
E
E
D
3
E D
E D
C
2
E D C
E D C
B
1
E D C B
E D C B
A
0
E D C B A
E D C B A
Row count = top - ord("A") + 1 (5 for E). Letter total: 1 + 2 + 3 + 4 + 5 = 15 = 5×6/2.
Code
Python Programs
Three complete programs: fixed top letter, input() top letter, and an int-index rewrite. Use View Output to reveal sample results.
Example 1 — Fixed A–E
Hard-coded top E — pad first, then print letters from E down to the current row letter.
Python
for i in range(ord("E"), ord("A") - 1, -1):
for j in range(ord("A"), i):
print(" ", end="")
for j in range(ord("E"), i - 1, -1):
print(f"{chr(j):>2}", end="")
print()
Output
E
E D
E D C
E D C B
E D C B A
How It Works
1. Outer loop descends.i runs from ord("E") down to ord("A") — one row per letter.
2. Pad first. Print " " for each j from A to i - 1 so the letters stay right-aligned.
3. Reverse slice. Print j from E down to i with f"{chr(j):>2}" (width-2 cells).
4. Break the line. Bare print() after both inner loops starts the next row.
When i is C, pads run for A and B, then letters print E D C.
Example 2 — Top Letter Input
Read the top letter at runtime. Prefer validating a single A–Z character in real apps.
Python
top = input("Enter the top letter (like E): ").strip().upper()
if len(top) != 1 or not ("A" <= top <= "Z"):
print("Please enter a single letter.")
raise SystemExit
top = ord(top)
for i in range(top, ord("A") - 1, -1):
for j in range(ord("A"), i):
print(" ", end="")
for j in range(top, i - 1, -1):
print(f"{chr(j):>2}", end="")
print()
Output (when user enters C)
Enter the top letter (like E): C
C
C B
C B A
How It Works
1. Prompt and read. Ask for a top letter, strip whitespace, and uppercase it.
2. Same pad/letter core. Both the outer start and the letter-loop start use top (as an ord code).
3. Safer input tip. Reject empty or multi-character input before converting:
Safer input
raw = input("Enter the top letter (like E): ").strip().upper()
if len(raw) != 1 or not ("A" <= raw <= "Z"):
print("Enter one letter from A to Z.")
raise SystemExit
top = ord(raw)
Example 3 — Int Row Index
Same shape with integer indexes: pad n - row cells, then print row letters from the top down.
Python
top = ord("E")
n = top - ord("A") + 1
for row in range(1, n + 1):
for s in range(n - row):
print(" ", end="")
for k in range(row):
print(f"{chr(top - k):>2}", end="")
print()
Output
E
E D
E D C
E D C B
E D C B A
How It Works
1. Derive height.n = top - ord("A") + 1 is 5 when top is E.
2. Pad by row number. Row 1 pads n - 1 cells; the last row pads 0.
3. Letters from the top. Letter k is chr(top - k) — row 1 prints E; row 5 prints E..A.
Edge Cases & Pitfalls
Check these before calling the solution done.
Single space
Broken alignment
Pads must be " " (two spaces) to match f"{chr(j):>2}" letter cells. One space skews the pyramid in monospace output.
print() inside
Broken outline
If bare print() (or default newline) is inside either inner loop, each cell lands on its own line. Use end="" for pads and letters; call print() only after both loops.
range to i
Extra pad cell
The pad loop must be range(ord("A"), i) (stops before i). Including i inserts one too many empty cells.
top = A
Single letter
Output is just a width-2 A cell. Pad loop never runs. A good sanity check.
top < A
Empty output
Outer loop never runs if top < ord("A"). Validate A–Z before looping.
Bad input
Validate one letter
Empty, multi-character, or non-letter input — strip, uppercase, and require length 1 in A–Z.
Analysis
Time and Space Complexity
Program
Time
Extra space
Code loops (Examples 1–2)
O(n²)
O(1)
Int row index (Example 3)
O(n²)
O(1)
For n = top - ord("A") + 1 rows, each row does up to O(n) pad + letter writes. Letter total = 1 + 2 + … + n = n(n + 1)/2.
Remember
Key Takeaways
Rule: for i from top down to A, pad A..(i-1), then print top..i.
Fixed width: use " " pads and f"{chr(j):>2}" so every cell is two columns.
Break the row: call print() only after both inner loops.
Complexity:O(n²) time; O(1) extra space.
One line: for each row letter i from top down to A, print pads for A..(i-1), then letters top..i with width 2, then print().
Frequently Asked Questions
The first prints padding so the visible letters are right-aligned. The second prints letters from E (or your top letter) down to the current row letter i.
Each letter is printed in a width-2 field, so two spaces keep empty cells the same width and the pyramid aligned in monospace output.
Program 22 uses one running counter across all rows (A..O). Program 23 prints a reverse slice each row using the loop variable j (E..i).
print(..., end="") stays on the same line for pads and letters. print() ends the row after both inner loops finish.
Yes. Change the second loop to always begin from your chosen top letter and decrement to the row letter — Example 2 does this with input().
O(n²) for n rows because each row does O(n) work across the padding + letter loops.
Read a line, strip it, call .upper(), require a single A–Z character, and reject empty or multi-character input.
For top = E, when i is E you print 4 pad cells (A..D); when i is A you print 0. Pads = (i − A).
🤔
Did you know?
Outer i runs from E down to A. The first inner loop prints one " " per j with A <= j < i (so the block shifts left each row). The second loop prints letters from E down to i using f"{chr(j):>2}" so each cell is 2 columns wide.