python-by-example/03_loops/02_while_loop.py
2025-12-30 08:50:00 +02:00

264 lines
6.9 KiB
Python

"""
================================================================================
File: 02_while_loop.py
Topic: While Loops in Python
================================================================================
This file demonstrates the 'while' loop in Python, which repeatedly executes
a block of code as long as a condition remains True. Unlike for loops,
while loops are typically used when the number of iterations is not known
in advance.
Key Concepts:
- Basic while loop syntax
- Counter-controlled loops
- Sentinel-controlled loops (input validation)
- Infinite loops and how to handle them
- While-else construct
================================================================================
"""
# -----------------------------------------------------------------------------
# 1. Basic While Loop
# -----------------------------------------------------------------------------
# Executes as long as condition is True
print("--- Basic While Loop ---")
count = 1
while count <= 5:
print(f"Count: {count}")
count += 1 # Don't forget to update the condition variable!
print("Loop finished!")
# -----------------------------------------------------------------------------
# 2. Counter-Controlled While Loop
# -----------------------------------------------------------------------------
# When you know how many iterations you need
print("\n--- Counter-Controlled Loop ---")
# Countdown
countdown = 5
print("Rocket Launch Countdown:")
while countdown > 0:
print(f"T-minus {countdown}...")
countdown -= 1
print("Liftoff! 🚀")
# -----------------------------------------------------------------------------
# 3. Summing Numbers with While
# -----------------------------------------------------------------------------
# Accumulator pattern
print("\n--- Sum of Numbers ---")
# Sum numbers from 1 to 10
n = 1
total = 0
while n <= 10:
total += n
n += 1
print(f"Sum of 1 to 10 = {total}")
# -----------------------------------------------------------------------------
# 4. Sentinel-Controlled Loop (Input Validation)
# -----------------------------------------------------------------------------
# Loop until a specific condition is met
print("\n--- Sentinel-Controlled Loop ---")
# Simulating password validation (in practice, use input())
attempts = 0
max_attempts = 3
correct_password = "secret123"
# Simulated user inputs
user_inputs = ["wrong1", "wrong2", "secret123"]
while attempts < max_attempts:
# In real code: password = input("Enter password: ")
password = user_inputs[attempts]
print(f"Attempt {attempts + 1}: Entered '{password}'")
if password == correct_password:
print("Access granted! ✓")
break
else:
print("Incorrect password.")
attempts += 1
else:
# This runs if the loop completes without break
print("Too many failed attempts. Account locked.")
# -----------------------------------------------------------------------------
# 5. While Loop with User Simulation
# -----------------------------------------------------------------------------
# Menu-driven program example
print("\n--- Menu-Driven Example ---")
# Simulated menu choices
menu_selections = [1, 2, 4, 3]
selection_index = 0
running = True
while running:
# Simulating menu selection
choice = menu_selections[selection_index]
selection_index += 1
print(f"\nMenu: 1=Add, 2=View, 3=Exit | Choice: {choice}")
if choice == 1:
print(" ➤ Adding item...")
elif choice == 2:
print(" ➤ Viewing items...")
elif choice == 3:
print(" ➤ Exiting program...")
running = False
else:
print(" ➤ Invalid choice, try again.")
# -----------------------------------------------------------------------------
# 6. Infinite Loops (and how to avoid them)
# -----------------------------------------------------------------------------
# A loop that never ends - usually a bug
print("\n--- Avoiding Infinite Loops ---")
# BAD: This would run forever (commented out)
# i = 0
# while i < 5:
# print(i)
# # Missing: i += 1
# GOOD: Always update the condition variable
i = 0
while i < 5:
print(f"i = {i}")
i += 1 # This is crucial!
# -----------------------------------------------------------------------------
# 7. While-Else Construct
# -----------------------------------------------------------------------------
# The else block executes if the loop completes normally (no break)
print("\n--- While-Else Construct ---")
# Example 1: Loop completes normally
n = 5
while n > 0:
print(n, end=" ")
n -= 1
else:
print("\n ↳ Countdown complete! (else block executed)")
# Example 2: Loop exits via break
print("\nSearching in list:")
items = ["a", "b", "c", "d"]
target = "b"
index = 0
while index < len(items):
if items[index] == target:
print(f" Found '{target}' at index {index}")
break
index += 1
else:
print(f" '{target}' not found")
# -----------------------------------------------------------------------------
# 8. Nested While Loops
# -----------------------------------------------------------------------------
# A while inside another while
print("\n--- Nested While Loops ---")
# Create a simple pattern
row = 1
while row <= 4:
col = 1
while col <= row:
print("*", end=" ")
col += 1
print() # New line
row += 1
# -----------------------------------------------------------------------------
# 9. While with Break and Continue
# -----------------------------------------------------------------------------
# Control flow within loops (preview - detailed in next file)
print("\n--- Break and Continue in While ---")
# Break example
print("Break example (stop at 5):")
i = 0
while True: # Intentional infinite loop
i += 1
if i > 5:
break
print(i, end=" ")
print()
# Continue example
print("\nContinue example (skip even numbers):")
i = 0
while i < 10:
i += 1
if i % 2 == 0:
continue # Skip even numbers
print(i, end=" ")
print()
# -----------------------------------------------------------------------------
# 10. Practical Examples
# -----------------------------------------------------------------------------
print("\n--- Practical Examples ---")
# Fibonacci sequence
print("Fibonacci sequence (first 10 numbers):")
a, b = 0, 1
count = 0
while count < 10:
print(a, end=" ")
a, b = b, a + b
count += 1
print()
# Finding digits in a number
print("\nDigits of 12345:")
number = 12345
while number > 0:
digit = number % 10
print(f" Digit: {digit}")
number //= 10
# Guessing game logic
print("\n Guess the Number Game Logic:")
secret = 7
guesses = [3, 8, 5, 7]
guess_index = 0
while guess_index < len(guesses):
guess = guesses[guess_index]
print(f" Guess: {guess}", end=" ")
if guess < secret:
print("- Too low!")
elif guess > secret:
print("- Too high!")
else:
print("- Correct! 🎉")
break
guess_index += 1