在此代码中有两个随机数生成器。一个在第一行,另一个在函数btn_yes
.
两个RNG的工作都很好,btn_yes
函数中生成器后的print(nb)
直接显示一个随机数。
然而,当btn_yes
被激活后,btn_press
被激活时(就像在程序中一样),无论我执行btn_yes
多少次,nb
的值都不会改变。btn_press
只是使用第一个RNG生成的相同的数字。
我错过了什么?
nb = random.randrange(0, 11)
def btn_press():
guess = int(entry.get())
print(guess)
if guess < nb:
answ["text"] = "Higher!"
elif guess > nb:
answ["text"] = "Lower!"
elif guess == nb:
answ["text"] = "Correct!"
btn2["bg"] = "#FF6C6C"
btn3["bg"] = "#32FF00"
def btn_no():
window.destroy()
def btn_yes():
answ["text"] = "Next Round! Type in a new number!"
btn2["bg"] = "#464646"
btn3["bg"] = "#464646"
nb = random.randrange(0, 11)
entry.delete(0, tk.END)
print(nb)
这里的问题是,当您在函数中更改全局变量时,您需要将global <variablename>
作为函数中的第一行。否则,Python会假定您打算创建一个新变量,并且仅在函数的作用域内,而全局变量保持不变。
你可以通过函数btn_yes()
中的print
和nb
来看到这一点;您应该看到它每次都有不同的值(并且与全局nb
的值不同)。
在这种情况下,如果你把global nb
作为btn_yes()
的第一行,它应该有预期的效果。
参见在函数中使用全局变量