Python 随机模块不会多次随机化

Python random module doesn't randomize more than once

在此代码中有两个随机数生成器。一个在第一行,另一个在函数 btn_yes.

两个 RNG 都工作正常,函数 btn_yes 中生成器之后的 print(nb) 显示了一个随机数。

然而,当 btn_pressbtn_yes 被激活后被激活时(就像它在程序中应该的那样),nb 的值不会改变,无论我多久改变一次执行btn_yesbtn_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()printing nb 来查看;你应该看到它每次都有不同的值(并且与全局 nb 的值不同)。

在这种情况下,如果将global nb作为btn_yes()中的第一行,应该会达到预期的效果。

using global variables in a function