Kahibaro
Discord Login Register

Formatting output

Why Formatting Output Matters

When you print things in Python, the default output is often not very pretty:

price = 4.5
print("Price:", price)

Output:

Price: 4.5

For simple scripts this is fine, but for user‑facing or slightly larger programs you usually want:

This is what formatting output is about: controlling how values appear when you show them to the user.

In this chapter, you’ll learn several easy ways to format text and values using:

You’ll mainly use these tools together with what you already know about user input and basic data types.


Basic `print()` Formatting

Using `sep` to control separators

By default, print() separates items with a space:

print("Total:", 10, "items")
# Total: 10 items

You can change that using the sep (separator) argument:

print("A", "B", "C", sep="-")
# A-B-C
print("2025", "12", "31", sep="/")
# 2025/12/31
print("apple", "banana", "cherry", sep=", ")
# apple, banana, cherry

This is useful when you want to join multiple values with a specific character or string.

Using `end` to control line endings

By default, print() ends with a newline (\n), which moves the cursor to the next line:

print("Hello")
print("World")
# Hello
# World

You can change the ending using end:

print("Loading", end="...")
print("done")
# Loading...done

Another common use: staying on the same line when printing step-by-step progress.


String Formatting with f-strings (Recommended)

The most convenient and modern way to format output in Python is using f-strings (formatted string literals).

You put an f in front of a string, and then you can insert variables inside {}.

name = "Alex"
age = 25
print(f"Hello, {name}. You are {age} years old.")
# Hello, Alex. You are 25 years old.

You can combine text and any kind of value:

price = 4.5
quantity = 3
total = price * quantity
print(f"Price: {price}, Quantity: {quantity}, Total: {total}")
# Price: 4.5, Quantity: 3, Total: 13.5

This is easier to read than using + or commas to build strings.


Controlling Number of Decimal Places

When working with float numbers, you often want a fixed number of decimal places (for example, for money).

With f-strings, you can specify formatting inside the {} using a colon : followed by a format specification.

Fixed decimal places with `.2f`

:.2f means: show as a floating-point number with 2 digits after the decimal point.

price = 4.5
tax_rate = 0.075
tax = price * tax_rate
total = price + tax
print(f"Price: {price:.2f}")
print(f"Tax:   {tax:.2f}")
print(f"Total: {total:.2f}")

Example output:

Price: 4.50
Tax:   0.34
Total: 4.84

Other examples:

number = 3.14159265
print(f"{number:.1f}")  # 3.1
print(f"{number:.3f}")  # 3.142

Aligning and Padding Output

If you are printing tables or columns, alignment matters.

Format specs can also control width and alignment.

General pattern inside {}:

Aligning text

item1 = "Apples"
item2 = "Bananas"
item3 = "Kiwi"
print(f"{item1:<10} - good")
print(f"{item2:<10} - good")
print(f"{item3:<10} - good")

Output:

Apples     - good
Bananas    - good
Kiwi       - good

Here, <10 means: left-align in a field of width 10 characters.

Aligning numbers in columns

a = 3.5
b = 12.0
c = 123.456
print(f"{'Value':>10}")
print(f"{a:>10.2f}")
print(f"{b:>10.2f}")
print(f"{c:>10.2f}")

Example output:

     Value
      3.50
     12.00
    123.46

Adding Units, Labels, and Newlines

Units and labels

Formatting is often about making meaning clear:

temperature = 21.678
print(f"Temperature: {temperature:.1f} °C")
# Temperature: 21.7 °C
speed = 58.3
print(f"Speed: {speed} km/h")
# Speed: 58.3 km/h

Newlines `\n`

You can use \n inside strings to start a new line:

name = "Alex"
score = 95
message = f"Student: {name}\nScore: {score}"
print(message)

Output:

Student: Alex
Score: 95

You can combine this with formatting:

price = 9.99
quantity = 3
total = price * quantity
receipt = (
    f"Receipt\n"
    f"--------\n"
    f"Price:    ${price:.2f}\n"
    f"Quantity: {quantity}\n"
    f"Total:    ${total:.2f}"
)
print(receipt)

Formatting Percentages

Sometimes you want to show a fraction as a percentage.

Basic way:

ratio = 0.237
percent = ratio * 100
print(f"Ratio: {ratio}  ->  {percent:.1f}%")
# Ratio: 0.237  ->  23.7%

More compact with % format spec: :.1% means percentage with 1 decimal place:

ratio = 0.237
print(f"Completion: {ratio:.1%}")
# Completion: 23.7%

Here Python multiplies by 100 and adds the % sign for you.


A Quick Look at `str.format()` (Alternative)

Before f-strings were added, Python used the format() method. You may still see it in older code.

Basic usage:

name = "Alex"
age = 25
print("Hello, {}. You are {} years old.".format(name, age))

With positions:

print("Name: {0}, Age: {1}".format(name, age))

With names:

print("Name: {n}, Age: {a}".format(n=name, a=age))

You can use the same format specs inside the {}:

price = 4.5
print("Price: {:.2f}".format(price))   # Price: 4.50

For new code, f-strings are usually simpler and clearer, but understanding format() helps when reading others’ programs.


Common Beginner Mistakes with Formatting

1. Mixing `+` with non-strings

This will cause an error:

age = 20
# print("You are " + age + " years old")  # TypeError

Use one of these instead:

  print("You are", age, "years old")
  print(f"You are {age} years old")

2. Forgetting `f` in f-strings

name = "Alex"
# print("Hello, {name}")    # Prints: Hello, {name}
print(f"Hello, {name}")     # Correct: Hello, Alex

3. Too many or too few format placeholders

name = "Alex"
age = 25
# print("Name: {}, Age: {}, City: {}".format(name, age))  # Error

You must have the same number of {} as values you pass to format().


Putting It All Together: Small Examples

Example 1: Simple receipt

item = "Notebook"
price = 2.5
quantity = 4
total = price * quantity
print("Receipt")
print("--------")
print(f"Item:     {item}")
print(f"Price:    ${price:.2f}")
print(f"Quantity: {quantity}")
print(f"Total:    ${total:.2f}")

Example 2: Neatly formatted table

print(f"{'Name':<10} {'Age':>3} {'Score':>6}")
print("-" * 21)
print(f"{'Alex':<10} {25:>3} {93.5:>6.1f}")
print(f"{'Sam':<10}  {8:>3} {88.0:>6.1f}")
print(f"{'Jordan':<10} {31:>3} {77.25:>6.1f}")

Possible output:

Name         Age  Score
---------------------
Alex          25   93.5
Sam            8   88.0
Jordan        31   77.3

Practice Ideas

Try writing small programs that:

  1. Ask the user for their name and age, then print a nicely formatted sentence using an f-string.
  2. Ask for three product prices and print them in a right‑aligned column with 2 decimal places.
  3. Ask the user for a total number of questions and number of correct answers, then print their score as a percentage with 1 decimal place.

In each case, focus on how the output looks, not just on getting any output.

Views: 15

Comments

Please login to add a comment.

Don't have an account? Register now!