ruchita ya le tera program mujhe tho nahi mila error tu bhi try karle. niche hai code



 import tkinter as tk

from tkinter import messagebox

import time

import random


class TypingSpeedTest:

    def init(self, root):

        self.root = root

        self.root.title("Typing Speed Test")

        self.root.geometry("800x600")

        self.root.configure(bg="#f0f0f0")


        # Sample sentences for the typing test

        self.sentences = [

            "The quick brown fox jumps over the lazy dog.",

            "A journey of a thousand miles begins with a single step.",

            "To be or not to be, that is the question.",

            "All that glitters is not gold.",

            "Practice makes perfect."

        ]

        self.test_sentence = random.choice(self.sentences)

        self.start_time = None

        self.time_limit = 60  # 1-minute typing test


        # Header

        self.header_frame = tk.Frame(root, bg="#4CAF50")

        self.header_frame.pack(fill="x")

        self.header_label = tk.Label(self.header_frame, text="Typing Speed Test", font=("Helvetica", 24, "bold"), bg="#4CAF50", fg="white")

        self.header_label.pack(pady=10)


        # Instruction Label

        self.instruction_label = tk.Label(root, text="Type the following sentence as quickly and accurately as you can:", font=("Helvetica", 14), bg="#f0f0f0")

        self.instruction_label.pack(pady=20)


        # Sentence Label

        self.sentence_frame = tk.Frame(root, bg="#ffffff", padx=10, pady=10, relief="groove", bd=2)

        self.sentence_frame.pack(pady=10)

        self.sentence_label = tk.Label(self.sentence_frame, text=self.test_sentence, font=("Helvetica", 14), bg="#ffffff", wraplength=600, justify="center")

        self.sentence_label.pack()


        # Timer Label

        self.timer_label = tk.Label(root, text=f"Time Remaining: {self.time_limit} seconds", font=("Helvetica", 14), bg="#f0f0f0", fg="#FF5733")

        self.timer_label.pack(pady=10)


        # Textbox

        self.textbox = tk.Text(root, height=3, font=("Helvetica", 14), wrap="word", padx=10, pady=10, relief="groove", bd=2)

        self.textbox.pack(pady=20, padx=20)


        # Submit Button

        self.submit_button = tk.Button(root, text="Submit", command=self.calculate_speed, font=("Helvetica", 14), bg="#4CAF50", fg="white", activebackground="#45a049")

        self.submit_button.pack(pady=20)


        # Result Label

        self.result_label = tk.Label(root, text="", font=("Helvetica", 14), bg="#f0f0f0")

        self.result_label.pack(pady=10)


        # Start timing when user starts typing

        self.textbox.bind("<FocusIn>", self.start_timer)

        self.textbox.bind("<KeyPress>", self.update_timer)


    def start_timer(self, event):

        if self.start_time is None:

            self.start_time = time.time()

            self.update_timer()


    def update_timer(self, event=None):

        if self.start_time is not None:

            elapsed_time = time.time() - self.start_time

            remaining_time = max(0, self.time_limit - int(elapsed_time))

            self.timer_label.config(text=f"Time Remaining: {remaining_time} seconds")

            if remaining_time > 0:

                self.root.after(1000, self.update_timer)

            else:

                self.calculate_speed()


    def calculate_speed(self):

        if self.start_time is None:

            return


        end_time = time.time()

        elapsed_time = end_time - self.start_time

        elapsed_time_minutes = elapsed_time / 60


        user_input = self.textbox.get("1.0", tk.END).strip()

        word_count = len(self.test_sentence.split())

        typing_speed = word_count / elapsed_time_minutes


        correct_chars = sum(1 for a, b in zip(self.test_sentence, user_input) if a == b)

        accuracy = (correct_chars / len(self.test_sentence)) * 100


        extra_chars = len(user_input) - len(self.test_sentence)

        accuracy_penalty = max(0, extra_chars * 0.5)

        final_accuracy = max(0, accuracy - accuracy_penalty)


        result_text = (

            f"Time taken: {elapsed_time:.2f} seconds\n"

            f"Your typing speed is: {typing_speed:.2f} WPM\n"

            f"Accuracy: {final_accuracy:.2f}%\n"

            f"Original Accuracy: {accuracy:.2f}%\n"

            f"Accuracy Penalty for Extra Characters: {accuracy_penalty:.2f}%"

        )

        self.result_label.config(text=result_text)


        # Reset the timer for the next test

        self.start_time = None

        self.textbox.delete("1.0", tk.END)

        self.test_sentence = random.choice(self.sentences)

        self.sentence_label.config(text=self.test_sentence)

        self.timer_label.config(text=f"Time Remaining: {self.time_limit} seconds")


        # Show a message box with the result

        messagebox.showinfo("Result", result_text)


if name == "main":

    root = tk.Tk()

    app = TypingSpeedTest(root)

    root.mainloop()