2013-03-08 3 views
-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». Может кто-нибудь объяснить, где я ошибся?

+2

Что такое 'рука'? Скорее всего, это список, а не дикт. Покажите нам код, который обрабатывает 'hand'. –

+0

Какая строка генерирует ошибку? – thegrinner

+0

@thegrinner the one with # – asheeshr

ответ

1

Ваша проблема, безусловно, эта линия:

if wordDic[letter] > hand[letter]: 

И проблема в том, что letter является символом (str), который вы используете для индексации вашего hand (который по-видимому, list, не dict, как вы ожидаете).

1

Проблема заключается в том, что hand - это (возможно) список, а не словарь, и вы пытаетесь получить к нему доступ, используя letter, который является str. Список не может быть проиндексирован с использованием строк, следовательно, TypeError.

См. Python documentation в списках для более подробной информации.


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