EXERCISE 11: Make flashcards interactive with user input

Task: Transform your flashcard display into an interactive app where the user sees a question, is asked to enter an answer, and is then shown what they entered with the answer. For now, you don’t need to worry about giving feedback or different responses depending on whether the answer is correct or not. E.g.

Largest mammal on Earth

Then after the user types Elephant:

Your answer: Elephant, Correct answer: Blue whale

Run and check: Run your code in the terminal to make sure it works with the command

python flashcards_app.py
  • Select the “Start flashcards” option by entering 3 (or whichever number corresponds to the option in your implementation)
  • Try typing an answer for each question (in the example above, the German translation of the English word displayed) followed by Enter
  • Also try pressing Enter without typing to just see the answer
  • Notice how it asks you for all the cards in sequence

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 message “EXERCISE 11: Make flashcards interactive with user input” 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

# Flashcards list
flashcards_list = [
    ("Largest mammal on Earth", "Blue whale"),
    ("Tallest type of tree", "Coast redwood"),
    ("Process by which plants make food", "Photosynthesis"),
    ("Fastest land animal", "Cheetah"),
    ("Largest ocean on Earth", "Pacific Ocean")
]

### 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":
        # Iterate through flashcards list of tuples
        # Each tuple element of the list contains a question, answer pair
        for q, a in flashcards_list:
            print(f"\nQuestion: {q}\n")
            print(f"\nAnswer: {a}\n")

    elif choice == "3":

        # Handle case where no cards have been completed yet.
        if num_cards_completed <=0:
            print("You need to practice before you can get a score.")
            continue
        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(f"We hope you enjoyed your practice session today, {name}.")
        
        # Display score information
        print(f"You have answered {num_cards_correct} out of {num_cards_completed} correctly. Your score for this session {score}%.")

        print("Look forward to seeing you again soon!")
        break
    
    else:
        # Clarify instruction to get valid input
        print("\nInvalid value entered. Please make sure you enter just a single digit (no other words): 1, 2, 3 or 4, to select an option.")

Take a break: 🍵