skip to navigation
skip to content

feed icon RSS хранилка

Трета задача

Публикувано на 20.03.2007 0:41 от николай
Последна промяна на 26.03.2007 15:37
Тази публикация е от предишно издание на курса, моля не разчитайте на актуалността на информацията.

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

Основната ви цел е да напишете функция със следните име и аргументи: module_game(m1, m2).

Входни данни: m1 и m2 са модули.

Резултат: n-торка с 2 елемента, с броя на точките събрали първия и втория модул при играта, която е описана по-долу в условието.

Предварително известни факти:

  • всички речници в модулите са или празни или само от цели числа. Ключовете им са винаги низове. Примери: {} {'baba': 5} {'a': 42, 'b': -69, 'x': 4360000634}
  • всички списъци в модулите са или празни или са списъци от n-торки от числа. n-торките също могат да бъдат празни. Примери: [] [()] [(1023, 4095, 8191), (), (), (0, 17), (3,)]
  • всички функции в модулите приемат два аргумента цели числа и връщат цяло число
  • може да разчитате, че тези условия ще бъдат изпълнени и няма нужда да ги проверявате

Правила на играта:

За атрибути по-надолу ще смятаме само тези реални атрибути на модулите, които не започват с _ (долна черта, подчертавка)

  • всеки модул получава 1 точка за всяка функция в него, чието име започва с последните 3 символа на друга функция в същия модул. Ето пример за част от модул, която ни гарантира две точки по този параграф:
    s = "baba"
    def destroy(x, y):
        print "Destroyed."
        return 0
    def roy_keen(x, y):
        print "Babyboy."
        return 0
    def roy_boss(x, y):
        print "Holy-shmolly, that is tea!"
        return 0
  • всеки модул получава 1 точка, за всеки списък в него, за който средното-аритметично на сумите от квадратите на n-орките в него е по-голямо от средно-аритметичното на всички цели числа в другия модул. Ако някоя n-торка е празна, нейната сума може да се смята за 0. Ако един списък е празен, неговото аритметично също може да се смята за 0. Пример: имаме списъка [(1, 2), (), (8, -2), (-1, 5, -1)]. Сумите на квадратите на n-торките са съответно: 5, 0, 68, 27. Средното им аритметично е точно 25.
  • по 1 точка получава модул, за всяка функция в него, която удовлетворява следните условия:
    • извикана с аргументи 0 и 0 връща 0
    • комутативна e за всички двойки числа от 0 до 99 включително

    Пример за такава функция: def f(x, y): return x*y

  • 3 точки носи на модул всеки речник, за който:
    1. нека сортираме стойностите му по брой на цифрите в низходящ ред
    2. ако две стойности имат равен брой цифри, приемаме, че те са ъгли в градуси и сравняваме техните тангенси (отново низходящо)
    3. взимаме ключовете на първите 6 елемента. Ако елементите на речника са по-малко от 6, спираме дотук
    4. ако тези 6 ключа са ‘Chapman’, ‘Cleese’, ‘Gilliam’, ‘Idle’, ‘Jones’, ‘Palin’ независимо в какъв ред или с малки или големи букви, модулът получва трите точки

    Пример за такъв речник: {'Chapman': 11, 'Charlie': 99, 'GILLIAM': 102, 'Idle': 666, 'Jones': 883, 'Palin': 55, 'Cleese': 1101}

Полезни функции:

  • callable — за проверка дали атрибут може да се сметне за функция
  • getattr, hasattr
  • type, isinstance — препоръчваме ви isinstance, макар за тази задача и type ще ви свърши работа
  • черешката на тортата: dir

Крайният срок за предаване е: 2-и април, 19:00 часа.

Успех :)