skip to navigation
skip to content

feed icon RSS хранилка

Втора задача

Публикувано на 21.03.2008 1:22 от николай
Последна промяна на 23.03.2008 11:34
Тази публикация е от предишно издание на курса, моля не разчитайте на актуалността на информацията.

Брой точки, които дава задачата: 5.

Краен срок: 26-и март 2008г., 19:00 часа.

Формуляр за изпращане.

Условие

Напишете функция build(songs, bands), която връща тройка от функции.

songs е списък от песни, всеки елемент, на който е тройка: (име на песен, изпълнител, етикети). Името на песента и изпълнителя са низове, а етикетите са n-торка от низове. Пример: [('Have a Cigar', 'Pink Floyd', ('saxophone',))]

bands е списък от двойки (изпълнител, етикети), където изпълнителят е низ, а етикетите са n-торка от низове. Пример: ('Alice In Chains', ('staley', 'grunge'))

Всички етикети на изпълнител важат и за песните му. Пример: ако Alice In Chains има етикети staley и grunge, а песента им Frogs има етикет sad според songs, то за Frogs ще важат също етикетите staley и grunge.

Даваме ви честната си дума, че множеството от изпълнители в songs и в bands е едно и също.

Резултатът от build трябва да бъде тройка от функции:

  1. Нулевата приема един аргумент band_name и връща списък от низове — етикетите на изпълнителя и етикетите на всичките му песни.
  2. Първата приема неограничен брой аргументи — етикети. Връща списък от песните, които имат всички тези етикети. Песните са двойки (име на песен, изпълнител).
  3. Втората приема един аргумент band_name и връща списък от имената на песните на изпълнителя.

Няма значение в какъв ред са стойностите в списъците, връщани от функциите. Важно е, обаче, в тях да няма повтарящи се стойности.

Ето ви един дългичък пример:

>>> songs = [
            ('Man In A Box', 'Alice In Chains', ('famous', 'power')),
            ('Frogs', 'Alice In Chains', ('sad',)),
            ('Right Turn', 'Alice In Chains', ('cornell',)),
            ('Hunger Strike', 'Temple of the Dog', ('vedder',)),
            ('Reach Down', 'Temple of the Dog', ()),
            ('Long Gone Day', 'Mad Season', ('saxophone', 'lanegan')),
            ('November Hotel', 'Mad Season', ('power',)),
            ('Nearly Lost You', 'Screaming Trees', ()),
            ('Indifference', 'Pearl Jam', ('sad',)),
            ('Thursday', 'Morphine', ('power',)),
            ('Outshined', 'Soundgarden', ()),
            ('Have a Cigar', 'Pink Floyd', ('saxophone',)),
            ('Time', 'Pink Floyd', ())
        ]
>>> bands = [
            ('Alice In Chains', ('staley', 'grunge')),
            ('Temple of the Dog', ('grunge', 'cornell')),
            ('Pearl Jam', ('vedder', 'grunge')),
            ('Screaming Trees', ('lanegan', 'grunge')),
            ('Morphine', ('low rock', 'saxophone')),
            ('Pink Floyd', ('psychadelic',)),
            ('Soundgarden', ('grunge', 'cornell')),
            ('Mad Season', ('grunge', 'staley'))
        ]
>>> tags_by_band, songs_by_tags, songs_by_band = build(songs, bands)
>>> tags_by_band('Alice In Chains')
['staley', 'grunge', 'famous', 'power', 'sad', 'cornell']
>>> songs_by_tags('power', 'grunge')
[('Man In A Box', 'Alice In Chains'), ('November Hotel', 'Mad Season')]
>>> songs_by_band('Temple of the Dog')
['Hunger Strike', 'Reach Down']

Важно

Не ползвайте глобални променливи, моля.

Примерен тест

Връзка: p2-sample.py

Тестът може да изпълните като свалите p2-sample.py, заедно с него в една директория запазите своето решение, именувано p2.py и изпълните p2-sample.py. Крайната ви цел е да получите OK някъде из резултата.

Тестът не гарантира, че сте си решили задачата на 100%, но поне ще ви гарантира, че не сте допуснали глупава грешка, която да ви коства всички точки.