Python
Programming
Triangle Patterns
Coding
Tutorial

Repeating triangle pattern in Python

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Introduction

Printing triangle patterns in Python is a classic loop exercise, but pattern tasks are also useful for understanding iteration, indexing, and string multiplication. The key is to model rows mathematically and then render each row consistently. Once the row formula is clear, you can generate left-aligned, right-aligned, and centered triangles with minimal code.

Core Sections

1. Left-aligned repeating triangle

python
n = 5
for i in range(1, n + 1):
    print("*" * i)

Output grows one symbol per row.

2. Right-aligned triangle

python
1n = 5
2for i in range(1, n + 1):
3    spaces = " " * (n - i)
4    stars = "*" * i
5    print(spaces + stars)

Leading spaces shift pattern to the right.

3. Centered pyramid

python
1n = 5
2for i in range(1, n + 1):
3    spaces = " " * (n - i)
4    stars = "*" * (2 * i - 1)
5    print(spaces + stars)

Odd star counts create symmetric center alignment.

4. Repeating numeric triangle

python
n = 5
for i in range(1, n + 1):
    print(str(i) * i)

Useful for practicing string conversion and repetition.

5. Wrap as reusable function

python
def print_left_triangle(rows, char="*"):
    for i in range(1, rows + 1):
        print(char * i)

Parameterization improves reuse in exercises and demos.

6. Validate input boundaries

Handle zero/negative rows explicitly to avoid confusing output.

Validation and production readiness

A solution that works once in a local test is not enough for long-term reliability. Add explicit validation around inputs, outputs, and failure paths so behavior remains predictable after refactors. Start with a compact test matrix that covers expected inputs, boundary values, malformed values, and one realistic load scenario. This catches most regressions before they reach runtime environments where debugging is slower and costlier.

When external dependencies are involved, verify the unhappy path intentionally. Simulate missing files, network timeouts, permission errors, and unavailable services. The goal is to confirm the code fails in a controlled, observable way. Silent failure, broad exception swallowing, and unbounded retries are frequent causes of production incidents. Prefer explicit failure states and bounded retry policies.

text
1reliability_checklist:
2  - happy path tested with representative data
3  - boundary and malformed cases tested
4  - timeouts and retries are bounded
5  - dependency failures produce clear errors
6  - logs and metrics expose outcome and latency

Observability should be designed into the implementation, not added later. Emit structured logs for key branch decisions and final outcomes. Include identifiers and context needed for triage, but avoid sensitive payloads. For asynchronous or multi-step flows, add correlation IDs so related events can be traced end-to-end. If the workflow is performance sensitive, record duration metrics and establish rough service-level thresholds.

Configuration discipline is equally important. Keep environment-specific values (paths, credentials, endpoints, feature flags) outside code and validate them at startup. Fail fast on invalid configuration rather than partially starting with broken defaults. In team settings, document required runtime versions and compatibility constraints near the code so local, CI, and production environments behave consistently.

Before shipping, run a lightweight rollout checklist that includes backward compatibility, rollback strategy, and smoke verification steps. For data or schema changes, include idempotency checks so reruns do not create duplicates or corruption. Teams that standardize these practices usually spend less time on repeated incident triage and more time delivering reliable improvements.

Common Pitfalls

  • Off-by-one errors in loop bounds.
  • Forgetting string conversion in numeric repeat patterns.
  • Miscounting spaces in right/center alignment.
  • Mixing tabs/spaces and breaking visual pattern alignment.
  • Hardcoding symbols instead of parameterizing reusable functions.

Summary

Triangle pattern generation in Python is a clean way to practice loops and string operations. Define row formulas first, then render with predictable space/symbol counts. With small helper functions and input validation, pattern code stays readable and extensible.


Course illustration
Course illustration

All Rights Reserved.