如何在def中声明变量,然后从python中的按钮调用它

如何在def中声明变量,然后从python中的按钮调用它,python,function,Python,Function,它说die1还没有定义。如何更改它以定义它。我试过这么做 def roll(): die1 = random.randint(1,6) die2 = random.randint(1,6) A = tkinter.Button(top, text ="Roll!", command = roll) A.pack() if die1 == die2: print(die1) 但如果重复,数字不会改变。实现这一点的一个非常简单的方法是: die1

它说die1还没有定义。如何更改它以定义它。我试过这么做

def roll():
    die1 = random.randint(1,6)
    die2 = random.randint(1,6)

A = tkinter.Button(top, text ="Roll!", command = roll)

A.pack()

if die1 == die2:
    print(die1)

但如果重复,数字不会改变。实现这一点的一个非常简单的方法是:

die1 = random.randint(1,6)

die2 = random.randint(1,6)

def roll():
    die1 = random.randint(1,6)

    die2 = random.randint(1,6)

A = tkinter.Button(top, text ="Roll!", command = roll)

A.pack()

if die1 == die2:
    print(die1)
但我建议您创建一个超级简单的类,以便将值存储在该类中:

die1 = [random.randint(1, 6)]
die2 = [random.randint(1, 6)]
 
def roll():
    die1[0] = random.randint(1, 6)
    die2[0] = random.randint(1, 6)

您甚至可以删除init函数,但您必须在最后一个if语句之前调用game.roll(),否则这些实例变量将不存在。

die1
die2
是局部变量-它们根本不存在于
roll()
函数之外。但这并不是这里的根本问题:在创建按钮后立即尝试比较这两个值,绝对不可能调用
roll()
,因此您没有要比较的值。任何需要滚动值的操作都应该从内部
roll()
-直接在该函数中执行,或者在它调用的其他函数中执行(在这种情况下,可以将两个值作为参数传递给该函数)。
import random

class Game():
    def__init__(self):
        self.die1 = random.randint(1,6)
        self.die2 = random.randint(1,6)

    def roll(self):
        self.die1 = random.randint(1,6)
        self.die2 = random.randint(1,6)


game = Game()

A = tkinter.Button(top, text ="Roll!", command = game.roll)

A.pack()

if game.die1 == game.die2:
    print(game.die1)