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随机化并显示它,但实际发生的事情绝对没有。我该如何解决这个问题?非常感谢任何帮助。
答案 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
是一个非常糟糕的主意,它真正破坏了它之前的值,即你所处的功能。这将使第一次调用后函数无法访问。使用其他变量名称。