在Hangman游戏中存储猜测的单词

时间:2017-07-12 19:33:07

标签: python

如何存储来自hangman函数的用户输入,因此每次for循环运行时它都会记住用户已经猜到了这封信。

当hangman函数第一次运行时,如果用户的输入是'gera',那很好,那么它应该循环回来进行第五次猜测;问题是,如果用户现在输入“mo”,它将不会显示为这样的gera _ _ mo,而是打印_ _ _ _ _ _ mo;忘记用户之前的'gera'输入。 如何存储过去的输入,以便代码回忆传递的内容?

def get_guessed_word(secret_word, letters_guessed):

    a = ""
    for char1 in secret_word:
        if char1 in letters_guessed:
                a += char1
        else: 
                a += "_ "

    print(a)







def get_available_letters(letters_guessed):

    a = string.ascii_lowercase
    for char1 in a:
        if char1 in letters_guessed:
           a = a.replace(char1,"")


    print(a)




def hangman(secret_word_user_to_guess):

    secret_word_user_to_guess = 'geranimo'

    for index in range(6,1,-1):
        print('You have', index,'guesses left.')
        #print('Available letters: abcdefghijklmnopqrstuvwxyz')
        letters_guessed = input('Check a word: ')
        get_guessed_word(secret_word_user_to_guess, letters_guessed)
        print('Available letters:')
        get_available_letters(letters_guessed)

3 个答案:

答案 0 :(得分:0)

您可以轻松完成此操作:

result = ""
for char in secret_word:
    if char in letters_guessed:
        result += char
    else:
        result += "_"

或者,使用发电机:

result = "".join(char if char in letters_guessed else "_" for char in secret_word)

顺便说一句,letters_guessed可以是一个字符串("eikprs"),或者,如果订单无关紧要,则为setset("eikprs")

你也可以试试这个:

result = secret_word.translate("".maketrans(letters_guessed, "_" * len(letters_guessed)))

答案 1 :(得分:0)

有几种方法可以像ForceBru已经提到的那样解决它。但是要在评论中添加一个带有集合的集合:

def g(secret_word, letters_guessed):
    letters = set(secret_word)
    guess = set(letters_guessed)
    for i in letters.difference(guess):
        secret_word=secret_word.replace(i,'_')
    print(secret_word)

secret_word = 'apple'
letters_guessed = ['e', 'i', 'k', 'p', 'r', 's']
print(g(secret_word, letters_guessed) ) #prints '_pp_e'

答案 2 :(得分:0)

让我们来看看你的功能,因为有一个你似乎没有的概念:

def g(secret_word, letters_guessed):
    a = []
    for char1 in secret_word:    
        for thing in letters_guessed:
            if thing == char1:            
                a += thing
                break
            elif thing != char1:
                a[secret_word.index(char1)] == '_ '
                break

for char1 in secret_word:遍历单词,依次将每个字符拉入char。这没有什么不妥,几乎每个解决方案都必须使用它。

接下来,您执行for thing in letters_guessed:。正如@ForceBru所指出的那样,这有一个问题,因为Python提供in and not in operators来做你想要手工编写的代码。

然而,当你刚刚开始时,可​​以重新发明轮子几次。如果不出意外,它可以帮助您了解幕后发生的事情。

我认为你错过或误解的是:当你char1 == thing知道某事时。你可以绝对说“是的,这封信已被猜到”,你可以继续展示这封信。

但是当条件不正确时 - 当char1 != thing时 - 你什么都不知道。你不能简单地说“哦,如果那不是真的那就画一个下划线”,因为你没有完成检查!

请记住,for thing in letters_guessed:循环正在检查已猜到的每个字母。这意味着即使letters_guessed中的这个特定字符可能与单词中的当前字符不匹配,其他字符也可能匹配,因此您必须保持循环。

这样的事情:

for char1 in secret_word:
    for thing in letters_guessed:
        if thing == char1:
            a += thing
            break
    else: # 'else' after for means 'if no break command was run'
        a += '_'