Table of Contents
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.5For simple scripts this is fine, but for user‑facing or slightly larger programs you usually want:
- Numbers aligned in columns
- A fixed number of decimal places
- Clear labels and units
- Nicely structured sentences
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:
print()options- f‑strings (formatted string literals)
- The
format()method (briefly)
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, cherryThis 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...doneAnother 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.84Other examples:
:.1f→ 1 decimal place:.3f→ 3 decimal places
number = 3.14159265
print(f"{number:.1f}") # 3.1
print(f"{number:.3f}") # 3.142Aligning and Padding Output
If you are printing tables or columns, alignment matters.
Format specs can also control width and alignment.
General pattern inside {}:
{value:width}→ minimum width{value:>width}→ right aligned{value:<width}→ left aligned{value:^width}→ centered
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>10.2fmeans:- total width at least 10 characters
- right aligned
- 2 decimal places
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/hNewlines `\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: 95You 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") # TypeErrorUse one of these instead:
- Use commas:
print("You are", age, "years old")- Or use an f-string:
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, Alex3. 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.3Practice Ideas
Try writing small programs that:
- Ask the user for their name and age, then print a nicely formatted sentence using an f-string.
- Ask for three product prices and print them in a right‑aligned column with 2 decimal places.
- 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.