Вопрос задан 07.06.2023 в 10:00. Предмет Информатика. Спрашивает Бардин Кирилл.

При запуске кода на питон, который должен работать как игра виселица возникает проблема, что при

нажатии первой, любой буквы стирается одна черточка, которая должна обозначать букву. Код: def check_letter(letter): global error_count new_guess = '' old_guess = word_label['text'] found = False for i in range(len(guessed_word)): if letter.lower() == guessed_word[i]: if old_guess[i] == '_': # добавлено новое условие new_guess += letter.lower() found = True else: new_guess += old_guess[i] else: new_guess += old_guess[i] word_label.config(text=new_guess) if new_guess == guessed_word: print("You win!") elif not found: error_count += 1 if error_count == 10: print("You lose!") else: draw_hangman() Помогите пожалуйста исправить ошибку. Заранее благодарен за помощь!
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Неверовский Артём.

Проблема может быть связана с тем, что при обновлении метки word_label в функции check_letter(), одна из черточек удаляется. Вероятно, проблема возникает из-за того, что в new_guess добавляется буква только если она находится в загаданном слове и соответствующая черточка еще не была заменена на эту букву.

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

Вот исправленный код для функции check_letter():

def check_letter(letter):

   global error_count

   new_guess = ''

   old_guess = word_label['text']

   found = False

   for i in range(len(guessed_word)):

       if letter.lower() == guessed_word[i]:

           if old_guess[i] == '_':

               new_guess += letter.lower()

           else:

               new_guess += old_guess[i]

           found = True

       else:

           new_guess += old_guess[i]

   word_label.config(text=new_guess)

   if new_guess == guessed_word:

       print("You win!")

   elif not found:

       error_count += 1

       if error_count == 10:

           print("You lose!")

       else:

           draw_hangman()

Здесь добавлено новое условие if old_guess[i] == '_', чтобы проверить, не была ли черточка уже заменена на эту букву ранее. Если черточка уже была заменена на эту букву, то в new_guess добавляется старая буква, и черточка не удаляется. В противном случае, в new_guess добавляется новая буква, а черточка заменяется на нее.

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Проблема возникает из-за того, что вы вызываете функцию word_label.config(text=new_guess) внутри цикла for, поэтому она обновляется после каждой итерации. Чтобы исправить эту проблему, переместите вызов word_label.config(text=new_guess) за пределы цикла for. Вот исправленный код:

python
def check_letter(letter): global error_count new_guess = '' old_guess = word_label['text'] found = False for i in range(len(guessed_word)): if letter.lower() == guessed_word[i]: if old_guess[i] == '_': new_guess += letter.lower() found = True else: new_guess += old_guess[i] else: new_guess += old_guess[i] word_label.config(text=new_guess) if new_guess == guessed_word: print("You win!") elif not found: error_count += 1 if error_count == 10: print("You lose!") else: draw_hangman()

Теперь функция word_label.config(text=new_guess) вызывается только один раз после завершения цикла, что позволяет правильно обновить отображение угаданных букв.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос