lettersGuessed是一个字母列表
def isWordGuessed(secretWord, lettersGuessed):
listA = {'a','b','c','p','o','e','p','l'}
abc = "apple"
现在如果列表(listA)中猜到的(部分或全部)字母包含在字符串中的所有字母(字符)中,那么它应该返回一个真正的布尔值...
但是每次我这样做时我都会得到一个错误的回报...即使上面的例子应该清楚地返回“true”
那么有什么可以帮助我吗?
Thnx很多!!!
答案 0 :(得分: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
中字母的数量始终小于猜测中相应字母的数量。
答案 1 :(得分:1)
使用套装:
>>> set('apple')<{'a','b','c','p','o','e','p','l'}
True
>>> set('abc')<{'a','b','c','p','o','e','p','l'}
True
<
compares set 1 as being a complete subset of set 2
但是,正如@mgilson所指出的,对于带有重复的字符串,这是不准确的。
按照他的建议使用计数器。
答案 2 :(得分: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
答案 3 :(得分: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)