Как заставить консоль «запоминать» пользовательский ввод на Python?

#python #input #console #user-input

Вопрос:

Я пытаюсь понять, как я могу заставить консоль «запомнить», что пользователь ввел в консоль для моей игры «палач». Например, если слово «дерево» выбрано из созданной мной строки слов hangman, если пользователь вводит букву «r», я хочу, чтобы консоль запомнила этот ввод и продолжала печатать его на консоли каждый раз, когда пользователь вводит букву, до окончания сеанса. Я хочу, чтобы консоль повторно напечатала » -r — -«, если пользователь вводит «r», в то время как пользователь может найти другие буквы в слове. Я хочу, чтобы то же самое произошло, если пользователь также введет букву «т» или «е»: «- р е е». Спасибо, извините, если я прошу слишком многого, я не могу найти ответ на этот вопрос.

Вот мой код:

 #hangman mini-project

import random
import string
import time

letters = string.ascii_letters
lettertree = ['a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 's', 'u', 'v', 'w', 'x', 'y', 'z']
hangmanwords = ['tree','sun']
sunchoices = ['s _ _', '_ u _', '_ _ n']
treechoices = ['t _ _ _', '_ r _ _', ' _ _ e _', '_ _ _ e']
lettercount = [0]
gameWinTree = False
gameWinSun = False
limbCount = 5

hangmanword = random.choice(hangmanwords)
correct = hangmanword
if hangmanword == "sun":
    print (random.choice(sunchoices))
if hangmanword == "tree":
    print (random.choice(treechoices))
    
    
    
    if letters == "r":
        print("Nice! You guessed one letter from the word")
        if letters == "e":
            print("Wow! You guessed two letters from the word, if you wish, you can guess the word")
while True:
    letters = input("Please enter a letter to guess the word")
    if letters == correct:
        input("Correct! The word was "   correct   ". Press enter to play again.")
        time.sleep(1)
        break
    if letters == correct:
        gameWinTree == true
        if gameWinTree == true:
            time.sleep(1)
        break
    print("The letter that you chose was "   letters)
    if letters == "r":
        print("Nice! You guessed one letter from the word!n t r _ _")
        
    if letters == "e":
        print("Wow! You guessed two letters from the word!n t _ e e")
    if letters == correct:
        print("Correct! The word was tree!")
    if letters == lettertree:
        print("Sorry, that's not a correct letter, feel free to try again.")
    limbCount -=1
    if limbCount == 0: 
        print("Unfortunately, you are out of tries, better luck next time!")
        time.sleep(1)
        exit()
        
 

Извините, если мой код кажется небрежным, я только начинаю изучать Python после изучения других языков программирования.

Комментарии:

1. Просто для уточнения; вы хотели бы сохранить список букв, которые игрок уже угадал, верно?

2. Да, извините, если это было неясно

3. Для букв, которые не угаданы, я хочу, чтобы символ подчеркивания был заполнителем этой буквы. Я только что понял, что если я наберу подчеркивание, оно выделит текст курсивом

Ответ №1:

Вот как я бы построил строку, которую вы ищете. Когда игрок угадывает букву, я бы хранил ее в наборе, называемом guesses . Если он находится в наборе букв в слове «называется correct «, то я эффективно добавляю его в пересечение этих наборов «называется correct_guesses «. Затем я повторяю слово и распечатываю каждую букву в строке-заполнителе, заменяя ее символом подчеркивания, если этой буквы нет correct_guesses . Вот как это будет выглядеть в коде:

 word = 'tree'
guesses = set()
correct = set(list(word))
correct_guesses = set()

while correct_guesses != correct:
  # Get input
  guess = input("Guess: ")
  guesses.add(guess)
  correct_guesses = guesses.intersection(correct)

  # Print word status
  placeholder = ' '.join(['%s' for _ in word])
  print(placeholder % tuple([l if l in correct_guesses else '-' for l in word]))
  print("You've guessed: "   ", ".join(guesses))
 

Дайте мне знать, если этот код не работает для вас или если он нуждается в дополнительных объяснениях.

Комментарии:

1. Спасибо, это сработало!