DEV Community

Cover image for Building a Quiz App Using Python: A Step-by-Step Guide
Ratan
Ratan

Posted on

Building a Quiz App Using Python: A Step-by-Step Guide

Image description

Have you ever wanted to create your own quiz app? It's a fun project that can help you learn programming while also making something useful. In this project, we'll walk through how to build a simple quiz app with multiple-choice questions, scoring, time limits, and different topics.

What Our Quiz App Will Do

Our quiz app will:

  1. Ask multiple-choice questions
  2. Keep track of the score
  3. Set a time limit for each question
  4. Cover different topics

Let's break it down step by step!

I am going to use a toolkit name Tkinter.

First Setting Up Tkinter for Your Quiz App

Tkinter is a standard GUI (Graphical User Interface) toolkit that comes pre-installed with most Python distributions. However, sometimes you might need to install or configure it separately. Here's a step-by-step guide to ensure Tkinter is properly set up on your system.

For Windows Users

  1. Tkinter usually comes pre-installed with Python on Windows. To check if it's installed:

    • Open Command Prompt
    • Type python -m tkinter and press Enter
    • If a small window appears, Tkinter is installed and working
  2. If Tkinter is not installed:

    • Download Python from the official website (https://www.python.org/downloads/)
    • During installation, make sure to check the box that says "tcl/tk and IDLE"
    • Complete the installation

For macOS Users

  1. Tkinter usually comes pre-installed with Python on macOS. To check:

    • Open Terminal
    • Type python -m tkinter and press Enter
    • If a small window appears, Tkinter is installed and working
  2. If Tkinter is not installed:

    • Install Homebrew if you haven't already (visit https://brew.sh/ for instructions)
    • In Terminal, run: brew install python-tk

For Linux Users

  1. Tkinter might not come pre-installed on all Linux distributions. To install:

    • For Ubuntu or Debian:
     sudo apt-get update
     sudo apt-get install python3-tk
    
  • For Fedora:

     sudo dnf install python3-tkinter
    
  • For Arch Linux:

     sudo pacman -S tk
    
  1. To verify the installation:
    • Open Terminal
    • Type python -m tkinter and press Enter
    • If a small window appears, Tkinter is installed and working

Verifying Tkinter in Your Python Environment

After installation, you can verify Tkinter in your Python environment:

  1. Open your Python interpreter (type python in your command line)
  2. Try importing Tkinter:
   import tkinter as tk
Enter fullscreen mode Exit fullscreen mode
  1. If no error occurs, Tkinter is successfully installed

Step 1: Setting Up Our Project

First, we'll create a new Python file called quiz_app.py. We'll use Python because it's easy to learn and has everything we need for this project.

Step 2: Creating Our Questions

We'll start by creating a list of questions. Each question will be a dictionary with the question text, answer choices, the correct answer, and the topic.

Here's how we can set that up:

# List of questions
questions = [
    {
        "question": "What is the capital of France?",
        "choices": ["London", "Berlin", "Paris", "Madrid"],
        "correct_answer": "Paris",
        "topic": "Geography"
    },
    {
        "question": "Who painted the Mona Lisa?",
        "choices": ["Vincent van Gogh", "Leonardo da Vinci", "Pablo Picasso", "Claude Monet"],
        "correct_answer": "Leonardo da Vinci",
        "topic": "Art"
    },
    # Add more questions here...
]
Enter fullscreen mode Exit fullscreen mode

Step 3: Creating the Quiz Function

Now, let's create a function that will run our quiz:

import random
import time

def run_quiz(questions, time_limit=10):
    score = 0
    total_questions = len(questions)

    # Shuffle the questions to make the quiz more interesting
    random.shuffle(questions)

    for q in questions:
        print(f"\nTopic: {q['topic']}")
        print(q['question'])

        # Print answer choices
        for i, choice in enumerate(q['choices'], 1):
            print(f"{i}. {choice}")

        # Start the timer
        start_time = time.time()

        # Get user's answer
        while True:
            user_answer = input(f"\nYour answer (1-{len(q['choices'])}): ")
            if user_answer.isdigit() and 1 <= int(user_answer) <= len(q['choices']):
                break
            print("Invalid input. Please enter a number between 1 and", len(q['choices']))

        # Check if time's up
        if time.time() - start_time > time_limit:
            print("Time's up!")
        else:
            # Check if the answer is correct
            if q['choices'][int(user_answer)-1] == q['correct_answer']:
                print("Correct!")
                score += 1
            else:
                print(f"Sorry, the correct answer was: {q['correct_answer']}")

        print(f"Time taken: {time.time() - start_time:.2f} seconds")

    # Print final score
    print(f"\nQuiz complete! Your score: {score}/{total_questions}")

# Run the quiz
run_quiz(questions)
Enter fullscreen mode Exit fullscreen mode

Let's break down what this code does:

  1. We import the random module to shuffle our questions and time to handle the time limit.
  2. Our run_quiz function takes the list of questions and an optional time limit (default is 10 seconds).
  3. We shuffle the questions to make each quiz unique.
  4. For each question:
    • We print the topic and question.
    • We show the answer choices.
    • We start a timer.
    • We get the user's answer, making sure it's valid.
    • We check if time's up.
    • If not, we check if the answer is correct and update the score.
    • We show how long the user took to answer.
  5. At the end, we print the final score.

Step 4: Running Our Quiz App

To run our quiz, we just need to call the run_quiz function with our questions:

if __name__ == "__main__":
    run_quiz(questions)
Enter fullscreen mode Exit fullscreen mode

This line makes sure our quiz only runs if we're running this file directly (not importing it from somewhere else).

Conclusion

Congratulations! You've just built a simple but fun quiz app. This project teaches you about working with lists and dictionaries, handling user input, and managing time in Python. Keep experimenting and adding new features to make your quiz app even more awesome!

Happy coding!

Top comments (0)