简单猜猜游戏无效

时间:2016-09-10 17:06:40

标签: python-3.x if-statement tkinter

这应该是一个猜谜游戏。如果用户提交的数字高于预设值(即10),则会说低一些。如果用户提交较低的数字,则会说更高。我面临的问题是,它只告诉我每输入一个整数甚至字符串都会更高。任何线索可能是什么问题?

另外,我把10变成字符串的原因是因为如果它是一个整数就会给我一个错误。

from tkinter import *

# Simple guessing game
window = Tk()

def number():
    if typed == key:
        print("This is the correct key")
    elif typed > key:
        print("Go lower!")
    else:
        print("Go higher!")

e = Entry(window)
e.pack()

key = str(10)
typed = e.get()

b = Button(window, text="Submit", command=number)
b.pack()

window.mainloop()

1 个答案:

答案 0 :(得分:0)

您需要更新每次提交和检查的值,否则它将保持不变。它不起作用的原因是因为您在程序启动时将typed分配给e.get(),这是一个空字符串。您需要在每次点击时更新它,或将typed放在函数内。

您还需要将key设为整数,并将条目值转换为整数,否则您需要按字典顺序比较字符串。此外,如果用户未输入整数,您可以添加try / except来处理,如下所示。

我会亲自将条目的值传递给函数,然后单击使用lambda来处理检查:

from tkinter import *

# Simple guessing game
window = Tk()

def number(num): # Passing in string instead of using typed
    try:
        intNum = int(num) # Here we convert num to integer for comparison
        if intNum == key:
            print("This is the correct key")
        elif intNum > key:
            print("Go lower!")
        else:
            print("Go higher!")
    except ValueError: # If user doesn't enter a convertable integer, then print "Not an integer!"
        print("Not an integer!")

e = Entry(window)
e.pack()

key = 10 # Key is an integer here!

b = Button(window, text="Submit", command=lambda: number(e.get())) # Here's a lambda where we pass in e.get() to check
b.pack()

window.mainloop()

所以现在它会传入值,然后比较而不是使用typedlambda: number(num)只允许在命令参数中传递参数。这是关于lambdas的docs链接。没有lambdas,here's一个没有函数参数的hastebin。