Оператор If вызывается из функции и не выполняется

#python

#python

Вопрос:

Я вызываю оператор if, и условие выполнено. Я пытаюсь заставить оператор if обновить изображение, однако это не работает, и я не уверен, почему.

 attempts = 0

if attempts == 0:
    Hangman = ImageTk.PhotoImage(Image.open("Images/Hangman0.png"))
    Hangman = Label(image= Hangman)
    Hangman.grid(row=0, column=0)
elif attempts == 1:
    Hangman = ImageTk.PhotoImage(Image.open("Images/Hangman1.png"))
    Hangman = Label(image= Hangman)
    Hangman.grid(row=0, column=0)

def button_click(letter):
    if letter not in word:
        global attempts
        print("Not in word")
        guessed_letters.add(letter)
        #Add to letters guess
        attempts = attempts 1
        print(attempts)

a = Button(window, text= "a", padx= 10, pady=10, bg= "black", fg= "white", font= ("none", 15), borderwidth=0, command =lambda: button_click("a"))
a.grid(row= 3, column=1)
  

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

1. Вы не можете «вызвать» if оператор. Этот код находится вверху внутри функции? Если нет, то он будет выполняться только один раз в самом начале.

2. Извините, поскольку при вызове я имел в виду, что попытки должны обновляться из функции button_click, которая затем вызовет оператор if, нет, код вверху не находится внутри функции. Как бы я мог убедиться, что попытки продолжают обновляться, вызывая изменение изображения?

3. Похоже, вы хотите превратить if/elif вверху в свою собственную функцию, которая вызывается из button_click() сразу после attempts = attempts 1 .

4. хорошо, похоже, что если я помещу if /elif в функцию и вызову ее после попыток = atttempts 1 , это сработает. Однако он по-прежнему не изменяет изображение, и я не совсем уверен, что его вызывает у вас есть какие-либо идеи?

5. Возможно, вам потребуется использовать global Hangman в функции.

Ответ №1:

Ваш код ограничен, поэтому я немного предполагаю. Как упоминалось в комментариях, операторы if else не вызываются повторно при каждом attempts изменении. Вам нужно поместить их в функцию и вызывать функцию каждый раз, когда attempts обновляется.

Попробуйте это:

 attempts = 0

def CheckAttempts():
    global Hangman, attempts
    if attempts == 0:
        HangmanImg = ImageTk.PhotoImage(Image.open("Images/Hangman0.png"))
        Hangman = Label(image= HangmanImg)
        Hangman.grid(row=0, column=0)
    elif attempts == 1:
        HangmanImg = ImageTk.PhotoImage(Image.open("Images/Hangman1.png"))
        Hangman = Label(image= HangmanImg)
        Hangman.grid(row=0, column=0)

def button_click(letter):
    if letter not in word:
        global attempts
        print("Not in word")
        guessed_letters.add(letter)
        #Add to letters guess
        attempts = attempts 1
        print(attempts)
     CheckAttempts()

a = Button(window, text= "a", padx= 10, pady=10, bg= "black", fg= "white", font= ("none", 15), borderwidth=0, command =lambda: button_click("a"))
a.grid(row= 3, column=1)