0
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 asmangosteen和字母猜测,因为 ['z', 'x', 'q', 'm', 'a', 'n', 'g', 'o', 's', 't', 'e', 'e', 'n']我得到错误的输出。

有什么建议,为什么?

4

4 回答 4

2

看起来你可以使用:

set(secretWord).issubset(lettersGuessed)

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

于 2013-11-06T14:01:39.577 回答
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
于 2013-11-06T14:06:50.493 回答
0

原因如下:

mangosteen,中有两个相同的字符e。您的代码遇到了两次,因此它增加了两个分数。secretWord[i]when和lettersGuessed[j]is的总分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

希望这可以帮助!

于 2013-11-06T13:47:16.780 回答
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

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

于 2015-01-27T05:28:07.333 回答