Основная проблема, с которой вы сейчас сталкиваетесь, - это два варианта: один, что метод replace() заменяет все экземпляры любого заданного ввода внутри строки, а не первой, и двух, что вы не в настоящее время есть способ сообщить, какие письма вы уже обнаружили. Вызов replace («_», let) всегда будет заменять каждый отдельный экземпляр «_» и при условии, что вы применяете его к строке только, состоящей из символов подчеркивания, она всегда будет перезаписывать всю строку. Кажется, что вы также обновляете hidden_let каждый раз, когда hangman() вызывается с буквой угадывания, что означает, что в лучшем случае с вашим дизайном теперь вы будете только показывать каждую букву, которую только что догадали пользователи, и куча подчеркиваний в противном случае ,
Что вы хотите сделать, это иметь два значения: correct_word и current_guess. correct_word будет тем словом, которое игрок должен угадать, а current_guess будет их успехом в угадывании слова, начиная с строки только подчеркивания той же длины, что и right_word.
Вот краткий пример. Я взял на себя смелость удалить ваши глобальные ссылки - глобальные глобальные символы, как правило, не одобряются, и инкапсулировали поведение в небольшом классе. Вы хотите заменить значение в hangmanner.play_hangman() любым вашим случайным словом.
class Hangmanner:
correct_word = ''
current_guess = ''
def play_hangman(self, word):
self.correct_word = word
self.current_guess = '_' * len(self.correct_word)
while self.current_guess != self.correct_word:
self.guess_letter(input("Please guess a letter: "))
def guess_letter(self, guessed_letter):
for i in range(len(self.correct_word)):
if self.correct_word[i] == guessed_letter:
if i == 0:
self.current_guess = self.correct_word[i] + self.current_guess[1:]
else:
self.current_guess = self.current_guess[:i] + self.correct_word[i] + self.current_guess[i + 1:]
print(self.current_guess)
if __name__ == "__main__":
hangmanner = Hangmanner()
hangmanner.play_hangman("test")
Это использует функцию нарезки в Python, где вы можете использовать скобки и [первый: последний] синтаксис для доступа к произвольному диапазону любой данной коллекции. Если первый или последний отсутствует, срез продолжается до начала или конца коллекции, соответственно. Выше current_guess [1:] возвращает current_guess со второго индекса на последний. current_guess [: i] возвращает current_guess от первого индекса до индекса, предшествующего i, учитывая, что последний является исключительной границей конца.
Вы не можете использовать функцию 'replace' напрямую; вам также нужно срезать. См. Здесь: http://stackoverflow.com/questions/12723751/replacing-letter-in-string-by-index – 101
Не знаете, почему этот вопрос был опущен. ОП попытался решить проблему сам, дал четкое описание того, где он застрял и что он пытался. Как первый пост, это довольно хорошо. Я голосую. –