Python Alphabet Pattern (Symmetric with Star Center)
Beginner
7 min read
Updated: Sep 2026
3 programs
Live preview
Definition
What Is This Pattern?
A symmetric alphabet with star center prints left letters A..i, an even star gap, then mirrored letters i..A. Letter halves shrink while stars grow, so every row keeps the same width 2n.
Remember
Rule: left A..i + 2*(top-i) stars + right i..A
ABCDEEDCBA
ABCD**DCBA
ABC****CBA
AB******BA
A********A ← 5 rows (top = E)
On the first row the star count is 0, so the middle letter appears twice (EE in ABCDEEDCBA). That is intentional — left ends at i and right starts at i.
Approach
How to Solve It
Count down the letter-half end, then print three parts in order: left, stars, right.
Method
Idea
Best for
Three nested loops
Left letters, star loop, right letters
Learning, interviews, exams
"*" * stars
Same letters; one call for the star gap
Cleaner demos once the shape is clear
Pseudocode
Pseudocode
top = 'A' + rows - 1
for i from top down to 'A':
for j from 'A' to i:
print j (no newline)
stars = 2 * (top - i)
print stars copies of '*'
for m from i down to 'A':
print m (no newline)
print newline
Cheat sheet
Goal
Pattern
Pick the letter-half end
for i in range(top, ord('A') - 1, -1):
Left ascending
for j in range(ord('A'), i + 1): print(chr(j), end="")
Star gap
stars = 2 * (top - i)
Right descending
for m in range(i, ord('A') - 1, -1): print(chr(m), end="")
One-call stars
print("*" * stars, end="")
End the row
print()
A–Z-safe height
Clamp rows to 1–26
Printing Letters vs Starting a New Line
API
Effect
Use for
print(..., end="")
Stays on the same line
Each letter and each star
print()
Ends the current line
After left + stars + right
Print letters and stars without a newline, then end the row once.
Try it
Live Preview
Change the row count and the symmetric star-center pattern updates instantly — including top letter and width.
Whole numbers from 1 to 13. Top letter is A + rows - 1; each row is width 2 × rows.
Trace each letter-half end, the star gap, and the full fixed-width row.
i
Left
Stars
Right
Printed row
E
ABCDE
0
EDCBA
ABCDEEDCBA
D
ABCD
2
DCBA
ABCD**DCBA
C
ABC
4
CBA
ABC****CBA
B
AB
6
BA
AB******BA
A
A
8
A
A********A
Every row is width 10 = 2 × 5. Letters shrink by 1 on each side; stars grow by 2.
Code
Python Programs
Three complete programs: fixed top = 'E', input() row count, and a "*" * stars shortcut. Use View Output to reveal sample results.
Example 1 — Fixed top = 'E'
Hard-coded height — ideal for first demos and screenshots.
Python
top = ord('E')
for i in range(top, ord('A') - 1, -1):
for j in range(ord('A'), i + 1):
print(chr(j), end="")
stars = 2 * (top - i)
for s in range(stars):
print("*", end="")
for m in range(i, ord('A') - 1, -1):
print(chr(m), end="")
print()
1. Outer countdown.i walks E, D, C, B, A — the end of each letter half.
2. Left then stars then right. Print A..i, then 2*(top - i) stars, then i..A.
3. Fixed width. When i = ord('E'), stars = 0 and the doubled E appears. Later rows shrink letters and grow stars, keeping width 10.
Example 2 — User Input Version
Compute top = ord('A') + rows - 1, then reuse the same three-part row. Prefer try/except ValueError in real apps.
Python
raw = input("Enter the number of rows: ").strip()
try:
rows = int(raw)
except ValueError:
print("Please enter a whole number of rows >= 1.")
else:
if rows < 1:
print("Please enter a whole number of rows >= 1.")
else:
if rows > 26:
rows = 26
top = ord('A') + rows - 1
for i in range(top, ord('A') - 1, -1):
for j in range(ord('A'), i + 1):
print(chr(j), end="")
stars = 2 * (top - i)
for s in range(stars):
print("*", end="")
for m in range(i, ord('A') - 1, -1):
print(chr(m), end="")
print()
Output (when user enters 4)
Enter the number of rows: 4
ABCDDCBA
ABC**CBA
AB****BA
A******A
How It Works
1. Map rows → top. For rows = 4, top is ord('D') and each row has width 8.
2. Same three-part core. Only the top letter changes — left, stars, and right match Example 1.
3. Clamp for A–Z. Cap at 26 so codes stay in the alphabet for demos.
Example 3 — "*" * stars
Keep the letter loops; build the center gap in one call.
Python
top = ord('E')
for i in range(top, ord('A') - 1, -1):
for j in range(ord('A'), i + 1):
print(chr(j), end="")
stars = 2 * (top - i)
print("*" * stars, end="")
for m in range(i, ord('A') - 1, -1):
print(chr(m), end="")
print()
1. Same left and right. Letter halves are unchanged from Example 1.
2. One-call gap."*" * stars creates the whole even star gap at once.
3. When to use which. Keep the explicit star loop for exams that ask you to show all bounds; use string multiplication for cleaner demos.
Edge Cases & Pitfalls
Check these before calling the solution done.
Order
Wrong part order
Always print left, then stars, then right. Swapping sides breaks the mirror.
stars = top - i
Odd gap
Forget the 2 * and the gap is too small — width will not stay 2n.
Right from i-1
Missing middle twin
Starting the right half at i - 1 removes the doubled center letter. Only do that if the problem asks for it.
print early
Broken row
Call bare print() only after all three parts. Inside any inner loop, the row splits.
rows = 1
Single AA
Output is AA (left A + right A, zero stars) — a good sanity check.
Past Z
Clamp to 26
More than 26 rows walks past Z. Clamp or reject the input.
Analysis
Time and Space Complexity
Program
Time
Extra space
Three-loop / "*" * stars forms
O(n²)
O(1) loops; O(n) for the string gap
Each of n rows prints 2n characters (letters + stars), so total work is quadratic in the row count.
Remember
Key Takeaways
Three parts: left A..i, even star gap, right i..A.
Even stars:stars = 2 * (top - i) keeps width 2n.
Doubled center: first row has zero stars, so the middle letter appears twice.
Complexity:O(n²) time; loops use O(1) extra space.
One line: for each end letter counting down, print A..i, then 2*(top-i) stars, then i..A.
Frequently Asked Questions
The left half prints A..E, and the right half prints E..A. When there are zero stars on the first row, E appears as the last character of the left half and the first character of the right half.
Stars per row are 2*(top - end). For top=E: 0, 2, 4, 6, 8 stars as end goes E, D, C, B, A.
Because it is computed as 2*(top - i), which is always a multiple of 2.
Yes. You can start the right half from i - 1 instead of i when there are zero stars, so the first row becomes ABCDEDCBA.
print(..., end="") stays on the same line. print() ends the current line. Letters and stars use end=""; the row break uses print() after all three parts.
O(n²) for n rows. Each row prints a total of 2n characters (letters + stars), repeated across n rows.
Yes. print("*" * stars, end="") prints the whole gap in one call. Nested star loops are fine for learning; string multiplication is a handy shortcut later.
Use a try/except ValueError around int(input()), then clamp rows between 1 and 26 so bad input does not walk past Z.
🤔
Did you know?
Each row is: ascending letters from A to the row end, then 2*(top - end) stars, then descending letters back to A. The middle letter appears twice when star count is 0, producing ABCDEEDCBA on the first row. Total width stays constant at 2n characters per row.