Breaking the Bad Nested Loop, in Python

Rifqi A. Bramantyo
4 min readApr 26, 2024

--

Nested Loop

Bad here refers to powerful method in programming, yes, Nested loops, it allows us for complex control flow and decision-making within a program. However, managing the flow of execution within nested loops can become cumbersome without proper control mechanisms. In this story, we’ll explore a technique to efficiently control the flow of nested loops, improving code readability and maintainability.

The Challenge of Nested Loops

Nested loops are loops within loops, often used to iterate over multidimensional data structures or to implement menu-driven interfaces. While nested loops are versatile, managing the flow of execution within them can be challenging. Without proper control mechanisms, it’s easy to get stuck in a loop or encounter unintended behavior.

Introducing Control Flags

Control flags are boolean variables used to control the flow of execution within loops. By strategically placing control flags within nested loops, you can efficiently manage the flow of your program without nesting multiple break statements.

Example:

For the example i will try to create menu-driven program, but right now without the control flag.

def log_in():
print("\nWelcome")
print("1. Log In")
print("2. Sign up")
choice = input("Enter your choice: ")
return choice

def main_menu():
print("\nMain Menu:")
print("1. Option 1")
print("2. Option 2")
print("3. Log Out")
choice = input("Enter your choice: ")
return choice

def option1_submenu():
print("\nOption 1:")
print("a. Edit Account")
print("b. Delete Account")
print("c. Back to main menu")
choice = input("Enter your choice: ")
return choice

while True:
login_choice = log_in() # Welcome page

if login_choice == '1':
while True:
user_choice = main_menu() # Main menu

if user_choice == '1':
while True:
sub_choice = option1_submenu() # Sub menu

if sub_choice == 'a':
print("You selected Edit Account")
print('This function is for Edit Account')
print('Back to Main menu')
break
elif sub_choice == 'b':
print("You selected Delete Account")
print("Returning to log in page...")
break
elif sub_choice == 'c':
break
else:
print("Invalid choice. Please try again.")

elif user_choice == '2':
print("You selected Option 2")

elif user_choice == '3':
print("Exiting to welcome page...")
break

else:
print("Invalid choice. Please try again.")
else:
break # Exit the program

So, let’s try a scenario if a user want to delete his account, the expected outcome will be returned to the welcome page. With these break, he will only be returned to the main menu. But, let’s try with control flags.

def log_in():
print("\nWelcome")
print("1. Log In")
print("2. Sign up")
choice = input("Enter your choice: ")
return choice

def main_menu():
print("\nMain Menu:")
print("1. Option 1")
print("2. Option 2")
print("3. Log Out")
choice = input("Enter your choice: ")
return choice

def option1_submenu():
print("\nOption 1:")
print("a. Edit Account")
print("b. Delete Account")
print("c. Back to main menu")
choice = input("Enter your choice: ")
return choice

while True:
login_choice = log_in() # Welcome page
flag = True # 1. Initialization

if login_choice == '1':
while flag: # 2. Control flow
user_choice = main_menu() # Main menu

if user_choice == '1':
while True:
sub_choice = option1_submenu() # Sub menu

if sub_choice == 'a':
print("You selected Edit Account")
print('This function is for Edit Account')
print('Back to Main menu')
break
elif sub_choice == 'b':
print("You selected Delete Account")
print("Returning to log in page...")
flag = False # 3. Modification of Flag
break
elif sub_choice == 'c':
break
else:
print("Invalid choice. Please try again.")

elif user_choice == '2':
print("You selected Option 2")

elif user_choice == '3':
print("Exiting to welcome page...")
break

else:
print("Invalid choice. Please try again.")
else:
break # Exit the program
  1. Initialization: flag = True is set at the beginning of the outer loop. This ensures that the nested while flag loop is entered at least once when the outer loop restarts.
  2. Control Flow: The nested loop (while flag) is controlled by the flag variable. It ensures that the loop continues running as long as flag remains True.
  3. Modification of Flag:
  • When the user selects “Delete Account” (sub_choice == 'b'), flag is set to False. This modification influences the loop control, allowing the program to exit the nested loop and return to the welcome page.
  • Setting flag to False allows you to control the flow within the nested loop dynamically. Once it's False, the loop condition (while flag) becomes False, and the loop terminates.

Simplifying Navigation

One common use case for control flags is simplifying navigation within menu-driven interfaces. Instead of nesting multiple while loops and break statements to navigate between menus, you can use a single control flag to determine when to exit a loop and when to return to a previous menu.

Enhancing Readability and Maintainability

By abstracting control logic into control flags, you improve the readability and maintainability of your code. Control flags serve as signposts, indicating the flow of execution within your program without cluttering your code with unnecessary conditional statements.

Conclusion

Using control flags to manage the flow of nested loops is a powerful technique for improving code readability and maintainability. By abstracting control logic into boolean variables, you simplify navigation within your program and reduce the complexity of nested loops. Next time you find yourself working with nested loops, consider using control flags to streamline your code and enhance your programming experience.

--

--