Spotkania z Pythonem Cz ± 1 - podstawy - rozwi zania zada«michaª Alichniewicz Studenckie Koªo Automatyków SKALP Gda«sk 2014 Dzi kuj za uwag! Na licencji Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 1 / 13
Zadanie 1 Napisz 2 funkcje realizuj ce silni na 2 sposoby: rekurencyjnie oraz iteracyjnie. M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 2 / 13
Zadanie 1 - rozwi zanie Wersja rekurencyjna: def silnia(liczba): Oblicza silnie w sposob rekurencyjny. Zwraca False jezeli nie mozna jej obliczyc. if liczba < 0: # Liczba musi byc ostatnia! return False elif liczba == 0: # 0! = 1 return 1 else: # Tradycyjny wzor rekurencyjny # n! = n * (n-1)! return liczba * silnia(liczba-1) M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 3 / 13
Zadanie 1 - rozwi zanie Wersja iteracyjna: def silnia(liczba): Oblicza silnie w sposob iteracyjny. Zwraca False jezeli nie mozna jej obliczyc. if liczba < 0: # Liczba musi byc dodatnia! return False elif liczba == 0: # 0! = 1 return 1 else: # Tradycyjny wzor iteracyjny # n! = n * (n-1) * (n-2) *... return_ = 1 while liczba > 0: return_ *= liczba liczba -= 1 return return_ M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 4 / 13
Zadanie 1 - rozwi zanie Wersje alternatywne korzystaj c z bardziej zaawansowanego Pythona. Rekurencyjnie: silnia = lambda n: 1 if n < 1 else n * silnia(n-1) Iteracyjnie: silnia = lambda n: 1 if n < 1 else \ reduce(lambda x, y: x * y, range(1, n + 1)) M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 5 / 13
Zadanie 2 Napisz funkcj, która sprawdzi czy w podanej przez u»ytkownika kolekcji (lista, tupla, sªownik, tekst) istnieje element o podanym przez u»ytkownika kluczu. Funkcja powinna zwraca warto± logiczn True je»eli dany klucz istnieje, oraz logiczne False w przeciwnym wypadku. M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 6 / 13
Zadanie 2 - rozwi zanie def has_index(collection, key): Sprawdza czy w danej kolekcji jest element o zadanym kluczu. try: _ = collection[key] except: # Lapiemy wszystko - moze byc KeyError # albo IndexError - w kazdym razie, # indeksu nie ma return False else: # Udalo sie dobrac do elementu - index jest return True M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 7 / 13
Zadanie 3 Napisz funkcj, która stworzy list b d c sum dwóch list a i b tak,»e lista wynikowa b dzie miaªa tylko unikalne warto±ci z obu list (mo»esz zaªo»y,»e warto±ci listy a jak i b s unikalne wewn trz tych list). Obrazowo: a = suma_list([1,2,3,4], [3,4,5,6]) # a powinno wynosic [1,2,3,4,5,6] M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 8 / 13
Zadanie 3 - rozwi zanie def suma_list(list_1, list_2): Zwraca sume dwoch list, gdzie elementy sa unikalne return_ = list_1 for item in list_2: if item not in list_1: # Element nie istnieje w list_1 return_ += [item] return return_ M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 9 / 13
Zadanie 3 - rozwi zanie Podobnie jak dla zadania 1, da si to zrobi nieco krócej za pomoc Python way: suma_list = lambda x,y: x + [i for i in y if i not in x] M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 10 / 13
Zadanie 4 Zaimplementuj algorytm sita Erastotenesa (wyszukiwanie liczb pierwszych z zadanego zakresu - patrz http://pl.wikipedia.org/wiki/sito_eratostenesa - w inny sposób ni» podany - bez usuwania elementów listy, a tworz c now ) M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 11 / 13
Zadanie 4 - rozwi zanie def sito(zakres): Algorytm sita Erastotenesa w najprostszej implementacji - wykreslanie przez zastapienie zerem. # Liczby do filtracji lista = range(2,zakres) # Wynik liczby_pierwsze = [] # Dla kazdego elementu w liscie for element in lista: if element > 0: # Jak zero - to wykreslony # Dopisz do listy elementow liczby_pierwsze = liczby_pierwsze + [element] for i in range(0,len(lista)): if lista[i] % element == 0: # Wielokrotnosc lista[i] = 0 # Kasujemy return liczby_pierwsze M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 12 / 13
Spotkania z Pythonem Cz ± 1 - podstawy - rozwi zania zada«michaª Alichniewicz Studenckie Koªo Automatyków SKALP Gda«sk 2014 Dzi kuj za uwag! Na licencji Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. M. Alichniewicz (SKALP) Python vol. 1 - rozwi zania 2014 13 / 13