检查列表中的两个项是否相同?

4
我的目标是:
在Lingo游戏中,有一个隐藏的单词,长度为五个字符。该游戏的目的是通过猜测来找到这个单词,并获得两种类型的提示:1)已完全正确匹配的字符(包括字符的身份和位置),以及2)确实存在于单词中但位置不正确的字符。编写一个程序来玩Lingo游戏。使用方括号标记在1)意义上正确的字符,使用普通括号标记在2)意义上正确的字符。
当前代码:
def lingo():
    import random
    words = ['pizza', 'motor', 'scary', 'motel', 'grill', 'steak', 'japan', 'prism', 'table']
    word = random.choice(words)
    print word
    while True:
        guess = raw_input("> ")
        guess = list(guess.lower())
        word = list(word)
        for x in guess:
            if x in word:
                if x == word[word.index(x)]:
                    guess[guess.index(x)] = "[" + x + "]"
                else:
                    guess[guess.index(x)] = "(" + x + ")"
        print guess

lingo()

目前,无论这些单词是否具有相同的词性,只要它们共享一个字母,就会将该字母放入方括号中。
例如: 正确: - 单词:Table - 我的猜测:Cater - 输出:C[a](t)(e)r 不正确: - 单词:Japan - 我的猜测:Ajpan (注意 a 和 j 的切换,我是故意这样做的)。 - 输出:[A][j][p][a][n] (应该是 (a)(j)[p][a][n])

你能给我们一些样例输入,期望的输出以及你实际得到的输出吗?通过示例了解问题出在哪里以及如何出错会有所帮助。 - ShadowRanger
2个回答

6

您的错误在于这一行:

if x == word[word.index(x)]:

这是始终成立的,因为word[word.index(x)]x是相同的。尝试将其更改为:

if x == word[guess.index(x)]:

如果猜测的字母在单词中的位置与单词中该字母的位置相同,那么if guess.index(x) == word.index(x):也会因为和你提供的答案一样而失败。我想唯一正确的方法应该是word[guess.index(x)] - Munir
@munircontractor 你说得对,已经移除了。现在我们的答案完全一样 :) - Selcuk

3

if x == word[word.index(x)]: 应该改为 if x == word[guess.index(x)]:


如果有重复字符,它将失败。例如,如果单词是 motor,你猜对了(motor),它仍然会返回 ['[m]', '[o]', '[t]', '(o)', '[r]'] - Selcuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接