在Hangman gam中存储猜出的单词

2024-09-27 22:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

如何存储来自hangman函数的用户输入,这样每次运行for循环时,它都会记住用户已经猜到了字母。你知道吗

当hangman函数第一次运行时,如果用户的输入是'gera',这很好,它应该返回第五次猜测;问题是如果用户现在输入'mo',它不会像这个gera\uumo那样显示,相反它会打印\uuuumo;忘记用户以前的'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)

Tags: to用户inforgetsecretdefword
3条回答

让我们看看你的函数,因为有一个概念你似乎没有:

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提供了^{} and ^{} operators来手工编写代码。你知道吗

然而,当你刚刚开始的时候,可以重新发明轮子几次。如果没有别的,它可以帮助你了解引擎盖下发生了什么。你知道吗

我认为你错过或误解的是:当你有了char1 == thing你就知道了一些东西。你完全可以说“是的,这封信已经猜到了”,然后你可以继续展示这封信。你知道吗

但是如果这个条件不是真的,你什么都不知道。你不能简单地说“哦,如果那不是真的,那么画一个下划线”,因为你还没有完成检查!

请记住,for thing in 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 += '_'

有几种方法可以解决它,就像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'

您可以很容易地做到这一点:

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)))

相关问题 更多 >

    热门问题