【问题标题】:Better idea for how to update a string for a hangman game关于如何更新刽子手游戏字符串的更好主意
【发布时间】:2019-11-01 19:04:06
【问题描述】:

我正在尝试在 python 2 中制作一个刽子手游戏,并且我相信我尝试存储用户知道的单词信息的方式(例如,如果他们猜到了“v”和“a ”,而字母是茄子,我指的“信息”是用户会看到的“-----a--”)。所以,我的问题如下:存储可变变量的更有效方法是什么?该变量可以像我希望的那样轻松更新?

secret_word = 'tracy'
dashes = ""

def get_guess():
    while True:
        guess = input("Guess: ")
        if len(guess) != 1:
            print "Your guess must be exactly one character!"
        elif not guess.islower():
            print "Your guess must be a lowercase letter!"
        else:
            break
    return guess

def update_dashes(secret_word, dashes, guess):
    for letter in secret_word:
        if letter == guess:
            dashes += guess
        else:
            dashes += "-"
    return dashes


while True:
    if guess in secret_word:
        print "That letter is in the secret word!"
        dashes = update_dashes(secret_word, dashes, get_guess())
    else:
        print "That letter is not in the secret word!"

需要更新的部分很可能是update_dashes 函数。任何帮助将不胜感激。

【问题讨论】:

    标签: python-2.x


    【解决方案1】:

    您可以考虑使用list,而不是将游戏状态存储在--a-- 形式的字符串中。列表中的每个条目都可以代表一个字母及其状态。在下面的示例中,boolean values 的列表用于存储密码中的每个字母是否已被泄露。

    secret_word = 'tracy'
    revealed_letters = [False] * len(secret_word)  # all letters start off as not revealed
    
    def make_guess(guessed_letter):
        any_letter_revealed = False
        for i in range(len(secret_word)):
            secret_letter = secret_word[i]
            if secret_letter == guessed_letter:
                any_letter_revealed = True
                revealed_letters[i] = True
        return any_letter_revealed
    
    
    def get_hidden_word():
        return ''.join([secret_word[i] if revealed_letters[i] else '-' for i in range(len(secret_word))])
    
    
    while True:
        print(get_hidden_word())
        guess = raw_input("Guess a letter: ")
        if make_guess(guess):
            print("That letter is in the secret word!")
        else:
            print("That letter is not in the secret word.")
        if all(revealed_letters):
            print("You win! The secret word was:")
            print(secret_word)
            break
    

    【讨论】:

    • [False] 是什么意思?最重要的是,非常感谢!该代码完美运行,并且没有第一个代码所具有的任何错误的双重质疑。这非常有帮助,谢谢
    • False 是一个布尔值。 False 周围的方括号表示它在列表中。此列表包含一项,即 False。通过将这个单项列表乘以单词的长度(我们在第 2 行中所做),我们得到一个列表,其中包含与单词中的字母一样多的 False(即 [False, False, False, False , 错误的])。然后我们使用这个列表来维护每个字母的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多