【问题标题】:TypeError: unorderable types: int() > Guessing_game()TypeError:不可排序的类型:int() > Guessing_game()
【发布时间】:2016-12-31 01:11:45
【问题描述】:

我正在研究python并尝试制作一个与GUI连接的猜数程序。 但是,有错误,我不知道如何修复,所以请帮助我。

我的代码是

from tkinter import*
import random

class Application(Frame):

    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.widgets()
        self.answer = Guessing_game(starting_number = 0,
                                    ending_number = 100)

    def widgets(self):

        Label(self,
              text = "Hello welcome to new_version of the Guess My Number!"
              ).grid(row = 0, column = 0, sticky = W)

        Label(self,
              text = "Guess the number(0-100):"
              ).grid(row = 1, column = 0, sticky = W)

        self.user_answer = Entry(self)
        self.user_answer.grid(row = 1, column = 1, sticky = W)

        Button(self,
               text = "submit",
               command = self.submit
               ).grid(row = 3, column = 0, sticky = W)

        self.txt = Text(self, width = 50, height = 20, wrap = WORD)
        self.txt.grid(row = 4, column = 0, columnspan = 4, sticky = W)

    def submit(self):

        user_answer = self.user_answer.get()    

        if user_answer != None:
           int(user_answer) 
        if int(user_answer) not in range(101):
            self.txt.delete(0.0, END)
            self.txt.insert(0.0, "Your guess is not in proper range")
        elif int(user_answer) > self.answer:
            self.txt.delete(0.0, END)
            self.txt.insert(0.0, "Your guess is higher than the answer")
        elif int(user_answer) < self.answer:
            self.txt.delete(0.0, END)
            self.txt.insert(0.0, "Your guess is lower than the answer")
        else:
            self.txt.delete(0.0, END)
            self.txt.insert(0.0, "Your guess is right! the number is", self.answer)

class Guessing_game(object):
    def __init__(self, starting_number, ending_number):
        self.answer = random.randint(starting_number,ending_number)

    def __str__(self):
        return self.answer
#main
root = Tk()
app = Application(root)
root.mainloop()

错误是

Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):
调用中的文件“C:\Python31\lib\tkinter__init__.py”,第 1399 行 return self.func(*args) File "D:/Python/practice/Guess_My_Number(GUI).py", line 43, in submit elif int(user_answer) > self.answer: TypeError: unorderable types: int() > Guessing_game()

如何将 Guessing game() 对象转换为 int(),以便比较 对象和int?

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    它准确地告诉您错误是什么,您正在将对象与整数进行比较。相反,您应该引用对象内的变量

    if int(user_answer) > self.answer.answer:
        ...
    

    可能需要考虑修复此名称。或者考虑一下您是否甚至需要将其作为一堂课。此外,您的 __str__ 方法不正确,返回值必须是字符串,而您尝试返回整数(如果您尝试 print(Guessing_game(0, 100)),则可以看到这一点

    以下内容也不完全符合您的想法

    if user_answer != None:
        int(user_answer)
    

    user_answer 将始终是一个字符串,因为您从 Entry 小部件获取值。

    你可能想要

    # Check if the string is a number
    if not user_answer.isdigit():
        # Some error message
        return # prevent trying anything else
    

    您还需要重新分配 int(user_answer) 的结果,因为它不会修改您的变量,它基本上什么都不做(除非遇到错误)

    user_answer = int(user_answer)
    

    【讨论】:

    • 谢谢史蒂文。感谢您的支持,我可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2016-12-18
    相关资源
    最近更新 更多