man子手程序,在更新输出时遇到问题

时间:2018-12-21 02:50:39

标签: python python-3.x

所以我试图制作一些make子手风格的程序,但是在保存正确的猜测时遇到了问题。

到目前为止,我已经知道第一个正确的猜测会在需要的地方输出字母,例如,如果正确的字母是a:

_ _ _ a _ _

但是,每当我进行第二次猜测时,即使是正确的,它也只会打印出正确的猜测,而会忘记过去的正确猜测。例如,如果在第二个猜测中b是正确的字母:

_ _ b _ _ _

这是我的代码

for letter in range(len_word):
    print('_', end=" ")


guess = input("The length of the word is " + str(len_word) + ". Guess a letter, or ask for a vowel ... ")

while wrong_guesses < 6:
    if guess in letters_in_word:
        for letter in range(len(given_word)):
            if given_word[letter:letter+1] == guess:
                print(guess, end=" ")
            else:
                print('_', end=" ")
        guess = input("The length of the word is " + str(len_word) + ". Guess a letter, or ask for a vowel ... ")
    else:
        wrong_guesses -= 1
        print("Your guess is not in the word, you have " + str(wrong_guesses) + " left.")
        guess = input("The length of the word is " + str(len_word) + ". Guess a letter, or ask for a vowel ... ")

我想要的是,如果我第一次猜到我得到了正确的答案,并且输出了

_ _ _ a _ _

我希望我的下一个猜测(如果不正确的话)打印出来

_ _ _ a _ _

4 个答案:

答案 0 :(得分:1)

主要问题是您如何跟踪子手。现在,每当他们猜对时,您就在打印空白并显示正确的字母。有很多方法可以跟踪猜测。考虑使用字符列表,并在每次正确猜出字符时进行更新,例如:

scoreboard = [_] * len_word

while incorrect_guesses < 6:
// get the guess
    any_correct = None
    for index, char in enumerate(hangman_word):
        if guess == char:
            scoreboard[index] = guess
            any_correct = True
    print(scoreboard)
    if not any_correct
        print("wrong guess message")
        incorrect_guess += 1

这个想法是要有一个字符串,它是真实的单词,还有一个列表,它是向用户显示的内容。 index, char片段仅使您可以遍历实际单词并跟踪您在真实字符串中查找的字符及其在字符串中的位置。

(您希望使用列表而不是字符串作为答案,因为字符串是不可变的,并且您实际上非常注重可变性,这使列表成为理想的选择。)

答案 1 :(得分:0)

在您的代码中

if given_word[letter:letter + 1] == guess:
    print(guess, end=" ")
else:
    print('_', end=" ")

没有实现存储已经猜到的字母的方法。

答案 2 :(得分:0)

您可以将guess_string初始化为

guess_string='_'*len_word

然后,如果猜对是正确的guess_string = guess_string[:letter] + guess + guess_string[letter+1:],那么就不用逐个字符打印出来了,您可以执行print(guess_string)并检查单词是否完全猜对,只需检查if '_' in guess_string

答案 3 :(得分:0)

我认为使用字典作为翻译表可能对此非常可爱。当您正确猜出一个字母时,无需遍历输出字符串中的字符即可显示新字母。取而代之的是,您只需使用最新的转换表来打印转换后的输出字符串。最初,翻译表(词典)将原始单词中的所有字母映射到“ _”。每当您做出正确的猜测时,词典都会更新,并且该字符的映射也会更改。

注意,我的示例区分大小写,尽管使其不区分大小写也不需要很多。它还将元音像辅音一样对待(从某种意义上说,您不必“购买”字母,您只是猜测即可)-这只是我能想到的最幼稚的实现。

word = "foobar"

max_incorrect_guesses = 3
incorrect_guesses = 0

hidden_char = "_"

translation = str.maketrans(word, hidden_char * len(word))

while ord(hidden_char) in translation.values():
    if incorrect_guesses == max_incorrect_guesses:
        print("You've failed to guess the word.")
        break

    print(f"Revealed so far: {word.translate(translation)}")
    guess = input("Enter a guess: ")
    if len(guess) == 1 and guess in word:
        print("Correct!\n")
        translation.update({ord(guess) : ord(guess)})
    else:
        print("Incorrect.\n")
        incorrect_guesses = incorrect_guesses + 1
else:
    print(f"Good job! the word was \"{word}\".")