Python 随机数生成器无法正常工作

Python random number generator not working properly

outcomeG = "0"
outcomeB = "0"

def roll(outcomeG, outcomeB):

    outcomeG = random.randint(1, 6)
    outcomeB = random.randint(1, 5)
    return outcomeG, outcomeB

def goodDiceRoll():

    goodDiceOptions.destroy()

    global goodDiceRoll
    goodDiceRoll = tkinter.Tk()
    goodDiceRoll.title("Green Dice roll")

    lbloutcome = tkinter.Label(goodDiceRoll, text="Press roll")
    btnRollG = tkinter.Button(goodDiceRoll, text="Roll", command=roll(outcomeG, outcomeB))

    if outcomeG == "1":
        lbloutcome.config(text="Green 1")
        goodDiceRoll.update()
        f = open("Logs.txt", "a")
        ts = time.time()
        sttime = datetime.datetime.fromtimestamp(ts).strftime('%Y%m%d_%H:%M:%S - ')
        f.write(sttime + "Green 1")
        f.close()

    elif outcomeG == "2":
        lbloutcome.config(text="Green 2")
        goodDiceRoll.update()
        f = open("Logs.txt", "a")
        ts = time.time()
        sttime = datetime.datetime.fromtimestamp(ts).strftime('%Y%m%d_%H:%M:%S - ')
        f.write(sttime + "Green 2")
        f.close()
        #rest of code

这是我的一些代码,假设让您掷绿色骰子或红色骰子,然后将其放入文件中。 然而,当我按下我制作的滚动按钮时,假设随机选择一个从 1 到 6 的数字并显示它,但实际发生的事情绝对没有。我该如何解决这个问题? 我们将不胜感激任何帮助。

如果您发布的是您的全部代码,那么不太可能会写任何东西,因为您只包括绿色骰子掷出“1”或“2”的情况。与其使用 if 语句来处理不同的滚动情况,不如这样做:

    f = open("Logs.txt", "a")
    ts = time.time()
    sttime = datetime.datetime.fromtimestamp(ts).strftime('%Y%m%d_%H:%M:%S - ')
    f.write(sttime + "Green " + outcomeG + ",\n")
    f.write(sttime + "Blue " + outcomeB + "\n")
    f.close()

此外,您还需要确保在调用 'roll' 函数时,您可以访问该数据。

如果你这样做 roll(outcomeG, outcomeB) 那么不要指望这两个全局变量会改变。它们将保持为 0。这是因为 roll 中的(参数)变量是该函数的局部变量。对这些变量所做的任何赋值都不会影响传递给函数的变量。

如果您随后调用 goodDiceRoll(),将不会输入 if 块,因为这些变量的值仍然为 0,因此没有任何内容写入文件。

您可以通过以下方式解决此问题:

outcomeG, outcomeB = roll()

... 并从 roll 定义中删除参数。

但是,因为您没有那样调用 roll,而是通过以下方式传递对它的引用:

btnRollG = tkinter.Button(goodDiceRoll, text="Roll", command=roll)

...您被迫使用全局变量。所以像这样修改roll

def roll():
    global outcomeG, outcomeB  
    outcomeG = random.randint(1, 6)
    outcomeB = random.randint(1, 5)

确保goodDiceRoll中定义它们。

其次,分配给 goodDiceRoll 是一个非常糟糕的主意,这实际上会破坏它之前的值,即您所在的函数。这将使函数在第一次调用后无法访问。使用不同的变量名称。