prog2_przygotowanie

2044 days ago by macieksk

# Napisz funkcję, która przyjmuje dowolnie wiele argumentów nienazwanych i zwraca listę wszystkich, które są napisami 
       
# Napisz funkcję, która przyjmuje dowolnie wiele argumentów nazwanych i zwraca słownik tych, które są liczbami (int lub float) 
       
# Napisz funkcję f(lst,a,b,k), która dla danej listy [x1,x2,..,xn] zwraca listę [a*x1+b,..,a*xn+b], ale tylko takie elementy, że abs(a*x+b)<k # Napisz 3 wersje tej funkcji: # 1. używając pętli for # 2. używając konstruktora listowego ([... for x in lst if ...] # 3. używając funkcji map oraz filter 
       
# Napisz tę samą funkcję działającą (lepiej) na jednowymiarowej np.array 
       
# Napisz funkcję "tuplefun", która przyjmuje za argument jednoargumentową funkcję f i zwraca jednoargumentową funkcję zwracającą tupla (x,f(x)) # Przyklad def f(x): return x**2 g=tuplefun(f) g(2) --> (2,4) g(3) --> (3,9) 
       
# Napisz iterator który zwraca wszystkie podciągi długości n z listy def subn(lst,n): ... # Przykład: # list(subn([1,2,3,4,5],3)) --> [[1,2,3],[2,3,4],[3,4,5]] 
       
# Napisz iterator, który używając iteratora "subn", zwróci początkowe pozycje wszystkich stałych podciągów długości n z listy. def const_begins(lst,n): ... # Przykład # list(const_begins([1,2,2,1,1,2,2,2],2)) --> [1,3,5,6] 
       
#Napisz iterator, który zwróci wszystkie kwadratowe minory macierzy (np.array) zaczepione w lewym dolnym rogu # oraz w prawym górnym rogu. Użyj przycinania macierzy przez indeksowanie. def minors_ld_ur(m): ... 
       
# Napisz iterator, który zwróci wszystkie przekątne "prawo-dół" z macierzy. def right_down_all_diagonals(m): ... 
       
#Napisz iterator, ktory zwroci kolejne srednie z ruchomego okna wielkosci k def moving_avg(lst,k): ... list(moving_avg([1,2,3,4,5],k=3)) --> [2,3,4] 
       
#Napisz funkcje, ktory zwroci liste indeksow "outlierów" - elementow, ktore odstaja od sredniej ruchomej (k-nieparzyste) o wiecej niz d 
       
 
       
#Napisz funkcje, ktora dla listy powtarzajacych sie byc moze elementow zwroci liste par: element i # a) ilosci wystapien tego elementu ['a','a',1,2,1] --> [('a',2), (1,2), (2,1)] # b) indeksy wystapien kazdego elementu ['a','a',1,2,1] --> [('a',[0,1]), (1,[2,4]), (2,[3])] 
       
# Napisz funkcje, ktora dla wektora np.array zwroci indeksy pierwszych wystapien kazdego elementu. firsts_idx(np.array([2,1,2,3,1])) --> [0,1,3] 
       
# Napisz funkcję, która sprawdza, czy napis złożony z samych nawiasów "(" ")" tworzy poprawne wyrażenie nawiasowe brackets_ok("()(()())") --> True brackets_ok("()())())") --> False 
       
# Napisz iterator, który zwraca indeksy początków i końców nawiasów z poprawnego wyrażenia nawiasowego (w dowolnej kolejnosci) list(brackets_idx("()(()())")) --> [(0,1),(3,4),(5,6),(2,7)] 
       
######### Klasy 
       
# Przeczytaj http://www.tutorialspoint.com/python/python_classes_objects.htm # 
       
# Napisz klasę InitList , która jest listą (dziedziczy) # i obiekty tej klasy tworzy sie w nastepujacy sposob # InitList(n=4,el='a') --> zwraca obiekt InitList, ktory jest listą: ['a','a','a','a'] # InitList(n=5,el=2) --> zwraca obiekt InitList, ktory jest listą: [2,2,2,2,2] 
       
# Zmien sposob w jaki InitList wypisuje sie na ekranie na nastepujacy: <<{x0},{x1},{x2}>> 
       
# Napisz klase, ktora inicjalizuje sie jako abc=ABC(a=1,b='2',c=10) # zapamietuje parametry a,b,c i pozwala tylko na ich odczyt: abc.a abc.b abc.c 
       
# Napisz klase Abecadlo ktora inicjalizuje sie z dowolna liczba nazwanych parametrow, ktore zapamietuje na swoich zmiennych 
       
# Napisz klase mabc=MacierzABC(x=10,y=15) stworzy "macierz" obiektów ABC z losowymi wartosciami a,b,c i ma nastepujace funkcje # mabc.new_abc() - zwraca losowy obiekt klasy ABC # mabc.a(x,y) - zwroci parametr "a" z obiektu ABC na pozycji (x,y) # itp dla b i c 
       
# Napisz podklase MacierzAAA, ktora tworzy macierz obiektow ABC, gdzie a=b=c # Rozwaz rozwiazanie z napisaniem pomocniczej klasy AAA(ABC) 
       
# Napisz podklase MacierzABC_kw, ktora tworzy zawsze macierze kwadratowe. 
       
# Rozbij poprzednie rozwiazanie na rozwiazanie na rozwiązanie typu Mixin # 1. Niech MacierzAAA_mixin wyglada tak samo jak MacierzAAA, ale nie dziedziczy z MacierzABC # 2. Niech MacierzABC_kw_mixin wyglada tak samo jak MacierzABC_kw, ale nie dziedziczy z MacierzABC # Jak dzialaja teraz nastepujace klasy: class MacierzAAA(MacierzAAA_mixin,MacierzABC): pass class MacierzABC_kw(MacierzABC__kw_mixin,MacierzABC): pass class MacierzAAA_kw(MacierzAAA__mixin, MacierzABC__kw_mixin, MacierzABC): pass 
       
 
       
# O niejasnościach związanych z zadaniem "mixin" i MRO (Method Resolution Order) można przeczytać tutaj http://stackoverflow.com/questions/1848474/method-resolution-order-mro-in-new-style-python-classes 
       
class A(): def __init__(self): print "A" class B(A): def __init__(self): print "B" class C(A): pass class D(C,B): pass D() 
       
A
<__main__.D instance at 0x555b7a0>
class A(object): def __init__(self): print "A" class B(A): def __init__(self): print "B" class C(A): pass class D(C,B): pass D() 
       
B
<__main__.D object at 0x52d7610>
class A(object): def method(self): print "A" class B(A): def method(self): print "B" class C(A): pass class D(C,B): pass D().method() 
       
B