Skip to content

How to Print Rectangles with Nested Loops in Python

Learn how to use Python nested loops to draw rectangles with asterisks in the console by controlling rows and columns with for loops and print().

This guide explains how to use nested loops in Python to print a rectangle of characters (like asterisks) to the console. We'll cover the basic logic and how to create a reusable function.

Basic Rectangle Printing with Nested Loops

The core concept is to use two nested for loops:

  • The outer loop controls the rows.
  • The inner loop controls the columns (characters within each row).
num_rows = 2
num_cols = 3

for _ in range(num_rows):       # Outer loop: rows
    for _ in range(num_cols):   # Inner loop: columns
        print('*', end=' ')     # Print an asterisk and a space
    print()                     # Move to the next line after each row

Output:

* * *
* * *
  • for _ in range(num_rows):: This loop iterates num_rows times. We use _ as the loop variable because we don't actually need the loop counter value itself, just the repetition.
  • for _ in range(num_cols):: This inner loop iterates num_cols times for each row. Again, we use _ because we don't need the counter.
  • print('*', end=' '): This prints an asterisk followed by a space. The end=' ' is crucial; it prevents print() from adding a newline, so the asterisks for a single row stay on the same line.
  • print(): This empty print() statement adds a newline after each row has been printed. Without this, you'd get all the asterisks on a single line.

Creating a Reusable Function

It's good practice to encapsulate this logic in a function:

def print_rectangle(num_rows, num_cols):
    for _ in range(num_rows):
        for _ in range(num_cols):
            print('*', end=' ')
        print()  # Newline after each row

print_rectangle(2, 3)
print()
print_rectangle(3, 4)
print()
print_rectangle(4, 5)

Output:

* * *
* * *

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

* * * * *
* * * * *
* * * * *
* * * * *
  • The function now takes num_rows and num_cols as arguments, making it reusable for different rectangle sizes.
  • The logic inside the function is identical to the previous example.
Navigation