Работа со строками в игре Палач? Python
шановне панство, я начал только учить питон и у меня к вам вопрос, в ниже расположеном коде у меня игра Палач. Основная моя проблема - проверка ввода букв на уникальность, то есть если подряд вводится одна и та же буква, то вылетает сообщения "You've already guessed this letter". Я попробовал втулить своё - пишет что индекс строки вне допустимого диапазона - подскажите, пожалуйста что делать.
import random
import re
print("H A N G M A N")
print()
words = ['python', 'java', 'kotlin', 'javascript']
guess = random.choice(words)
secret_word = str('-' * len(str(guess)))
tries = 8
a = True
while a is True:
print()
if secret_word != guess:
print(secret_word)
else:
print(null)
letter = input("Input a letter:")
if (len(letter) > 1) or (len(letter) == 0):
print("You should input a single letter")
elif not letter.islower():
print("Please enter a lowercase English letter")
elif letter not in set(guess):
tries -= 1
print("That letter doesn't appear in the word")
elif letter in secret_word:
tries -= 1
print("No improvements")
elif (letter[tries] == letter[tries+1]):
print("You've already guessed this letter")
else:
indexes = [m.start() for m in re.finditer(letter, guess)]
for ind in indexes:
dop = secret_word[:ind] + letter + secret_word[ind + 1:]
secret_word = dop
if tries == 0:
a = False
print("You lost!")
if secret_word == guess:
a = False
print("\n", guess)
print(f"You guessed the word! {secret_word}\nYou survived!")
Ответы (1 шт):
Просто уберите эту проверку и почти всё заработает:
elif (letter[tries] == letter[tries+1]):
print("You've already guessed this letter")
Вы проверяете тут непонятно чего - ведь в letter находится ровно одна буква, при обращении по индексу больше 0 будет ошибка.
Для проверки вводилась ли буква ранее заведите множество:
already_guessed = set()
Добавляйте в него введённую букву в самом конце цикла:
already_guessed.add(letter)
А потом проверяйте вместо вашей непонятной проверки таким же образом, как у вас сделано чуть выше через in:
elif letter in already_guessed:
print("You've already guessed this letter")