EXERCISE 7: Validate user inputs with while loops and if statements
- Control flow syntax and indentation (revisited)
if(elif, andelse) statements (revisited)whileloops- Testing for data types (The
isdigit()function is especially useful) - Input validation pattern
Task: Task: Create a loop that keeps asking the user for the number of cards that they want to practice until they enter a valid number.
Go to the section of your code that asks the user to enter the number of cards they wish to practice. Put this inside a while loop so that they will be asked again (and again) if their input is not valid.
Bonus task: As well as ensuring the input is an integer (at the moment the code will throw an error if a non digit is entered), you might want to add some other constraints, e.g. is not zero or falls within a given range.
Run and check: Run your code in the terminal to make sure it works with the command
python flashcards_app.py
Try entering both valid and invalid inputs to check the behaviour is as your expect.
Read through and add comments: Add any comments in your code that will help you understand it when you come back to it later.
Save your progress: Commit with a descriptive message, e.g. “EXERCISE 7: Validate user inputs with while loops and if statements” and save your work to Github with the standard Git workflow.
(Re)read the guides:
- Control flow syntax and indentation (revisited)
if(elif, andelse) statements (revisited)whileloops- Testing for data types (The
isdigit()function is especially useful) - Input validation pattern
Example solution
flashcards_app.py
# Created by: Alex Ubuntu
# Date: 01.01.2026
# Purpose: A personal flashcard trainer to help with learning
### INITIAL INTERACTION WITH USER
# Welcome message
print("Welcome to your personal flashcard trainer!")
# Absolute maximum number of cards so that the user can't ask for too many
ABSOLUTE_MAX_CARDS = 100
DEFAULT_MAX_CARDS = 20
# Fetch from user and save to variable
name = input("What is your name? ")
max_cards = DEFAULT_MAX_CARDS # Set a default value for max_cards
# Confirm name
print(f"\nMy name is {name}")
# Card and score variables
num_cards_completed = 0
num_cards_correct = 0
score = 0
### APP MENU LOOP
while True:
print("\nSelect an option by entering a number")
print("1: Set the number of cards you wish to practice")
print("2: Start flashcards")
print("3: Show the current score")
print("4: Exit")
choice = input("\nChoose an option: ")
if choice == "1":
while True:
# More stringent validation for input for maximum number of cards
# Fetch input from user but don't attempt to convert the input string
# to int until certain it will work
entered_max_cards = input("\nHow many cards would you like to practice each session? ")
# Check if input string represents an integer
if entered_max_cards.isdigit():
# Convert to integer data type
entered_max_cards = int(entered_max_cards)
# Check if value is within the value range
# (between 1 and the absolute maximum number of cards)
if entered_max_cards > 0 and entered_max_cards < ABSOLUTE_MAX_CARDS:
# Set the max_cards variable with the user's preference
max_cards = entered_max_cards
# Confirm number maximum number of cards per session
print(f"\nI want to practice at most {max_cards} cards per session")
break
else:
## Let the user know what the range should be (Bonus task).
print(f"\nPlease enter a valid number bewteen 1 and {ABSOLUTE_MAX_CARDS}.")
else:
print(f"\nPlease enter a whole number number over 0.")
elif choice == "2":
print("\nStarting flashcards...")
elif choice == "3":
score = (num_cards_correct/num_cards_completed) * 100
# Display score information
print(f"\nYou have answered {num_cards_correct} out of {num_cards_completed} correctly. Your score so far is {score}%.")
# Display feedback message based on score
if score > 90 and score <= 100:
print("Excellent work!")
elif score > 70 and score <= 90:
print("Good job!")
elif score > 50 and score <= 70:
print("Keep practicing!")
elif score > 0 and score <= 50:
print("Need more study time!")
else:
print("Score lies outside range")
elif choice == "4":
print("Exiting...")
break
else:
# Clarify instruction to get valid input (Bonus Task)
print("\nInvalid value entered. Please make sure you enter just a single digit: 1, 2, 3 or 4, to select an option.")
Take a break: 🎬
