# -*- coding: utf-8 -*- #Zadanie 1 y = 42 def f(x): # pracujemy na globalnej zmiennej, tj. # zmiany w bloku funkcji zmienią wartość y na stałe # początkowa wartość x i modyfikacje tej zmiennej nie mają # wpływu na modyfikacje zmiennej y (przekazanie parametru przez wartość) global y # x = 42, y = 42 x += y # x = 84, y = 42 y += x + y # x = 84, y = 168 return x print f(y), y #Odp: 84 168 #------------------------------------------------------------------------- m = [1,2,3] def g(l): global m if len(l) <= 1: # przypadek len(l) == 1 : l = [7], m=[3,2,3] return l else: # przypadek len(l) == 3 : l=[7,8,9], m=[1,2,3] # przypadek len(l) == 2 : l=[7,m] , m=[2,2,3] m[0] += 1 # przypadek len(l) == 3 : l=[7,8,9], m=[2,2,3] # przypadek len(l) == 2 : l=[7,m], m=[3,2,3] l[1] = m # umieszczając m jako element innej listy # de facto wpisujemy tam adres tej zmiennej # tj. nie kopiujemy wartości z danego momentu wykonania # przypadek len(l) == 3 : l=[7, m, 9], m=[2,2,3] # przypadek len(l) == 2 : l=[7, m], m=[3,2,3] return l + g(l[:-1]) # przypadek len(l) == 3 : return [7, m, 9, g([7, m])] # przypadek len(l) == 2 : return [7, m, 9, 7, m, g([7])] # ostatecznie po zwinięciu rekurencji wynikiem wywołania jest: # [7,m,9,7,m,7] z wartością m po powrocie z wywołań rekurencyjnych print g([7,8,9]), m #Odp: [7, [3,2,3], 9, 7, [3,2,3], 7] [3, 2, 3] #------------------------------------------------------------------------- #Zadanie 2 import re f = open('kontakty.txt') name = r"(?P[A-Za-z]+)(?P [A-Za-z]+)?-" tel = re.compile(name+r"(\(\+\d\d\)[ -])?((?P\d\d-\d\d\d-\d\d-\d\d)|(?P\d\d\d-\d\d\d-\d\d\d))") email = re.compile(name+r"([A-Za-z0-9.]+@\w+(\.\w+)+)") telefony = [] maile = [] for line in f: # można założyć, że wpisy pojawiają się w całości w jednej linii results = tel.findall(line) for m in results: nazwa = m[0] # imię, m[1] nazwisko, m[2] kierunkowy if m[3] != '': #ustawiamy telefon stacjonarny jeśli taki był podany telefon = m[3] else: #podany telefon był komórkowy telefon = m[4] if m[2] == '': telefon = '(+48)-' + telefon #dodajemy domyślny kierunkowy else: telefon = m[2] + telefon #lub podany kierunkowy telefony.append((nazwa, telefon)) results = email.findall(line) for m in results: nazwa = m[0] mail = m[2] maile.append((nazwa, mail)) print telefony print maile #print telefony == [("Ania","(+48)-111-222-333"),("Ola","(+49)-22-600-90-90")], #print maile == [("Ola","ola@jakis.email.com"),("Jan","bajcki.jan13@bajtlandia.bt")] #------------------------------------------------------------------------- #Zadanie 3 def wysokie(poz, wart, x): d = {} #klucz: warunek, wartość: lista genów for trojka in wart: if trojka[2] > x and d.has_key(trojka[1]): #wartość genu spełnia warunek i gen już w słowniku d[trojka[1]].append(trojka[0]) elif trojka[2] > x and not d.has_key(trojka[1]): #wartość genu spełnia warunek i genu nie ma w słowniku d[trojka[1]] = [trojka[0]] return d def srednie(poz, wart): d = {} #klucz: (chromosom, warunek), wartość: lista wartości genów na chromosomie w danych warunkach for para in poz: for trojka in wart: if trojka[0] == para[0]: #nazwa genu się zgadza if d.has_key((para[1], trojka[1])): #dodanie nowej wartości genu dla pary (chromosom, warunek) d[(para[1], trojka[1])].append(trojka[2]) else: #dodanie do słownika nowej pary (chromosom, warunek) i stworzenie nowej listy wartości d[(para[1], trojka[1])] = [trojka[2]] for k in d.keys(): #wyliczenie średnich z listy wartości d[k] = sum(d[k])/float(len(d[k])) return d def chromosomy(poz, wart, x): d = {} #klucz: chromosom, wartość: zbiór warunków for para in poz: for trojka in wart: if trojka[0] == para[0] and trojka[2] > x: if d.has_key(para[1]): d[para[1]].add(trojka[1]) else: d[para[1]] = set([trojka[1]]) return d poz = [('Gen a','1'),('gen x','Y'),("Gen B", "1")] wart = [('Gen a','cieplo', 50.0), ('Gen a','zimno', 30.5), ("Gen B", "cieplo", 10.0), ('gen x','zimno', 250)] print wysokie(poz, wart, 40) #{"ciepło":["Gen a"],"zimno":["gen x"]} print srednie(poz, wart) #{ ("1","ciepło"):30.0, ("1","zimno"):30.5, ("Y","zimno"):250.0 } print chromosomy(poz, wart, 30) #{ "1": set(["ciepło","zimno"], "Y": set(["zimno"]) }