In our previous posts #28, we built powerful decision-making chains using the if-elif-else
structure. This is perfect for choosing one path from a list of mutually exclusive options. But what happens when a decision leads to another, follow-up decision?
This is where nested if
statements come into play. A nested if
is simply an if
statement that lives inside another if
statement, allowing for multi-level logic. In this post, we’ll learn how to create these more detailed decisions and discuss when it’s appropriate to use them.
What is a Nested if
Statement?
A nested if
statement is an if
(or if-else
/if-elif-else
) block that is placed inside the indented block of an outer if
, elif
, or else
statement.
It’s the programmatic equivalent of asking a follow-up question. The inner question only gets asked if the answer to the outer question meets a certain condition. For example: “Is the user an adult?” If yes, then we ask the follow-up question: “Do they have a VIP ticket?”
Structure and Indentation
The structure is a natural extension of the indentation rules we learned in Post #6. The inner if
statement is simply indented one level deeper than the outer one, creating a sub-block of logic.
The general structure looks like this:
if outer_condition:
# This code runs if the outer_condition is True
print("Outer condition was met.")
if inner_condition:
# This code runs only if BOTH the outer_condition
# AND the inner_condition are True.
print("Inner condition was also met.")
print("Continuing with the rest of the program.")
A Practical Example: The VIP Lounge
Let’s extend the logic from our age-based access program in Post #28. Imagine our venue has a special VIP lounge that is only available to adults (18+). The question about a VIP pass only makes sense after we’ve confirmed the user is an adult.
age = int(input("Please enter your age: "))
if age >= 18:
print("Welcome! You have full access to the venue.")
# This is the nested conditional check
has_vip_pass = input("Do you have a VIP pass? (yes/no) ")
if has_vip_pass == "yes":
print("Excellent! Please proceed to the VIP lounge.")
else:
print("Enjoy your time in the general access areas.")
elif age >= 13:
print("Welcome! You have teen access.")
else:
print("Welcome! You have child access.")
Notice how the question about the VIP pass and the subsequent if-else
block are indented inside the if age >= 18:
block. This logic is completely self-contained and is only ever reached if that first condition is met.
A Word of Caution: Avoid Deep Nesting
Nested if
statements are powerful, but they should be used with care. If you find yourself nesting if
statements too deeply (an if
inside an if
inside another if
), your code can become very difficult to read and understand. This is sometimes called the “arrowhead anti-pattern” because of the shape the indentation creates.
if condition_a:
if condition_b:
if condition_c:
# This is getting hard to follow!
print("Do something.")
If your code starts to look like this, it’s often a sign that there might be a simpler way to write your logic. Sometimes, you can combine checks using the and
operator we learned about in Post #23. For example, if condition_a and condition_b:
can often replace a simple nested structure.
What’s Next?
You’ve now learned how to create more detailed logic by nesting if
statements. This technique is perfect for situations where one condition must be met before a follow-up condition is even considered.
Our if-else
statements, even nested ones, typically take up multiple lines. But what if you have a very simple “this or that” choice? Python offers a compact, one-line syntax for these situations. In Post #30, we will explore a handy shortcut for simple if-else
logic called the ternary operator.
Author

Experienced Cloud & DevOps Engineer with hands-on experience in AWS, GCP, Terraform, Ansible, ELK, Docker, Git, GitLab, Python, PowerShell, Shell, and theoretical knowledge on Azure, Kubernetes & Jenkins. In my free time, I write blogs on ckdbtech.com