Трета задача
Публикувано на 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 точки носи на модул всеки речник, за който:
- нека сортираме стойностите му по брой на цифрите в низходящ ред
- ако две стойности имат равен брой цифри, приемаме, че те са ъгли в градуси и сравняваме техните тангенси (отново низходящо)
- взимаме ключовете на първите 6 елемента. Ако елементите на речника са по-малко от 6, спираме дотук
- ако тези 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 часа.
Успех :)