Skip to main content

Python If Statements

Control Flow Focus

Python If Statements

Conditionals determine what code runs. Learn idiomatic patterns, avoid nesting hell, and keep branches maintainable.

Basic structure

if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
else:
grade = "Keep going"

Guard clauses

if not user.active:
raise PermissionError("Inactive user")

# continue with happy path

Reduces nesting and surfaces failure states early.

Nested conditionals

Use sparingly. Prefer extraction into helper functions or dictionaries:

handlers = {
"email": send_email,
"sms": send_sms,
}
handler = handlers.get(channel)
if handler:
handler(message)
else:
raise ValueError("Unsupported channel")

Ternary operator

status = "premium" if total > 100 else "standard"

Great for short expressions. Avoid chaining ternaries together; they harm readability.

Match-case vs if/elif

Use match-case when pattern matching nested structures, but stick with if/elif for simple comparisons.

Next up in your learning path

Frequently Asked Questions

Is there a switch statement in Python?

No traditional switch, but Python 3.10 introduced `match-case`, which provides pattern matching and covers most switch-style use cases.

How do I avoid deeply nested if statements?

Use guard clauses, helper functions, or dispatch tables (dict mapping keys to callables). When logic grows complex, consider state machines or strategy pattern.

Can I chain comparisons?

Yes. Python lets you write `0 < score <= 100`, which is equivalent to `(0 < score) and (score <= 100)` but more readable.