-1

私はコーディングが初めてで、この機能を正しく動作させるのに苦労しています。

def isValidWord(word, hand, wordList):
    """
    Returns True if word is in the wordList and is entirely
    composed of letters in the hand. Otherwise, returns False.

    Does not mutate hand or wordList.

    word: string
    hand: dictionary (string -> int)
    wordList: list of lowercase strings
    """
    wordDic = {}
    if word not in wordList:    
        return False   
    for letter in word:
        if letter in wordDic:
            wordDic[letter] += 1
        else:
            wordDic[letter] =  1
    if wordDic[letter] > hand[letter]: # 
        return False
    return True

私がやろうとしているのは、文字が wordDic に出現する回数と、それが手に出現する回数の辞書の値と比較することです。しかし、「TypeError: リストのインデックスは str ではなく整数でなければなりません」というメッセージが表示され続けます。誰かが私が間違っている場所を説明できますか?

4

2 に答える 2

1

あなたの問題は間違いなくこの行です:

if wordDic[letter] > hand[letter]:

そして問題は、インデックスに使用してletterいる文字 ( ) であることです(これは明らかに aであり、期待どおりではありません)。strhandlistdict

于 2013-03-08T13:51:20.590 に答える
1

問題は、 (おそらく) 辞書ではなくリストであり、 which ishandを使用してアクセスしようとしていることです。文字列を使用してリストにインデックスを付けることはできないため、.letterstrTypeError

詳細については、リストに関するPython ドキュメントを参照してください。


hand間違いなくリストです。テストコード:

>>> l = [1,2]
>>> l['a']
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    l['a']
TypeError: list indices must be integers, not str
于 2013-03-08T13:51:45.263 に答える