Печать таблицы из словаря
Вот вопрос, для которого я должен кодировать:
Напишите контракт, строку документации и реализацию для функции showCast, которая берет заголовок фильма и печатает символы с соответствующими актерами / актрисами из данного фильма в алфавитном порядке символов. Столбцы должны быть выровнены (20 символов (включая имя персонажа) перед именем актера / актрисы.) Если фильм не найден, выводится сообщение об ошибке.
Это дает пример того, что должно произойти здесь
>>> showCast("Harry Potter and the Sorcerer's Stone")
Character Actor/Actress
----------------------------------------
Albus Dumbledore Richard Harris
Harry Potter Daniel Radcliffe
Hermione Granger Emma Watson
Ron Weasley Rupert Grint
>>> showCast('Hairy Potter')
No such movie found
Вот другие функции, которые я написал для того же проекта, которые, вероятно, помогут ответить на вопрос. Сводка того, что я должен был сделать до сих пор, заключается в том, что я создаю словарь myIMDb с ключом названия фильма и значением другого словаря. В этом словаре этот ключ является персонажем фильма, а значение - актером. И я с этим покончил. myIMDb - это глобальная переменная для записи.
Другие функции, которые они делают, это docString
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[title] = dict2
return myIMDb
Я добавил три фильма,
addMovie("Shutter Island", ["Teddy Daniels", "Chuck Aule"],["Leonardo DiCaprio, ","Mark Ruffalo"])
addMovie("Zombieland", ["Columbus", "Wichita"],["Jesse Eisenberg, ","Emma Stone"])
addMovie("O Brother, Where Art Thou", ["Everett McGill", "Pete Hogwallop"],["George Clooney, ","John Turturro"])
def listMovies():
"""returns a list of titles of all the movies in the global variable myIMDb"""
return (list(myIMDb.keys()))
def findActor(title, name):
""" takes a movie title and a character's name and returns the
actor/actress that played the given character in the given movie. If the
given movie or the given character is notfound, it prints out an error
message"""
if title in myIMDb:
if name in myIMDb[title]:
return myIMDb[title][name]
else:
return "Error: Character not in Movie"
else:
return "Error: No movie found"
Теперь, где у меня проблемы
Я должен написать функцию showCast, но у меня много проблем. Я возился с этим некоторое время, но когда я вызываю myIMDb.values (), все возвращается. И я не могу, кажется, перебрать его, чтобы отсортировать их для создания таблицы.
Вот что я придумала до сих пор, но это не делает то, на что я надеялась. Я просто надеюсь, что один из вас сможет направить меня в правильном направлении. (Закомментированная область - это то, что я делал раньше, просто чтобы вы могли видеть мой ход мыслей. [Print (alist) и print(alist[0]) были просто для того, чтобы подтвердить, что это одна большая запись в списке, а не отделены на всех])
def showCast(title):
if title in myIMDb:
actList=[]
chList=[]
aList = list(myIMDb.values())
print (aList)
print (aList[0])
""""for i in range (len(aList)):
if i%2==0:
chList.append(aList[i])
else:
actList.append(aList[i])
print(chList)
print(actList)""""
else:
return "Movie not Found"
1 ответ
Это старый вопрос, но я сделаю удар. Я думаю, что ваша путаница происходит от вложенной природы объекта myIMDb. Чтобы получить информацию о конкретных фильмах, вы должны использовать заголовок в качестве ключа к myIMDb, например myIMDb[title]
, То, что вы получите, - это еще один словарь, который вы затем сможете использовать для получения пар "ключ / символ".
Вот рабочая версия функции showCast:
def showCast(title):
if title in myIMDb:
print("{0:20} {1:20}".format("Character", r"Actor/Actress"))
print("-"*40)
for character, actor in myIMDb[title].items():
print("{0:20} {1:20}".format(character, actor))
else:
return "Movie not Found"
Первый оператор print генерирует заголовок и использует метод строки формата Python, чтобы получить желаемый выровненный интервал. Следующим оператором print является делитель, а затем ядро функции просто перебирает пары с циклом for.
Надеюсь, это поможет.