2013-03-09 3 views
0

У меня есть функция в Python, который говорит, что я должен взять в 3-х параметров, и слово должно быть в руке и слово также должно быть в словниксравнение между тремя параметрами:

def isValidWord(word, hand, wordList): 
    d = hand.copy() 
    for c in word: 
     d[c] = d.get(c, 0) - 1 
     if d[c] < 0 or word not in wordList: 
      return False 
    return sum(d.itervalues()) == 0 

он прекрасно работает в 12 из 14 испытательных случаев -

Function call: isValidWord(hammer, {'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}, <edX internal wordList>) 

Output: 
True 

, но в других случаях это неправильно!

Random Test 1 
Function call: isValidWord(shrimp, {'e': 1, 'i': 1, 'h': 1, 'm': 1, 'l': 1, 'n': 1, 'p': 1, 's': 1, 'r': 1, 'y': 1}, <edX internal wordList>) 
Your output: 
False 
Correct output: 
True 

Random Test 5 
Function call: isValidWord(carrot, {'a': 1, 'c': 1, 'l': 2, 'o': 1, 's': 1, 'r': 2, 't': 1, 'x': 1}, <edX internal wordList>) 
Your output: 
False 
Correct output: 
True 

Random Test 7 
Function call: isValidWord(shoe, {'e': 1, 'd': 1, 'h': 1, 'o': 1, 's': 1, 'w': 1, 'y': 2}, <edX internal wordList>) 
Your output: 
False 
Correct output: 
True 

Почему именно так?

ответ

1

Ваша функция исключает «руки», содержащие буквы слова и дополнительных букв. Например, f('tree', {'t': 1, 'r': 1, 'e': 2, 's': 1}) ('trees') должен вернуть True, так как эта «рука» содержит все буквы, необходимые для изготовления 'tree'.

Вам не нужно, чтобы проверить их:

def isValidWord(word, hand, wordlist): 
    if word not in wordlist: 
     return False 

    for letter in word: 
     if letter not in hand: 
      return False 

     hand[letter] -= 1 

     if hand[letter] < 0: 
      return False 

    return True 
+0

Thnx на миллион Amigo ... я получил его прямо сейчас !! – user2152315

0
def isValidWord(word, hand, wordList): 
    return word in wordList and all(hand.get(a, 0) >= b for a, b in getFrequencyDict(word).items()) 

попробовать это было бы дать правильный ответ

Смежные вопросы