Как объявить переменную в def, а затем вызвать ее с кнопки в python

#python #function

#python #функция

Вопрос:

 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 = 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)
  

но цифры не меняются, если они повторяются

Комментарии:

1. die1 и die2 являются локальными переменными — они просто не существуют вне roll() функции. Но это не основная проблема здесь: вы пытаетесь сравнить эти два значения сразу после создания кнопки, нет абсолютно никакой возможности, которая roll() еще не была вызвана, и поэтому у вас нет значений для сравнения. Все, что требует свернутых значений, должно выполняться изнутри roll() — либо непосредственно в этой функции, либо в какой-либо другой функции, которую она вызывает (в этом случае вы можете передать два значения этой функции в качестве параметров).

Ответ №1:

Очень простой способ добиться этого был бы:

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

Но я рекомендую вам просто создать супер простой класс, чтобы ваши значения хранились внутри этого класса:

 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)
  

Вы могли бы даже удалить эту функцию инициализации, но вам пришлось бы вызывать game.roll() перед этим последним оператором if, иначе эти переменные экземпляра не будут существовать.