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

时间:2017-10-12 19:09:52

标签: python button tkinter dice

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随机化并显示它,但实际发生的事情绝对没有。我该如何解决这个问题?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果您发布的内容是您的全部代码,则不太可能写入任何内容,因为您只包含绿色骰子滚动“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”功能时,您可以访问该数据。

答案 1 :(得分:0)

如果你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是一个非常糟糕的主意,它真正破坏了它之前的值,即你所处的功能。这将使第一次调用后函数无法访问。使用其他变量名称。