Python & AI Tutorials Logo
Python Programming

10. Using Conditional Expressions (if-else Expressions)

In Chapter 8, we learned how to make decisions in our programs using if statements. These statements allow us to execute different blocks of code based on conditions. However, sometimes we need to choose between two values rather than two blocks of code. Python provides a special syntax for this common situation: conditional expressions.

Conditional expressions (also called ternary expressions or the ternary operator in other languages) let us write compact decision-making code when we simply need to select one value or another based on a condition. They're particularly useful for assignments and when building larger expressions.

10.1) What Conditional Expressions Are

A conditional expression is a single expression that evaluates to one of two values based on a condition. Unlike an if statement, which controls which block of code executes, a conditional expression produces a value that can be used immediately.

Let's look at a common scenario. Suppose we're writing a program to categorize students by age:

python
# Using an if statement (what we already know)
age = 16
if age >= 18:
    category = "adult"
else:
    category = "minor"
print(f"Category: {category}")  # Output: Category: minor

This works perfectly, but notice that we're really just choosing between two string values. The structure is somewhat verbose for such a simple decision. Here's the same logic using a conditional expression:

python
# Using a conditional expression
age = 16
category = "adult" if age >= 18 else "minor"
print(f"Category: {category}")  # Output: Category: minor

Both versions produce identical results, but the conditional expression is more compact. It directly assigns one of two values to category based on the condition.

Understanding the Fundamental Difference

The key distinction is that conditional expressions are expressions, not statements:

  • An expression is something that evaluates to a value. You can use it anywhere a value is expected: in assignments, as function arguments, inside other expressions, etc.
  • A statement is a complete instruction that performs an action but doesn't produce a value.
python
# This is an expression - it produces a value
result = 10 if True else 20
 
# This is a statement - it performs actions but isn't a value itself
if True:
    result = 10
else:
    result = 20

Because conditional expressions produce values, they're more flexible in certain situations. However, this doesn't mean they're always better—we'll explore when to use each approach later in this chapter.

10.2) Syntax of the if–else Expression

The syntax of a conditional expression follows this pattern:

value_if_true if condition else value_if_false

Let's break down each component:

  1. value_if_true: The expression that's evaluated and returned if the condition is True
  2. if: The keyword that introduces the condition
  3. condition: A boolean expression that determines which value is returned
  4. else: The keyword that introduces the alternative value
  5. value_if_false: The expression that's evaluated and returned if the condition is False

Notice that the order might seem unusual if you're familiar with other programming languages. In Python, the "true" value comes first, then the condition, then the "false" value. This ordering reads somewhat like natural English: "Give me X if the condition is true, otherwise give me Y."

Yes

No

Start: Evaluate Condition

Condition True?

Evaluate and Return
value_if_true

Evaluate and Return
value_if_false

Result Available

Let's see several examples with different types of values:

python
# Example 1: Choosing between numbers
temperature = 25
comfort_level = "warm" if temperature > 20 else "cool"
print(comfort_level)  # Output: warm
 
# Example 2: Choosing between calculations
score = 85
bonus = 10 if score >= 90 else 5
print(f"Bonus points: {bonus}")  # Output: Bonus points: 5
 
# Example 3: Choosing between boolean values
has_permission = True
access = "granted" if has_permission else "denied"
print(f"Access: {access}")  # Output: Access: granted
 
# Example 4: The condition can be any boolean expression
username = "admin"
role = "administrator" if username == "admin" else "regular user"
print(f"Role: {role}")  # Output: Role: administrator

Important Syntax Notes

The else part is mandatory in a conditional expression. Unlike an if statement where else is optional, you must provide both alternatives:

python
# This is INVALID - missing else
# result = "yes" if True  # SyntaxError
 
# This is VALID - both branches provided
result = "yes" if True else "no"

This requirement makes sense because an expression must always produce a value. If the condition is False and there's no else clause, what value should the expression produce? Python requires you to be explicit about both possibilities.

10.3) How Conditional Expressions Are Evaluated

Understanding how Python evaluates conditional expressions helps you write correct code and predict what your programs will do. The evaluation follows a specific, predictable sequence.

The Evaluation Process

Python evaluates a conditional expression in this order:

  1. Evaluate the condition (the boolean expression after if)
  2. Based on the result:
    • If the condition is True, evaluate and return value_if_true
    • If the condition is False, evaluate and return value_if_false

Crucially, Python only evaluates one of the two value expressions, not both. This is called short-circuit evaluation and it's similar to how and and or operators work (which we learned about in Chapter 9).

python
# Only the relevant branch is evaluated
x = 10
result = x * 2 if x > 5 else x / 2
# Since x > 5 is True, Python evaluates x * 2 (giving 20)
# and never evaluates x / 2
print(result)  # Output: 20

Why Short-Circuit Evaluation Matters

Short-circuit evaluation can prevent errors and improve efficiency:

python
# Example 1: Avoiding division by zero
denominator = 0
result = "undefined" if denominator == 0 else 100 / denominator
print(result)  # Output: undefined
# The division 100 / denominator is never attempted because
# the condition is True, so we avoid a ZeroDivisionError
python
# Example 2: Avoiding operations on None
data = None
length = 0 if data is None else len(data)
print(length)  # Output: 0
# len(data) is never called because data is None,
# avoiding a TypeError

Truthiness in Conditional Expressions

As with if statements (Chapter 8), the condition in a conditional expression uses Python's truthiness rules. Any value can be used as a condition:

python
# Empty string is falsy
name = ""
greeting = f"Hello, {name}" if name else "Hello, guest"
print(greeting)  # Output: Hello, guest
 
# Non-empty string is truthy
name = "Alice"
greeting = f"Hello, {name}" if name else "Hello, guest"
print(greeting)  # Output: Hello, Alice
 
# Zero is falsy, non-zero is truthy
items = 0
message = "You have items" if items else "Your cart is empty"
print(message)  # Output: Your cart is empty
 
items = 3
message = "You have items" if items else "Your cart is empty"
print(message)  # Output: You have items

Nested Evaluation

The values in a conditional expression can themselves be expressions, including other conditional expressions. Python evaluates these from the inside out:

python
# The value_if_true is itself a calculation
age = 25
price = age * 2 if age < 18 else age * 3
print(price)  # Output: 75
# Steps: age < 18 → False → evaluate age * 3 → 75
 
# The condition is a complex expression
score = 85
grade = 90
status = "excellent" if score >= 80 and grade >= 85 else "good"
print(status)  # Output: excellent
# Steps: score >= 80 → True, grade >= 85 → True
#        True and True → True → return "excellent"

10.4) Using Conditional Expressions in Assignments

One of the most common uses of conditional expressions is in assignments, where we want to set a variable to one of two values based on a condition. This pattern appears frequently in real-world code.

Simple Assignment Patterns

Let's look at practical examples where conditional expressions make assignments cleaner:

python
# Example 1: Setting a discount based on membership
is_member = True
discount = 0.15 if is_member else 0.05
print(f"Discount: {discount * 100}%")  # Output: Discount: 15.0%
 
# Example 2: Determining shipping cost
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
print(f"Shipping: ${shipping:.2f}")  # Output: Shipping: $5.99
 
# Example 3: Setting a default value
user_input = ""  # Simulating empty input
page_size = int(user_input) if user_input else 10
print(f"Items per page: {page_size}")  # Output: Items per page: 10

Comparing with if Statements

Let's see the same assignments written with if statements to appreciate the difference:

python
# Using if statement (more verbose)
is_member = True
if is_member:
    discount = 0.15
else:
    discount = 0.05
 
# Using conditional expression (more compact)
is_member = True
discount = 0.15 if is_member else 0.05

Both approaches work correctly, but the conditional expression is more concise when you're simply choosing between two values. The if statement version requires four lines and repeats the variable name discount twice, while the conditional expression does the same thing in one line.

Multiple Assignments with Consistent Logic

When you need to make several assignments based on the same condition, you have choices:

python
# Approach 1: Multiple conditional expressions
is_premium = True
price = 99.99 if is_premium else 149.99
features = "all" if is_premium else "basic"
support = "priority" if is_premium else "standard"
 
# Approach 2: One if statement for multiple assignments
is_premium = True
if is_premium:
    price = 99.99
    features = "all"
    support = "priority"
else:
    price = 149.99
    features = "basic"
    support = "standard"

In this case, the if statement approach (Approach 2) is often more readable because it groups related assignments together and makes the relationship between them clear. The conditional expression approach (Approach 1) works but repeats the condition three times, which can be harder to maintain if the condition needs to change.

10.5) Using Conditional Expressions Inside Larger Expressions

Because conditional expressions produce values, they can be embedded within larger expressions. This allows for powerful, compact code, though it requires care to maintain readability.

Conditional Expressions in Arithmetic

You can use conditional expressions as operands in arithmetic operations:

python
# Conditional addition
base_score = 80
bonus_eligible = True
final_score = base_score + (10 if bonus_eligible else 0)
print(f"Final score: {final_score}")  # Output: Final score: 90

Conditional Expressions in String Formatting

Conditional expressions work seamlessly with f-strings and other string operations:

python
# Example 1: Pluralization in messages
item_count = 1
message = f"You have {item_count} {'item' if item_count == 1 else 'items'}"
print(message)  # Output: You have 1 item
 
item_count = 3
message = f"You have {item_count} {'item' if item_count == 1 else 'items'}"
print(message)  # Output: You have 3 items
 
# Example 2: Conditional greeting based on time
hour = 14
greeting = f"Good {'morning' if hour < 12 else 'afternoon'}, user!"
print(greeting)  # Output: Good afternoon, user!

Nested Conditional Expressions

You can nest conditional expressions to handle multiple conditions, though this should be done sparingly:

python
# Example 1: Three-way classification
score = 85
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
print(f"Grade: {grade}")  # Output: Grade: B
 
# Let's trace through this:
# score >= 90? No (85 < 90)
# So evaluate the else part: ("B" if score >= 80 else "C")
# score >= 80? Yes (85 >= 80)
# Return "B"
 
# Example 2: Temperature classification
temp = 15
category = "hot" if temp > 25 else ("warm" if temp > 15 else "cold")
print(f"Category: {category}")  # Output: Category: cold
 
# Example 3: Age-based pricing with multiple tiers
age = 65
price = 0 if age < 5 else (8 if age < 18 else (12 if age < 65 else 8))
print(f"Ticket price: ${price}")  # Output: Ticket price: $8

Important Note on Nesting: While nested conditional expressions are possible, they can quickly become hard to read. The third example above is technically correct but difficult to understand. We'll discuss better alternatives in Section 10.7.

Conditional Expressions in Comparisons

You can use conditional expressions within comparison operations:

python
# Example 1: Comparing with a conditional value
base_value = 10
threshold = 15
is_large = True
result = base_value > (threshold if is_large else 5)
print(result)  # Output: False
# Evaluates: base_value > 15 → 10 > 15 → False
 
# Example 2: Conditional equality check
user_role = "admin"
required_role = "admin" if True else "user"
has_access = user_role == required_role
print(has_access)  # Output: True

10.6) Conditional Expression vs if Statement (Expression vs Statement)

Understanding when to use a conditional expression versus an if statement is crucial for writing clear, maintainable code. The distinction comes down to the fundamental difference between expressions and statements in Python.

Expressions vs Statements: The Core Difference

Let's clarify these terms with precision:

  • An expression is a combination of values, variables, operators, and function calls that Python evaluates to produce a value. Examples: 2 + 3, "hello".upper(), x if x > 0 else 0

  • A statement is a complete instruction that performs an action. Statements don't produce values—they do things. Examples: if x > 0: print("positive"), x = 5, for i in range(10): print(i)

python
# This is an expression - it produces a value (7)
result = 3 + 4
 
# This is a statement - it performs an action (prints)
print("Hello")
 
# A conditional expression is an expression
value = "yes" if True else "no"  # Produces "yes"
 
# An if statement is a statement
if True:
    value = "yes"
else:
    value = "no"
# Performs assignment but the if itself doesn't produce a value

When to Use Conditional Expressions

Conditional expressions are ideal when:

1. You're choosing between two values for an assignment:

python
# Good use of conditional expression
age = 16
status = "adult" if age >= 18 else "minor"
 
# Less concise with if statement
age = 16
if age >= 18:
    status = "adult"
else:
    status = "minor"

2. You need a value inline within a larger expression:

python
# Good use - value needed in f-string
items = 1
print(f"You have {items} {'item' if items == 1 else 'items'}")
# Output: You have 1 item
 
# Awkward with if statement - requires pre-assignment
items = 1
if items == 1:
    word = "item"
else:
    word = "items"
print(f"You have {items} {word}")

3. The logic is simple and the expression remains readable:

python
# Good use - simple, clear logic
discount = 0.15 if is_member else 0.05
max_value = a if a > b else b
sign = "positive" if x > 0 else "non-positive"

When to Use if Statements

Use if statements when:

1. You need to execute multiple statements in each branch:

python
# Use if statement - multiple actions per branch
if score >= 90:
    grade = "A"
    message = "Excellent work!"
    bonus_points = 10
else:
    grade = "B"
    message = "Good job!"
    bonus_points = 5
 
# Conditional expressions would be awkward here:
# grade = "A" if score >= 90 else "B"
# message = "Excellent work!" if score >= 90 else "Good job!"
# bonus_points = 10 if score >= 90 else 5
# (Repeats the condition unnecessarily)

2. You have more than two branches (elif):

python
# Use if statement - multiple branches
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "F"
 
# Nested conditional expressions become hard to read:
# grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "F"))

3. One of the branches should do nothing:

python
# Use if statement - else branch does nothing
if error_occurred:
    print("An error occurred")
    log_error(error_message)
# No else needed
 
# Conditional expression requires both branches:
# result = handle_error() if error_occurred else None  # Awkward

Side-by-Side Comparison

Let's see the same logic implemented both ways:

python
# Scenario: Setting a shipping charge
 
# Version 1: Conditional expression (good for simple value choice)
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
 
# Version 2: if statement (more verbose but clearer for some)
order_total = 45.00
if order_total >= 50:
    shipping = 0
else:
    shipping = 5.99
 
# Both produce the same result
print(f"Shipping: ${shipping:.2f}")  # Output: Shipping: $5.99

For this simple case, the conditional expression is more concise and equally clear. But consider a more complex scenario:

python
# Scenario: Processing an order with multiple steps
 
# Version 1: if statement (appropriate for multiple actions)
order_total = 45.00
if order_total >= 50:
    shipping = 0
    discount = 0.10
    message = "Free shipping applied!"
else:
    shipping = 5.99
    discount = 0
    message = "Add $5 more for free shipping"
 
# Version 2: conditional expressions (awkward and repetitive)
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
discount = 0.10 if order_total >= 50 else 0
message = "Free shipping applied!" if order_total >= 50 else "Add $5 more for free shipping"

The if statement version is clearer here because it groups related logic together and doesn't repeat the condition.

10.7) When Conditional Expressions Improve Readability (and When They Don't)

Conditional expressions are a powerful tool, but like any tool, they can be misused. The goal is always to write code that's not just correct, but also clear and maintainable. Let's explore guidelines for using conditional expressions effectively.

When Conditional Expressions Improve Readability

1. Simple, Clear Choices Between Two Values

Conditional expressions excel when the logic is straightforward:

python
# Excellent use - crystal clear
discount = 0.20 if is_member else 0.10
 
# Excellent use - obvious meaning
status = "active" if user_logged_in else "inactive"
 
# Excellent use - simple boolean choice
can_vote = True if age >= 18 else False
# Though this could be even simpler: can_vote = age >= 18

2. Inline Value Selection in Expressions

When you need a value inline and breaking it out would be awkward:

python
# Excellent use - natural pluralization
print(f"Found {count} {'result' if count == 1 else 'results'}")
 
# Excellent use - inline calculation adjustment
total = base_price * (0.9 if is_sale else 1.0)
 
# Excellent use - conditional formatting
output = f"Status: {status.upper() if is_error else status.lower()}"

3. Setting Default Values

Conditional expressions work well for providing fallback values:

python
# Excellent use - default value pattern
display_name = username if username else "Guest"
 
# Excellent use - configuration with defaults
page_size = user_preference if user_preference else 25
 
# Excellent use - safe division
result = total / count if count > 0 else 0

When Conditional Expressions Hurt Readability

1. Nested Conditional Expressions

Nesting conditional expressions creates hard-to-read code:

python
# Poor readability - nested conditional expressions
grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "F"))
 
# Much better - use if-elif-else statement
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "F"

The if-elif-else version is immediately understandable. The nested conditional expression requires careful parsing to understand the logic.

2. Complex Conditions

When the condition itself is complex, conditional expressions become hard to read:

python
# Poor readability - complex condition
result = "eligible" if age >= 18 and income > 30000 and credit_score > 650 and not has_bankruptcy else "not eligible"
 
# Better - use if statement with clear structure
if age >= 18 and income > 30000 and credit_score > 650 and not has_bankruptcy:
    result = "eligible"
else:
    result = "not eligible"
 
# Even better - break down the condition
meets_age_requirement = age >= 18
meets_income_requirement = income > 30000
meets_credit_requirement = credit_score > 650
has_clean_record = not has_bankruptcy
 
if meets_age_requirement and meets_income_requirement and meets_credit_requirement and has_clean_record:
    result = "eligible"
else:
    result = "not eligible"

3. Multiple Conditional Expressions in One Line

Combining multiple conditional expressions in a single line:

python
# Poor readability - too much in one line
price = base * (0.9 if is_member else 1.0) * (0.85 if is_sale else 1.0) + (0 if free_shipping else 5.99)
 
# Better - break into steps
member_multiplier = 0.9 if is_member else 1.0
sale_multiplier = 0.85 if is_sale else 1.0
shipping_cost = 0 if free_shipping else 5.99
price = base * member_multiplier * sale_multiplier + shipping_cost
 
# Or use if statement if logic is complex
if is_member:
    price = base * 0.9
else:
    price = base
 
if is_sale:
    price = price * 0.85
 
if free_shipping:
    shipping_cost = 0
else:
    shipping_cost = 5.99
 
price = price + shipping_cost

The Bottom Line

Use conditional expressions when they make your code clearer and more concise. Use if statements when you need:

  • Multiple statements per branch
  • More than two branches (elif)
  • Complex conditions or logic
  • Side effects or actions rather than value selection

When in doubt, prefer clarity over cleverness. Code is read far more often than it's written, so optimize for the reader.


Conditional expressions are a valuable addition to your Python toolkit. They allow you to write concise, elegant code when choosing between two values. By understanding when they improve readability and when they don't, you can make informed decisions about when to use them.

The key principles to remember:

  1. Conditional expressions produce values and can be used anywhere a value is needed
  2. The syntax is value_if_true if condition else value_if_false
  3. Python evaluates only the relevant branch (short-circuit evaluation)
  4. They're ideal for simple value choices in assignments and expressions
  5. Use if statements for multiple actions, complex logic, or more than two branches
  6. Prioritize readability—if a conditional expression is hard to understand, use an if statement instead

As you continue learning Python, you'll develop an intuition for when conditional expressions enhance your code. Practice using them in simple cases first, and gradually you'll recognize the patterns where they shine. In the next chapter, we'll explore while loops, which allow us to repeat actions based on conditions—building on the decision-making skills we've developed in this part of the book.

© 2025. Primesoft Co., Ltd.
support@primesoft.ai