Я больше привык к C #, чем к Python. В свободное время я решил сделать простое консольное приложение для палача на Python. Игрок 1 вводит слово, игрок 2 затем имеет 5 попыток угадать его. Скажите, что слово "привет", как только они сделают предположение, скажем, "d", это напечатало бы _ _ _ _ _. Если бы их предположение было «е», оно напечатало бы _ e _ _ _.

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

word = input("Player 1, please enter a word: ")
lives = 5
print("Player 2, you have {} lives left.".format(lives))
print("The Word: ", "_ " * len(word))
wordSuccessfullyGuessed = False
while lives > 0 or wordGuessed: 
    guess = input("Player 2, guess a letter: ")
    wordFormatted = ""
    for char in word:
        if char in guess:
            wordFormatted = char + " "
        else:
            wordFormatted = "_ "

    print(wordFormatted)



0
Tim 1 Июл 2019 в 19:20

5 ответов

Лучший ответ
word = input("Player 1, please enter a word: ").lstrip().rstrip().lower()
wordBlank = ['_ ' for char in word]
lives = 5
wordLen = len(word)
wordSuccessfullyGuessed = False
wordFormatted = ""
wordGuessed = False
while lives > 0 or wordGuessed:
    guess = ''
    validGuess = False
    print("Player 2, you have {} lives left.".format(lives))
    while len(guess) != 1 or guess.isalpha() == False:
        guess = input('Enter one letter to guess: ').lower()
        characterIteration = 0
        for char in word:
            if guess == char:
                validGuess = True
                wordBlank[characterIteration] = guess+' '
            characterIteration += 1
    if validGuess == False:
        lives -= 1
    print("The Word: ", ''.join(wordBlank))
    if '_ ' not in wordBlank:
        wordGuessed = True
if wordGuessed == True:
    print('You won! The word was indeed', word)
if wordGuessed == False:
    print("You didn't win this time, the word was",word)

Выход:

Player 1, please enter a word: trees
The Word:  _ _ _ _ _
Player 2, you have 5 lives left.
Enter one letter to guess: a
The Word:  _ _ _ _ _
Player 2, you have 4 lives left.
Enter one letter to guess: e
The Word:  _ _ e e _
Player 2, you have 4 lives left.
Enter one letter to guess: t
The Word:  t _ e e _
Player 2, you have 4 lives left.
Enter one letter to guess: r
The Word:  t r e e _
Player 2, you have 4 lives left.
Enter one letter to guess: s
The Word:  t r e e s
You won! The word was indeed trees
2
Daniel Glynn 1 Июл 2019 в 16:48

Вам не нужно перебирать каждый символ в слове. Встроенный in при использовании в строках уже будет обрабатывать проверки на наличие подстроки в строке.

word = input("Player 1, please enter a word: ")
lives = 5
print("Player 2, you have {} lives left.".format(lives))
print("The Word: ", "_ " * len(word))
wordSuccessfullyGuessed = False
guessed = []
while lives > 0 or wordGuessed: 
    guess = input("Player 2, guess a letter: ")
    guessed.append(guess) # This is what you want to track, what letters they've already guessed
    wordFormatted = ''.join([letter + ' ' if letter in guessed else '_ ' for letter in word])

    print(wordFormatted)

Понимание списка, которое я использовал для wordFormatted, даст вам ожидаемый результат, где не угаданные символы отображаются как '_', а правильно угаданные символы, включая повторяющиеся буквы, будут отображаться для гадающего.

Player 1, please enter a word: apple
Player 2, you have 5 lives left.
The Word:  _ _ _ _ _
Player 2, guess a letter: a
a _ _ _ _
Player 2, guess a letter: p
a p p _ _
Player 2, guess a letter: e
a p p _ e
Player 2, guess a letter: s
a p p _ e
0
user3896255user3896255 1 Июл 2019 в 16:38

Как Кардженикат упоминается в комментарии:

wordFormatted = "_" выглядит как вероятный подозреваемый. Я думаю, что вы имеете в виду wordFormatted + = "_" -

Использование этого решило проблему.

0
Bhargav Rao 1 Июл 2019 в 17:00

Вот

def hangman_print(guess_lst, word):
    lst = []
    for x in word:
        lst.append(x if x in guess_lst else '_')
    print(''.join(lst))


hangman_print(['l', 't'], 'telescope')

Выход

t_l______
0
balderman 1 Июл 2019 в 16:37

В вашем внутреннем цикле for вы переназначаете переменную wordFormatted при каждой итерации. Похоже, вы хотите добавить букву или подчеркивание к вашей строке. Попробуйте вместо этого:

for char in word:
        if char in guess:
            wordFormatted += char + " "
        else:
            wordFormatted += "_ "

Также кажется, что вы переназначаете свой wordFormatted = "" с каждой итерацией вашего цикла while. Это закончится тем, что вычистит слово с каждым предположением. Возможно, тоже стоит взглянуть на это.

1
Josh 1 Июл 2019 в 16:30