比较python中的两个字符串时出错

时间:2013-11-06 13:41:18

标签: python string

def isWordGuessed(secretWord, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: boolean, True if all the letters of secretWord are in lettersGuessed;
      False otherwise
    '''
    score = 0
    tot = len(secretWord)
    for i in range(len(secretWord)):
       for j in range(len(lettersGuessed)):
           if (secretWord[i] == lettersGuessed[j]):
               score +=1
    if score == tot:
        return True 
    else:
         return False

对于大多数单词和猜测字母m得到正确的答案但是在提供sceretWord为mangosteen并且字母猜到为['z', 'x', 'q', 'm', 'a', 'n', 'g', 'o', 's', 't', 'e', 'e', 'n']时我的输出错误。

有什么建议,为什么?

4 个答案:

答案 0 :(得分:3)

看起来你可以使用:

set(secretWord).issubset(lettersGuessed)

确定猜测是否包含秘密词中的所有字母。

答案 1 :(得分:0)

原因如下:

mangosteene中有两个相同的字符。你的代码遇到了两次,所以它增加了两个分数。 secretWord[i]lettersGuessed[j]e时的总得分加起来为4

这是一个解决方案:

您只需使用set检查是否存在任何唯一字母:

return all([True if i in set(g) else False for i in set(w)])

这使得功能更短:)

演示:

>>> g = ['z', 'x', 'q', 'm', 'a', 'n', 'g', 'o', 's', 't', 'e', 'e', 'n']
>>> w = 'mangosteen'
>>> score = 0
>>> all([i for i in set(w) if i in set(g)])    
True

另一种方法是在找到想要的字母后直接打破内循环:

if secretWord[i] == lettersGuessed[j]
    score +=1
    break

希望这有帮助!

答案 2 :(得分:0)

我的最终答案应该适用于重复的字符,错误的字符等。关键是应该从猜到的字符列表中删除单词的每个字符;如果失败了,那个角色就没有猜到(通常就够了),我们应该返回False。

def isWordGuessed(secretWord, lettersGuessed):
    guesses_left = list(lettersGuessed)
    for character in secretWord:
        try:
            guesses_left.remove(character)
        except ValueError:
            return False  # remove failed
    return True  # all characters succeeded

答案 3 :(得分:0)

def isWordGuessed(secretWord, lettersGuessed):
lst = []
for e in lettersGuessed:
    if e in secretWord:
        lst.append(e)
if len(lst) == len(secretWord):
    return True
return False

我这样做了,它通过了所有案件。