EXERCISE 14: Limit practice to a user-specified number of cards
if(elif, andelse) statements (revisited)- Comparison operators (revisited)
- Accumulator pattern (revisited)
- Nested control flows
breakandcontinue
Task: Use number specified by user to set the number of cards they practice.
You have already written code to get the user’s preferred number of cards and save it to a a variable, e.g. max_cards_per_session. Now you need to use that variable to determine how many cards should be displayed to the user per session.
You can do this by comparing num_cards_completed (an accumulator variable) with max_cards_per_session each iteration and stop when num_cards_completed has been incremented to be equal to or greater than max_cards_per_session. Pay particular attention to where in the loop you test for equality.
Run and check: Run your code in the terminal to make sure it works with the command
python flashcards_app.py
- Try setting the number of cards to different numbers and check this coincides with the number of cards displayed to you.
- Try setting the number of cards to a number greater than the number of cards available and check that the program behaves as you would 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 message “EXERCISE 14: Limit practice to a user-specified number of cards” and save your work to Github with the standard Git workflow.
(Re)read the guides:
if(elif, andelse) statements (revisited)- Comparison operators (revisited)
- Accumulator pattern (revisited)
- Nested control flows
breakandcontinue
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 = {
"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":
# Reset the number of cards completed for each session
num_cards_completed = 0
num_cards_correct = 0
# Iterate through flashcards list of tuples
# Each tuple element of the list contains a question, answer pair
# Using a for loop means that the number of flashcards displayed
# is limited by the number of items in flashcards so the user
# may end up practicing fewer cards than they specified
for q, a in flashcards_list:
# Ask user question and save response into variable
user_answer = input(f"\nQuestion: {q}\n")
# Increment the count of cards completed
num_cards_completed += 1
# Display user's answer and correct answer
print(f"Your answer: {user_answer}, Correct answer: {a}")
# Response deemed to be correct even if given in different case
if user_answer.lower() == a.lower():
# Increment count of cards answered correctly
num_cards_correct += 1
print("Correct")
else:
print("Incorrect")
# Check if number of cards completed has hit the user's
# preferred maximum number of cards
if num_cards_completed >= max_cards:
break
print("\nWell done on completing your practice session!")
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}%.")
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}%.")
# 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!")
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: 🛋️
