我正在编写一个简单的游戏,其中“计算”时间为'单击按钮,它将执行必要的计算并向用户显示消息框。然后用户可以继续播放。但是,跟踪用户所用资金的变量“开始”并不会在每次单击按钮时更新,而是使用起始值1000.如何更新?谢谢!
starting = 1000
#calculation procedure
def calculate(starting):
dice1 = random.randrange(1,7)
get_bet_entry=float(bet_entry.get())
get_roll_entry = float(roll_entry.get())
if dice1 == get_roll_entry:
starting = starting + get_bet_entry
messagebox.showinfo("Answer","You won! Your new total is $" + str(starting))
return(starting)
else:
starting = starting - get_bet_entry
messagebox.showinfo("Answer","You are wrong, the number was " + str(dice1) + '. You have $' + str(starting))
return(starting)
#designing bet button
B2 = Button(root,text = "Bet", padx=50, command = lambda: calculate(starting))
答案 0 :(得分:1)
您可以在计算函数中声明作为全局变量启动,以便在全局范围内更新。 如果你想避免全局变量,你也可以使“开始”成为可变对象的一部分。
答案 1 :(得分:0)
你不应该从按钮的回调中返回一个值,因为它没有要返回的变量。
您可以使用global
更新方法中的变量,也可以使用IntVar()
。我建议使用IntVar()
。
starting = IntVar(root)
starting.set(1000)
def calculate():
#calculations
starting.set(calculation_result)
messagebox.showinfo("Answer","You won! Your new total is $" + str(starting.get()))
B2 = Button(......, command = calculate)
如果你真的想使用全球,
starting = 1000
def calculate():
global starting
#calculations
starting = calculation_result
B2 = Button(......, command = calculate)
请注意,在这两种方法中,您都不需要将starting
作为参数传递给您的方法。