首页 > 解决方案 > 关于如何更新刽子手游戏字符串的更好主意

问题描述

我正在尝试在 python 2 中制作一个刽子手游戏,我相信我试图存储用户知道的关于这个词的信息的方式(例如,如果他们猜到了“v”和“a”以及letter 是茄子,我所指的“信息”是用户会看到的“-----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

解决方案


与其将游戏状态存储在表单字符串中,不如--a--考虑使用列表。列表中的每个条目都可以代表一个字母及其状态。在下面的示例中,布尔值列表用于存储是否已显示秘密单词中的每个字母。

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

推荐阅读