Python

Python помощь в исправлении ошибок, очень нужна помощь!

  
import random
import tkinter as tk

class Trainer:
def __init__(self):
self.score = 0
self.tasks = ["Задача 1", "Задача 2", "Задача 3", "Задача 4", "Задача 5"]
self.task_description = {
"Задача 1": "Напишите программу, которая выводит на экран 'Hello, world!'",
"Задача 2": "Напишите программу, которая считает сумму двух чисел",
"Задача 3": "Напишите программу, которая находит среднее арифметическое двух чисел",
"Задача 4": "Напишите программу, которая находит площадь прямоугольника",
"Задача 5": "Напишите программу, которая находит корни квадратного уравнения"
}
self.task_solutions = {
"Задача 1": "print('Hello, world!')",
"Задача 2": "print(a + b)",
"Задача 3": "print((a + b) / 2)",
"Задача 4": "print(a * b)",
"Задача 5": "import math\nprint('x1 =', x1)\nprint('x2 =', x2)"
}

def run(self):
# Создание графического интерфейса
root = tk.Tk()
root.title("Тренажер")
root.geometry("400x300")

# Создание виджетов
task_label = tk.Label(root, text="Задача:")
task_description_label = tk.Label(root, text="")
solution_label = tk.Label(root, text="Решение:")
solution_entry = tk.Entry(root)
score_label = tk.Label(root, text="Счет: 0")
next_button = tk.Button(root, text="Следующая задача", command=self.next_task)
quit_button = tk.Button(root, text="Завершить тренировку", command=root.quit)

# Размещение виджетов на форме
task_label.pack()
task_description_label.pack()
solution_label.pack()
solution_entry.pack()
score_label.pack()
next_button.pack()
quit_button.pack()

# Запуск главного цикла
self.root = root
self.next_task()
root.mainloop()

def next_task(self):
# Выбор случайной задачи
self.current_task = random.choice(self.tasks)

# Обновление описания задачи на форме
self.task_description_label.config(text=self.task_description[self.current_task])

# Очистка поля ввода решения
self.solution_entry.delete(0, tk.END)

def check_solution(self):
# Получение решения задачи из поля ввода
solution = self.solution_entry.get()

# Проверка решения задачи
if solution == self.task_solutions[self.current_task]:
self.score += 1
self.score_label.config(text="Счет: {}".format(self.score))
tk.messagebox.showinfo("Результат", "Верно!")
else:
tk.messagebox.showerror("Результат", "Неверно!")

def quit(self):
self.root.quit()

trainer = Trainer()
trainer.run()
Alex Almikeev
Alex Almikeev
162
Здравствуйте!
Вот, изменил немного:
 import random  
import tkinter as tk

class Trainer:
def __init__(self):
self.score = 0
self.tasks = ["Задача 1", "Задача 2", "Задача 3", "Задача 4", "Задача 5"]
self.task_description = {
"Задача 1": "Напишите программу, которая выводит на экран 'Hello, world!'",
"Задача 2": "Напишите программу, которая считает сумму двух чисел",
"Задача 3": "Напишите программу, которая находит среднее арифметическое двух чисел",
"Задача 4": "Напишите программу, которая находит площадь прямоугольника",
"Задача 5": "Напишите программу, которая находит корни квадратного уравнения"
}
self.task_solutions = {
"Задача 1": "print('Hello, world!')",
"Задача 2": "print(a + b)",
"Задача 3": "print((a + b) / 2)",
"Задача 4": "print(a * b)",
"Задача 5": "import math\nprint('x1 =', x1)\nprint('x2 =', x2)"
}

def run(self):
# Создание графического интерфейса
root = tk.Tk()
root.title("Тренажер")
root.geometry("400x300")

# Создание виджетов
task_label = tk.Label(root, text="Задача:")
task_description_label = tk.Label(root, text="")
solution_label = tk.Label(root, text="Решение:")
solution_entry = tk.Entry(root)
score_label = tk.Label(root, text="Счет: 0")
next_button = tk.Button(root, text="Следующая задача", command=self.next_task)
quit_button = tk.Button(root, text="Завершить тренировку", command=root.quit)

# Размещение виджетов на форме
task_label.pack()
task_description_label.pack()


# +++ Добавил поля в self
self.task_description_label = task_description_label
self.solution_entry = solution_entry
# ---


solution_label.pack()
solution_entry.pack()
score_label.pack()
next_button.pack()
quit_button.pack()

# Запуск главного цикла
self.root = root
self.next_task()
root.mainloop()

def next_task(self):
# Выбор случайной задачи
self.current_task = random.choice(self.tasks)

# Обновление описания задачи на форме
self.task_description_label.config(text=self.task_description[self.current_task])

# Очистка поля ввода решения
self.solution_entry.delete(0, tk.END)

def check_solution(self):
# Получение решения задачи из поля ввода
solution = self.solution_entry.get()

# Проверка решения задачи
if solution == self.task_solutions[self.current_task]:
self.score += 1
self.score_label.config(text="Счет: {}".format(self.score))
tk.messagebox.showinfo("Результат", "Верно!")
else:
tk.messagebox.showerror("Результат", "Неверно!")

def quit(self):
self.root.quit()

trainer = Trainer()
trainer.run()
Елдар Нургали
Елдар Нургали
11 615
Лучший ответ
В коде содержится несколько ошибок, я помогу их исправить:

Ошибка в методе next_task. Убедитесь, что вы добавили аргумент self к task_description_label и solution_entry, чтобы можно было получить доступ к ним в других методах.

Ошибка в методе check_solution. Вместо tk.messagebox.showinfo и tk.messagebox.showerror нужно использовать tk.messagebox.showinfo и tk.messagebox.showerror.

Ошибка в методе quit. Вы используете self.root.quit(), но не определяете self.root. Вместо этого можно использовать self.root.destroy(), чтобы закрыть главное окно.
Он тебе пишет:

Объект Trainer не содержит task_description_label
Denis Eazzy
Denis Eazzy
315