这应该是一个猜谜游戏。如果用户提交的数字高于预设值(即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()
答案 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()
所以现在它会传入值,然后比较而不是使用typed
。 lambda: number(num)
只允许在命令参数中传递参数。这是关于lambdas的docs链接。没有lambdas,here's一个没有函数参数的hastebin。