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 

14 のうち 12 のテストケースで完全に動作します -

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

これはなぜですか?

4

2 に答える 2

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
于 2013-03-09T21:38:11.380 に答える
0
def isValidWord(word, hand, wordList):
    return word in wordList and all(hand.get(a, 0) >= b for a, b in getFrequencyDict(word).items())

これを試してみると、正しい応答が得られます

于 2014-03-19T19:42:58.257 に答える