【问题标题】:Two integer values of same value when compared says they're not equal比较时具有相同值的两个整数值表示它们不相等
【发布时间】:2022-01-03 08:36:50
【问题描述】:

我最近学习了一点 Python。我试图在框架小部件上做一个猜数字游戏。按下随机数按钮以生成随机数。然后 Enter 按钮从输入框中获取输入并与生成的随机数进行比较。为了测试它,程序会显示一个显示生成的随机数的标签。当我输入与生成的数字相同的数字时,它说它不相等。唯一一次说它相等是当我输入 0(零)时。我也有一些行告诉我这些值是什么类型,只是为了确保我比较的是相同的类型。

from random import randint
from tkinter import *

root = Tk()
root.title('Guess Number Final')
root.geometry('500x500')



directionFrame = Frame(root, width = 200, height = 200, highlightbackground = 'red', 
highlightthickness = 3)
directionFrame.grid(row = 0, column = 0, padx = 20, pady = 20, ipadx = 20, ipady = 20)

randomNum = IntVar()
newguessInt = IntVar()

def randomize():

     randomNum = randint(0,10)
     randomStr.set(randomNum)


def enterGuess():

    newguessInt = int(number_input.get())

    newRandom = randomNum.get()

    if (newguessInt == newRandom):

        guess_var.set('Your guess is right.')

    else:

         guess_var.set('Your guess is wrong.')


    guess_str.set(type(newguessInt))
    random_str.set(type(newRandom))

##### Random Button #####

randomBtn = Button(directionFrame, text = 'Random Number', command = randomize)
randomBtn.pack()


##### Random Variable #####

randomStr = StringVar()
randomStr.set('Number')

##### Guess Variable #####

guess_var = StringVar()
guess_var.set('Your guess is...')


##### typeGuessVariable #####

guess_str = StringVar()
guess_str.set('Type')

##### randomNumVariable #####

random_str = StringVar()
random_str.set('Type')


##### Random Label #####

randomLbl = Label(directionFrame, textvariable = randomStr)
randomLbl.pack()


##### Number Entry Box #####

number_input = Entry(directionFrame)
number_input.pack()

##### Enter Button #####

enterBtn = Button(directionFrame, text = 'Enter Guess', command = enterGuess)
enterBtn.pack()

##### Your Guess Label #####

yourGuessLbl = Label(directionFrame, textvariable = guess_var)
yourGuessLbl.pack()


##### GuessInt Label ######

guessIntLbl = Label(directionFrame, textvariable = guess_str)
guessIntLbl.pack()

##### Random Label ######
randomNumLbl = Label(directionFrame, textvariable = random_str)
randomNumLbl.pack()

mainloop()

【问题讨论】:

  • 你为什么用set开头? set 是一个单独的数据类型。只需使用等号分配,即a = b
  • randomNum(全局IntVar,而不是randomize()中的本地)永远不会改变,也不会附加到任何小部件,因此它继续具有默认值0。跨度>
  • @LarrytheLlama 这是一种设置持有值 afaik 的方法。
  • 你应该简化你的代码,只使用一组 tkinter 变量而不是多组,以减少使用错误变量进行比较的错误。

标签: python python-3.x tkinter tkinter-entry


【解决方案1】:

您声明了许多 tkinter 变量,这些变量使您混淆使用错误的变量进行比较。

实际上只使用两个 tkinter 变量就足够了:

  • randomNum 用于随机生成的数字
  • guessNum为用户猜测号码
from random import randint
from tkinter import *


root = Tk()
root.title('Guess Number Final')
root.geometry('500x500')

directionFrame = Frame(root, width=200, height=200, highlightbackground='red', highlightthickness=3)
directionFrame.grid(row=0, column=0, padx=20, pady=20, ipadx=20, ipady=20)

randomNum = StringVar(value='Number')
guessNum = StringVar(value='')


def randomize():
    randomNum.set(randint(0,10))


def enterGuess():
    ok = randomNum.get() == guessNum.get().strip()
    resultLabel['text'] = f'Your guess is {"right" if ok else "wrong"}.'


##### Random Button #####

randomBtn = Button(directionFrame, text='Random Number', command=randomize)
randomBtn.pack()

##### Random Label #####

randomLbl = Label(directionFrame, textvariable=randomNum)
randomLbl.pack()

##### Number Entry Box #####

number_input = Entry(directionFrame, textvariable=guessNum)
number_input.pack()

##### Enter Button #####

enterBtn = Button(directionFrame, text='Enter Guess', command=enterGuess)
enterBtn.pack()

##### Result Label #####
resultLabel = Label(directionFrame, text='Your guess is ...')
resultLabel.pack()

mainloop()

【讨论】:

    【解决方案2】:

    这一行:

    randomNum = randint(0,10)
    

    创建一个新的局部变量 randomNum 并将其分配给常规 Python int 值。外部作用域中的原始randomNum 仍然是默认的IntVar,其值为零。我认为你想做的是:

    randomNum.set(randint(0, 10))
    

    即将您创建的IntVar 设置为指向一个新的随机整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多