Тест з хімії на тему "Кристалічні та аморфні речовини" (згенеровано Gemini)

 import tkinter as tk

from tkinter import messagebox


class ChemistryQuiz:

    def __init__(self, root):

        self.root = root

        self.root.title("Тест з хімії: Кристалічні та аморфні речовини")

        self.root.geometry("600x400")


        # Дані тесту: запитання, варіанти та індекс правильної відповіді

        self.questions = [

            {

                "question": "1. Яка основна особливість будови кристалічних речовин?",

                "options": ["Хаотичне розташування частинок", "Чітка геометрична структура (решітка)", "Відсутність певної температури плавлення"],

                "answer": 1

            },

            {

                "question": "2. Оберіть приклад аморфної речовини:",

                "options": ["Кухонна сіль", "Алмаз", "Скло"],

                "answer": 2

            },

            {

                "question": "3. Як змінюється температура аморфних речовин під час плавлення?",

                "options": ["Залишається сталою", "Поступово зростає в певному інтервалі", "Миттєво падає"],

                "answer": 1

            },

            {

                "question": "4. Яка речовина має атомну кристалічну решітку?",

                "options": ["Графіт", "Вода (лід)", "Кисень"],

                "answer": 0

            },

            {

                "question": "5. Анізотропія (залежність властивостей від напрямку) характерна для:",

                "options": ["Аморфних речовин", "Рідин", "Монокристалів"],

                "answer": 2

            }

        ]


        self.current_question = 0

        self.score = 0

        self.user_answers = [None] * len(self.questions)


        self.setup_ui()


    def setup_ui(self):

        # Мітка запитання

        self.question_label = tk.Label(self.root, text="", font=("Arial", 12, "bold"), wraplength=500, justify="left")

        self.question_label.pack(pady=20)


        # Варіанти відповідей (Radiobuttons)

        self.var = tk.IntVar(value=-1)

        self.option_buttons = []

        for i in range(3):

            rb = tk.Radiobutton(self.root, text="", variable=self.var, value=i, font=("Arial", 11), anchor="w")

            rb.pack(fill="x", padx=50, pady=5)

            self.option_buttons.append(rb)


        # Кнопка підтвердження

        self.next_button = tk.Button(self.root, text="Наступне питання", command=self.next_question, bg="#4CAF50", fg="white")

        self.next_button.pack(pady=30)


        self.display_question()


    def display_question(self):

        # Очищення вибору та оновлення тексту

        q_data = self.questions[self.current_question]

        self.question_label.config(text=q_data["question"])

        for i in range(3):

            self.option_buttons[i].config(text=q_data["options"][i])

        self.var.set(-1)


        # Якщо це останнє питання, змінюємо текст кнопки

        if self.current_question == len(self.questions) - 1:

            self.next_button.config(text="Завершити тест")


    def next_question(self):

        selected = self.var.get()

        

        if selected == -1:

            messagebox.showwarning("Увага", "Будь ласка, оберіть варіант відповіді!")

            return


        # Перевірка відповіді

        if selected == self.questions[self.current_question]["answer"]:

            self.score += 1


        self.current_question += 1


        if self.current_question < len(self.questions):

            self.display_question()

        else:

            self.show_result()


    def show_result(self):

        result_text = f"Ви відповіли правильно на {self.score} з {len(self.questions)} запитань."

        messagebox.showinfo("Результат", result_text)

        self.root.destroy()


if __name__ == "__main__":

    root = tk.Tk()

    app = ChemistryQuiz(root)

    root.mainloop()

Немає коментарів:

Дописати коментар

Тиждень безпечного Інтернету 2026

 Цього року важко зібрати всіх в Інтернеті разом. Для цього потрібно багато складових - світло, підключення до Інтернету, робочі гаджети. І ...