2013-10-24 3 views
0

У меня есть вопрос, который идет как этотPython: Функция, которая осуществляет поиск по словарю в словаре

Написать контракт, строку документацию и реализацию функции findActor, которая берет название фильма и имя персонажа и возвращается актер/актриса, игравшая данного персонажа в данном фильме. Если данный фильм или данный символ не найден, он выводит сообщение об ошибке и возвращает пустую строку

Я уже выполнил следующие функции, которые помогут вам в этом. И myIMDb - это глобальный словарь, установленный на пустой пуск, чтобы начать

def addMovie (title, charList, actList): 
    """The function addMovie takes a title of the movie, a list of characters, 
    and a list of actors. (The order of characters and actors match one 
    another.) The function addMovie adds a pair to myIMDb. The key is the title 
    of the movie while the value is a dictionary that matches characters to 
    actors""" 

    dict2 = {} 
    for i in range (0, len(charList)): 
     dict2 [charList[i]] = actList[i] 
    myIMDb[len(myIMDb)] = {title: dict2} 
    return myIMDb 




def listMovies(): 
    """returns a list of titles of all the movies in the global variable myIMDb""" 
    titles = [] 
    for i in range (len(myIMDb)): 
     titles.append((list(myIMDb[i].keys()))) 
    return titles 

Вот где у меня проблемы. Когда я хочу написать функцию findActor, мне нечего возвращать. Я не закончил с функцией, но я думаю, что сделал что-то принципиально неправильное. Я чувствую, что иду по неправильной дороге, и я становлюсь все более и более потерянным, чем больше пишу. Вот что у меня есть. Будут оценены любые предложения о том, как направить этот тонущий корабль.

def findActor(title, name): 
    myIMDb = {} 
    for i in range (len(myIMDb)): 
     if title == myIMDb[i].keys(): 
      if name == myIMDb[i].get(name): 
       return myIMDb[i].get(name) 
     else: 
      return "Error: No Movie found" 

ответ

1

Вам необходимо заполнить ваш myIMDB словарь в findActor, прежде чем использовать его.

Кроме того, я бы предложил сопоставление myIMDB непосредственно из названия перехода к персонажам. Другими словами, вместо того, чтобы делать myIMDb[len(myIMDb)] = {title: dict2} в вашем addMoive, вы должны просто сделать myIMDb[title] = dict2.

Таким образом, когда вам нужно посмотреть название и характер, вы можете просто сделать:

def findActor(title, name): 
    if title in myIMDb: 
     if name in myIMDb[title]: 
      return myIMDb[title][name] 
    return "Error: No movie found" 
+0

Я заселял myIMDb, я просто забыл сказать, что был. Я также сделал то, что вы предложили. И он сбросил мою функцию «listMovies», и я все равно получаю тот же самый пробник с моим findActor. Он ничего не возвращает, независимо от того, что я ввел в параметры. – Jonerhan

+1

Хм, не возвращая ничего, что вы имеете в виду, он просто ничего не возвращает или он возвращает ошибку? В вашем исходном коде, так как вы также инициализировали 'myIMDb' локально в пустой словарь, когда вы проходите через него, вы просто ничего не делаете, потому что в словаре нет ничего. Убедитесь, что вы используете глобальный myIMDb вместо локального пустого. – Penguinator

+0

Nevermind, я понял, это была просто тупая ошибка с моей стороны. Спасибо за вашу помощь! – Jonerhan

1

Первое, что нужно учиться, программировать на любом языке, чтобы уменьшить задачу подзадач , Здесь почему бы не начать сначала с создания только словаря ролей и актеров для одного фильма. Если вы не можете этого сделать, вы не сможете завершить полный проект.

После того, как вы это сделаете, возможно, все остальное встанет на свои места.

Предупреждение: в реальном мире иногда может сыграть роль более одного актера - например, роль, в которой ребенок созревает во взрослую жизнь. Но это скорее всего не в вашей спецификации.

+0

Не такие ли они обычно перечислены как разные роли в базе данных, хотя, например, «Взрослый Майк» и «Детский Майк»? – asmeurer

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