0

lettersGuessed 是一个字母列表

def isWordGuessed(secretWord, lettersGuessed):
  listA = {'a','b','c','p','o','e','p','l'}
  abc = "apple"

现在如果(部分或全部)在列表(listA)中猜测的字母包含在字符串中的所有字母(字符)中,那么它应该返回一个真正的布尔值......

但每次我做这个问题时,我都会得到一个错误的回报......即使上面的例子应该明确地返回“真”

那么任何人都可以帮助我吗?

非常感谢!!!

4

4 回答 4

4

您可以执行以下操作:

abc = 'apple'
setA = {'a','b','c','p','o','e','p','l'}
sabc = set(abc) 
print len(sabc) == len(sabc & setA)

当然,这有点误导。你想在什么情况下发生setA = { 'a','p','l','e' }?这仍然会返回True,因为没有考虑到重复项。如果您需要考虑重复项,我建议您使用Collections.Counter

from collections import Counter

def compare(word,guesses):
    return Counter(word) <= Counter(guesses)

这是有效的,因为它确保字母的word数量总是小于猜测中相应字母的数量。

于 2013-03-01T15:23:35.693 回答
1

使用集:

>>> set('apple')<{'a','b','c','p','o','e','p','l'}
True
>>> set('abc')<{'a','b','c','p','o','e','p','l'}
True

比较< 集 1 作为集 2 的完整子集

但是,正如@mgilson 所指出的,这对于具有重复项的字符串是不准确的。

按照他的建议使用计数器。

于 2013-03-01T15:23:45.917 回答
1

或者您可以使用any

>>> letters_guessed = 'abc'
>>> letters_in_word = 'abcdefghi'
>>> any(letter for letter in letters_guessed if letter in letters_in_word)
True
>>> letters_guessed = 'zzz'
>>> any(letter for letter in letters_guessed if letter in letters_in_word)
False
于 2013-03-01T15:24:05.273 回答
0

正如有人所说,您的帖子样本不会返回任何内容。这是我想出的东西,但它不像其他的那样优雅。

actualWord = "apple"
guessList = ["a","b","c","e","l"]

def WordGuessed(secretWord, lettersGuessed):
    listSW = list(secretWord)
    answer = True
    for item in listSW:
        if item not in lettersGuessed:
            answer = False
            break
    return answer

print WordGuessed(actualWord,guessList)
于 2013-03-01T16:14:10.153 回答