Как я могу использовать цикл while или for для замены части строки, которая находится в списке? - PullRequest
2 голосов
/ 01 октября 2019

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

Я смотрел часы видео и читал так много ранее заданных вопросов. Я пытался просто поиграть со всеми предложениями, которые я видел, и хотя некоторые из них работали как мой текущий код, это в конечном итоге привело к другой проблеме. Я буквально прошу помощи. Если вы посмотрите на мой код, вы увидите, что я объясняю себе все в мучительных деталях, когда я действительно понимаю, что я делаю.

#Word Puzzle Version 1
# Fill in the blank to guess the word. 
import random, time

def main(): 
    # display instructions
    filename = 'instructions.txt'
    mode = 'r'
    file=open(filename,mode)
    instructions=file.read()
    print(instructions) 

    # display what is to be guessed
    #import words file
    filename2 = 'words.txt'
    # Step 1  - Open the file
    infile = open(filename2,mode)
    # Step 2 - Read the file
    content = infile.read()
    # Step 3 - Strip the content of any leadning or trailing newline characters
    content = content.strip()
    # Step 4 - Additional clean up with splitlines function
    all_words = content.splitlines()

    # Randomly choose a word from list all_words
    #I want only 1 word to be guessed
    number_of_words = 1
    #A sample of 1 word from my cleaned up list of words
    word_list = random.sample(all_words,number_of_words)
    # Use choice function from random module to choose sample from word list
    answer = random.choice(word_list)


    #Display word to be guessed
    #Calculate the length of each word
    Length = len(answer)
    Underscores = (Length)*'_ '
    #Prompt user to solve the puzzle
    answer_so_far = 'The answer so far is '
   #print('The answer so far is '+'_ '*(Length))
    print(answer_so_far, Underscores)

    #Prompt the player to fill in the blanks
    Guess_a_letter = 'Guess a letter: '
    guess =input(Guess_a_letter)
    guess = guess.lower()

    #If players guess in word replace the underscore
    # Loop through the letters in the real word
    for i in (answer):
        if guess == i:
            #print(answer_so_far, end = ' ')
            print(guess, end = ' ')
        elif guess != i:
            print('_', end = ' ')


    #Check if players guess is in the word
    while guess:
        if guess in answer:
            print('\nGood job! You found the word '+(answer)+'.')
            break
        else:
            print(answer_so_far,Underscores)
            print('Not quite, the correct word was '+(answer)+'. Better luck next time.')
            break        

    #End of game
    #time.sleep(1.5)
    input('Press enter to end the game.')


main ()

Фактический результат должен отображаться в правильном виде следующим образом:

Инструкции

Ответ пока _ _ _ _ _

Угадай письмо: a

Ответ пока _ _ _ a _

Хорошая работа! Вы нашли (случайное слово)!

Нажмите ввод, чтобы завершить игру.

при неправильном указании:

Инструкции

Ответ пока _ _ _ __ _

Угадай букву: a

Пока что ответ _ _ _ _ _

Не совсем. правильное слово было (случайное слово). Повезет в следующий раз.

Нажмите enter, чтобы завершить игру.

EDIT: для уточнения "wonky" incorrect output

incorrect output

1 Ответ

0 голосов
/ 01 октября 2019

Вы должны зацикливаться, пока все ваши письма не будут угаданы. Тем временем вы разрываете свою петлю после первой буквы. Ваш код должен выглядеть следующим образом:

# read file, select random answer
guessed = False
# display number of letters in answer as underscores
while not guessed:
    # get a letter from user input
    # show placeholders with all guessed letters
    if {some check - were all letters of answer guessed?}:
          guessed = True
input("Press Enter to exit")

Проверка может выглядеть следующим образом: создайте некоторый набор, добавьте все буквы, которые пользователь пытался использовать в этом наборе, и проверьте, является ли set(answer) in your_set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...