输入正确的答案会产生错误的输出。我该如何解决?

时间:2018-05-06 10:34:25

标签: python python-3.x class user-interface tkinter

我正在尝试制作一款用户需要回答数学问题以击败怪物的游戏。我还没有为此添加代码,但我当前的问题是,当我输入正确的数学问题答案时,它说它错了。虽然它们都是整数,但它仍然不对。

我刚编辑了代码,以便对其进行测试。

from tkinter import *
import tkinter as tk
import random   


class Easy(tk.Frame):
     def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        def question(self):
            self.listAnswer = []
            self.listUserAnswer = []
            intOne = random.randrange(1,10)
            intTwo = random.randrange(1,10)
            self.listAnswer.append(intOne + intTwo)
            self.strQuestion = "{} + {}".format(intOne, intTwo)

这就是输入的答案不正确的地方。

        def attack(self):
            self.intUserAnswer = self.a_entry.get()
            self.listUserAnswer.append(self.intUserAnswer)
            if self.listUserAnswer[self.i] == self.listAnswer[self.i]:
                print("yes")
                self.i += 1
            else:
                print("no")
                print(self.listUserAnswer[self.i])
                print(self.listAnswer[self.i])

        def func():
            attack(self)
            self.a_entry.delete(0,END)

        def game(self):
            self.i = 0
            question(self)
            q_label = Label(self, text=self.strQuestion)
            q_label.place(relx=0.5, rely=0.70, anchor='center')

            self.a_entry = Entry(self, width=5, font=("Helvetica", 20, "bold"))
            self.a_entry.place(relx=0.5, rely=0.80, anchor='center')

            attack_button = Button(self, bg="blue", text="ATTACK!", command=func)
            attack_button.place(relx=0.5, rely=0.90, anchor='center')

        game(self)            

root = tk.Tk()
Easy(root).pack(side="top", fill="both", expand=True)
root.title("Battle Maths")
root.geometry("400x250")
root.resizable(0,0)
root.mainloop()

1 个答案:

答案 0 :(得分:0)

这是一个常见问题,但其解决方案非常简单。问题出在你的attack()函数中。正是在这里:self.intUserAnswer = self.a_entry.get()。此时,您错误地假设您从tkinter.Entry()窗口小部件中获取了用户输入,该窗口小部件名为self.a_entry。实际上,你在attack()函数中获得的所有内容都是无。

您的代码不完整,理想情况下您应该提供MCVE以便我们为您提供精确的解决方案,但是如果没有它我相信您可以将回调方法与事件相关联(按钮按下,最有可能)谢谢您可以在self.a_entry窗口小部件中检索用户键入的值,然后将其转发到attack()功能。