【问题标题】:letter guessing game in python, cant replace letterspython中的字母猜谜游戏,不能替换字母
【发布时间】:2018-04-26 00:36:54
【问题描述】:

我正在尝试在 python 中做一个猜谜游戏,但我无法弄清楚一些东西。我必须输入一个单词,它会打印很多空格,并且这个人应该猜到这个单词。它必须在输入的单词之后看起来像这样。用户将输入一个字母,并且假设看起来像这样(单词是狗):

            >>Enter a letter:  a

            >> So far you have:

            >>      ***

            >>

            >>Enter a letter: o

            >> So far you have:

            >>      *o*

我几乎想通了,只是我无法将最后几块拼凑在一起。到目前为止,这是我的程序,我不知道如何用正确的字母替换“*”。

def main():
print ("\n Word guess!")
print ("______________")


letters_guessed = []

# Read word 
word = input("\n Please Enter a word: ")
# print 100 spaces
print("\n" * 100)
# Storing the length of the word
word_length = len(word)
guess = '*' * word_length


while True:
    guess_letter = input ("Please guess a letter: ")
    if len(guess_letter) != 1:
        print ("Please guess one letter at a time")
    if guess_letter in letters_guessed:
        print ("\n You already guessed that letter, please try again")

    # Store words already guessed
    else:
        # Update already guessed characters 
        letters_guessed += guess_letter

        if guess_letter in word:
            print ("So far you have: ", guess)
            guess = guess_letter
            print(guess)







print("You won, the word is " + word)

谢谢

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您需要构建一个新字符串,如果猜到了则使用原始字母,否则使用* 来表示未猜到的字母,一个快速的方法是:

    >>> word = 'dog'
    >>> letters_guessed = ['o']
    >>> you_have = ''.join(x if x in letters_guessed else '*' for x in word)
    >>> print("So far you have: ", you_have)
    So far you have:  *o*
    

    【讨论】:

    • 这个词,但这是显示的内容:请猜一个字母:a 到目前为止你有:**a 请猜一个字母:r 目前你有:* ***r 我怎样才能保持替换?
    • 您可能正在使用guessed_letter 而不是letters_guessed,我将更新代码以使用与您相同的变量名。
    • 谢谢!如果他们赢了比赛,我将如何展示?
    • won = all(x in letters_guessed for x in word)
    【解决方案2】:

    您遇到的问题是字符串是不可变的。所以你不能改变一个字符串,你只能在原来的基础上做一个新的。


    一种方法是切片。例如:

    >>> s = '****'
    >>> s[:1] + 'P' + s[2:]
    '*P**'
    

    更笼统地说:

    >>> def replacechar(s, idx, ch):
    ...     return s[:idx] + ch + s[idx+1:]
    >>> replacechar('****', 2, 'A')
    '**A*'
    

    另一种方法是使用字符列表而不是字符串——因为列表是可变的——然后在需要打印时将其转换为字符串:

    >>> guess = ['*'] * 4
    >>> guess
    ['*', '*', '*', '*']
    >>> ''.join(guess)
    '****'
    >>> guess[3] = 'M'
    >>> guess
    ['*', '*', '*', 'M']
    >>> ''.join(guess)
    '***M'
    

    当然,无论哪种方式,您都需要知道要替换的* 的索引。所以你不能只检查if guess_letter in word:,你必须循环调用类似word.index(guess_letter)的东西。

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 2013-03-24
      • 1970-01-01
      • 2013-03-27
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多