0% found this document useful (0 votes)
22 views4 pages

Mathsquiz

The document defines functions and user interfaces to create a math quiz application with different difficulty levels. Users can select a level, answer multiple choice questions, get feedback on answers, and see their final score. The application also connects to a database to store user data.

Uploaded by

videhlakkad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views4 pages

Mathsquiz

The document defines functions and user interfaces to create a math quiz application with different difficulty levels. Users can select a level, answer multiple choice questions, get feedback on answers, and see their final score. The application also connects to a database to store user data.

Uploaded by

videhlakkad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

from tkinter import *

from tkinter import messagebox, ttk


from random import randint, choice
import mysql.connector

# Database connection
db_connection = mysql.connector.connect(
host="localhost",
user="videh",
password="1234",
database="Maths_Quiz"
)
db_cursor = db_connection.cursor()

# Function to start the quiz with the selected difficulty level


def start_quiz():
global questionNumber, n1_range, n2_range, user_id
level = level_var.get()

if level == "Easy":
n1_range, n2_range = (1, 10), (1, 10)
elif level == "Medium":
n1_range, n2_range = (1, 100), (1, 100)
elif level == "Hard":
n1_range, n2_range = (1, 1000), (1, 1000)
elif level == "Extreme":
n1_range, n2_range = (1, 10000), (1, 10000)

questionNumber.set(0)

# Insert a record to store the user's data


db_cursor.execute("INSERT INTO user_scores (user_id, difficulty_level) VALUES
(%s, %s)", (user_id, level))
db_connection.commit()

generateQuestion()
level_window.destroy()

# Function to generate a math question


def generateQuestion():
global question, answer
questionNumber.set(questionNumber.get() + 1)
n1 = randint(*n1_range)
n2 = randint(*n2_range)
operator = choice(['+', '-', '*', '/'])
question.set(f"{n1} {operator} {n2}")
answer.set(eval(question.get()))

questionlabel.config(text=f"Question: {question.get()}")

# Function to check the submitted answer


def checkAnswer():
global scorelabel, resultlabel, user_id

if questionNumber.get() > 10:


messagebox.showinfo("Quiz Completed", "Quiz completed. Please restart to
start a new one.")
return
if not givenanswer.get():
messagebox.showwarning("No Answer", "Please enter the answer.")
return

if resultlabel:
resultlabel.destroy()

if str(answer.get()) == givenanswer.get():
score.set(score.get() + 10)
print("Your answer is correct")
result_text = "Correct"
result_color = "#2ecc71" # Green
else:
result_text = "Incorrect"
result_color = "#e74c3c" # Red
print("Your answer is incorrect")

resultlabel = Label(root, text=result_text, font=("Arial", 14),


fg=result_color, bg="black")
resultlabel.grid(row=4, column=0, pady=5)

scorelabel.config(text=f"Score: {score.get()}", font=("Arial", 14),


fg="#3498db") # Blue

if questionNumber.get() == 10:
scorelabel.destroy()
scorelabel = Label(root, text=f"Final Score: {score.get()}", font=("Arial",
14, "bold"), fg="#3498db") # Blue
scorelabel.grid(row=5, column=0, pady=5)
messagebox.showinfo("Quiz Completed", "Quiz completed. Please restart to
start a new one.")
else:
generateQuestion()

# Function to restart the quiz


def restart():
global scorelabel, resultlabel
score.set(0)
questionNumber.set(0)
generateQuestion()
scorelabel.config(text=f"Score: {score.get()}", font=("Arial", 14, "bold"))
resultlabel.config(text="Incorrect")

# UI for Level Selection


level_window = Tk()
level_window.title("Select Difficulty Level")
level_window.geometry("300x150")

level_var = StringVar()
level_var.set("Easy")

questionNumber = IntVar() # Add this line to initialize questionNumber


n1_range, n2_range = (1, 10), (1, 10) # Default range for Easy level
question = StringVar()
answer = StringVar()

level_label = Label(level_window, text="Select Difficulty Level:", font=("Arial",


14))
level_label.pack(pady=10)
level_menu = OptionMenu(level_window, level_var, "Easy", "Medium", "Hard",
"Extreme")
level_menu.pack(pady=10)

start_button = Button(level_window, text="Start Quiz", font=("Arial", 14),


command=start_quiz)
start_button.pack(pady=10)

# Create question label here


questionlabel = Label(level_window, text="", font=("Arial", 18))
questionlabel.pack(pady=10)

level_window.mainloop()

# Main Quiz Window


root = Tk()
root.geometry("600x500")
root.title("Maths Quiz")

# Initialize variables
givenanswer = StringVar()
score = IntVar()

# Retrieve or create user_id


db_cursor.execute("SELECT user_id FROM users WHERE username = 'your_username'")
result = db_cursor.fetchone()
if result:
user_id = result[0]
else:
db_cursor.execute("INSERT INTO users (username) VALUES ('your_username')")
db_connection.commit()
user_id = db_cursor.lastrowid

# UI
Headinglabel = Label(root, text="Maths Quiz", font=("Arial", 25, "bold"))
Headinglabel.grid(row=0, column=0, pady=10)

questionlabel = Label(root, text="", font=("Arial", 18))


questionlabel.grid(row=2, column=0, pady=10)

answerentry = Entry(root, textvariable=givenanswer, font=("Arial", 18))


answerentry.grid(row=3, column=0, pady=10)

Submitbutton = Button(root, text="Submit", font=("Arial", 16), command=checkAnswer,


bg="#2c3e50", fg="white") # Dark gray
Submitbutton.grid(row=3, column=1, pady=10, padx=10)

scorelabel = Label(root, text=f"Score: {score.get()}", font=("Arial", 14, "bold"),


fg="#3498db") # Blue
scorelabel.grid(row=5, column=0, pady=10)

resultlabel = Label(root, text="Incorrect", font=("Arial", 16), fg="#e74c3c",


bg="black")
resultlabel.grid(row=4, column=0, pady=10)

scalelabel = ttk.Scale(root, from_=0, to=10, orient=HORIZONTAL, length=400,


variable=questionNumber)
scalelabel.grid(row=1, column=0, pady=10)
completeQuestionlabel = Label(root, text="10th question", font=("Arial", 14))
completeQuestionlabel.grid(row=1, column=1, pady=10)

restartbutton = Button(root, text="Restart", font=("Arial", 16), command=restart,


bg="#2ecc71", fg="white") # Green
restartbutton.grid(row=6, column=0, pady=20)

generateQuestion()

root.mainloop()

You might also like