EXERCISE 7: Validate user inputs with while loops and if statements

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:

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: 🎬