如何按顺序显示猜词者猜出的字母?python

如何按顺序显示猜词者猜出的字母?python,python,python-3.x,Python,Python 3.x,我被要求在python中创建一个单词猜测器,它向用户输出单词中有多少个字母,例如python有6个,所以它会输出6个。然后用户有5次猜测来猜单词中的字母,在这5次猜测之后,用户就要猜单词了。我能够通过将字母连接到一个新字符串来显示正确猜测的字母,但是我无法显示单词的正确位置,也无法显示字母在单词中出现两次,基本上就像hangman一样 问题1:如何正确猜测字母,使其按照单词的顺序而不是猜测的顺序出现 问题2:如何让一个重复的字母显示它在单词中出现的次数 代码如下: #WordGuesser i

我被要求在python中创建一个单词猜测器,它向用户输出单词中有多少个字母,例如python有6个,所以它会输出6个。然后用户有5次猜测来猜单词中的字母,在这5次猜测之后,用户就要猜单词了。我能够通过将字母连接到一个新字符串来显示正确猜测的字母,但是我无法显示单词的正确位置,也无法显示字母在单词中出现两次,基本上就像hangman一样

问题1:如何正确猜测字母,使其按照单词的顺序而不是猜测的顺序出现

问题2:如何让一个重复的字母显示它在单词中出现的次数

代码如下:

#WordGuesser

import random

WORDS = ("computer","science","python","pascal","welcome")

word = random.choice(WORDS)
correctLetters = ""
guesses = 0

print(
    """

    Welcome to Word Guesser!
    You have 5 chances to ask if a certain letter is in the word
    After that, you must guess the word!

    """
)

print("The length of the word is", len(word))


while guesses != 5:
    letter = input("Guess a letter: ")

    if letter.lower() in word:
        print("Well done", letter, "is in the word")
        correctLetters += letter
        print("Correctly guessed letters are: ",correctLetters)
        guesses += 1


    else:
        print("No", letter, "is not in the word")
        correctLetters += "-"
        guesses += 1

guess = input("Please now guess a word that it could be!: ")

if guess == word:
    print("Well done, you guessed it")
    input("\n\nPress enter key to exit")

else:
    ("You did not guess it, the word was: ",word)

您应该迭代该单词,以便在正确的单词中输出单词中猜测的字母。使用集合来跟踪正确的字母,以便高效查找,因为您只需要它来确定是否正确猜测了字母:

correctLetters = set()
while guesses != 5:
    letter = input("Guess a letter: ").lower()

    if letter in word:
        print("Well done", letter, "is in the word")
        correctLetters.add(letter)
        print("Correctly guessed letters are: ", ''.join(letter if letter in correctLetters else '-' for letter in word))

    else:
        print("No", letter, "is not in the word")
    guesses += 1

演示:

这里有一个解决方案,它并不优雅,因为您不能使用函数,但它是可行的

随机导入
WORDS=(“计算机”、“科学”、“python”、“pascal”、“欢迎”)
单词=随机。选择(单词)
correctLetters=“”
猜测=0
印刷品(
"""
欢迎来到猜字游戏!
你有5次机会问单词中是否有某个字母
在那之后,你必须猜这个词!
"""
)
打印(“单词的长度为”,len(单词))
猜猜看!=5:
列表\单词=列表(单词)
字母=输入(“猜测字母:”)
如果word中的字母.lower():
打印(“做得好”,字母“在单词中”)
更正字母+=字母
猜一猜_part=“”
对于列表中的单词字母:
如果单词字母为正确的字母:
猜测字母+部分=单词字母
其他:
猜测部分+=“*”
打印(“正确猜测的字母为:”,猜测部分)
猜测+=1
其他:
打印(“否”,字母“不在单词中”)
更正字母+=“-”
猜测+=1
猜=输入(“请现在猜一个可能是的单词:”)
如果猜测==单词:
打印(“做得好,你猜对了”)
输入(“\n\n按enter键退出”)
其他:
(“你没猜到,单词是:”,单词)

+1。在添加到集合中时,您不需要测试成员身份,但是通过单词的字母循环将忽略任何错误猜测。是的,但是由于已经存在用于其他目的的条件语句,不妨将
add
调用放在条件内,以避免不必要地跟踪错误字母,而在显示猜到一半的单词时,这些字母是不需要的。同意。除了把它放在“猜测正确”的范围内,如果有点模糊了基于集合的方法的简单性。mem的大小在这里并不重要,一个集合成员测试是如此的快。但是是的,你已经有了你的IF。