
При запуске кода на питон, который должен работать как игра виселица возникает проблема, что при
нажатии первой, любой буквы стирается одна черточка, которая должна обозначать букву. Код: 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 в функции 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 добавляется новая буква, а черточка заменяется на нее.



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


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili