62
Technologie Informacyjne i Komunikacyjne R Python cz. 3 Katarzyna Grzelak 14 listopada 2019 K.Grzelak (UW) 1 / 62

Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Technologie Informacyjne i Komunikacyjne RPython cz. 3

Katarzyna Grzelak

14 listopada 2019

K.Grzelak (UW) 1 / 62

Page 2: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Sterowanie programem - podsumowanie -rozszerzenia

K.Grzelak (UW) 2 / 62

Page 3: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Instrukcje warunkowe - podsumowanie

if a>0:print(’Liczba dodatnia’)

Po instrukcji if mozna umiescic dowolna liczbe bloków elif i blokelse

if a==0:print(’Zero’)

elif a>0:print(’Liczba dodatnia’)

elif -10<a<0:print(’Liczba ujemna wieksza od -10’)

else:print(’Liczba ujemna mniejsza lub równa -10’)

K.Grzelak (UW) 3 / 62

Page 4: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Petla for - podsumowanie

Petla for po typie iteracyjnym. Wypisywanie liczb w jednymwierszu.

for i in range(0,6):print(i,end=" ")

print()

for i in range(2,20,2):print(i,end=" ")

print()

K.Grzelak (UW) 4 / 62

Page 5: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Petla for - podsumowanie

Petla for po typie sekwencyjnym. Wypisywanie liczb wkolumnie.

liczby = 15, 134, 12, 31for i in liczby:

print(i)

liczby=[234, 54, 15, 45]for i in liczby:print(i)

K.Grzelak (UW) 5 / 62

Page 6: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Petla while - podsumowanie

Petla while (wykonuje sie dotad az warunek wnagłówku przestanie byc spełniony)

i=0while i<5:

print(i)i+=1

K.Grzelak (UW) 6 / 62

Page 7: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Petle - podsumowanie

Instrukcja break przerywa działanie petli for lub while

Instrukcja continue powoduje przejscie do kolejnegoobiegu petliPetle for i while moga byc zakonczone else.

K.Grzelak (UW) 7 / 62

Page 8: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Petle - podsumowanie

for n in range(2, 10):for dzielnik in range(2, n):

if n % dzielnik == 0:print(n, ’=’, dzielnik, ’*’, n//dzielnik)break

else:print(n, ’jest liczba pierwsza’)

https://docs.python.org/3/library/

K.Grzelak (UW) 8 / 62

Page 9: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Instrukcja pass

Instrukcja pass zastepuje kod, który bedziemy chcieli wpisac wprzyszłosci

if a==0:print(’Zero’)

elif a>0:print(’Liczba dodatnia’)

elif -10<a<0:pass

else:print(’Liczba ujemna mniejsza lub równa -10’)

K.Grzelak (UW) 9 / 62

Page 10: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Wyrazenie trójargumentowe

x = A if B else C

rodzaj = ’parzysta’ if liczba%2==0 else ’nieparzysta’

print(’Liczba jest ’,rodzaj)

Równowazne takiej instrukcji warunkowej:

if liczba%2==0:rodzaj=’parzysta’

else:rodzaj=’nieparzysta’

print(’Liczba jest ’,rodzaj)

K.Grzelak (UW) 10 / 62

Page 11: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Typy sekwencyjne - podsumowanie

K.Grzelak (UW) 11 / 62

Page 12: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Modyfikowalne i niemodyfikowalne typy sekwencyjne

Sekwencje niemodyfikowalne (immutable)

krotka (tuple)ciag (łancuch) znaków (str)ciag (łancuch) bajtów (bytes)

Sekwencje modyfikowalne (mutable)

lista (list)

K.Grzelak (UW) 12 / 62

Page 13: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Krotki - kontynuacja

K.Grzelak (UW) 13 / 62

Page 14: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Krotki

Krotki – obiekty, których nie mozna zmieniac. Działajaszybciej od list.

Tworzenie krotek - przykładypusta_krotka = ()krotka1 = 1, 3, 4krotka2 = (5, 6, 7)krotka3 = tuple(’Napis’)krotka4 = tuple([125,81,16,25])krotka5 = tuple(range(5,15))krotka6 = ((1,4,9) , (1,2**3,3**3))

K.Grzelak (UW) 14 / 62

Page 15: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Rozpakowywanie krotek

# Rozpakowywanie krotki

a,b,c = krotka1print(a,b,c)a,b,c,*reszta = krotka5print(a,b,c)print(’reszta=’, reszta)

# Zamiana nazw zmiennych

liczba1=100liczba2=1000liczba1, liczba2 = liczba2, liczba1print (liczba1,liczba2)

K.Grzelak (UW) 15 / 62

Page 16: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Najwiekszy wspólny dzielnik - algorytm EuklidesaZamiana nazw zmiennych klasycznie

def nwd(a,b):# Jezeli a<b zamieniamy kolejnoscif a<b:temp=aa=bb=temp

while b:r=a%ba=bb=r

return a

K.Grzelak (UW) 16 / 62

Page 17: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Najwiekszy wspólny dzielnik - algorytm EuklidesaZamiana nazw zmiennych krócej

def nwd(a,b):# Jezeli a<b zamieniamy kolejnoscif a<b:a,b=b,a

while b:r=a%ba,b=b,r

return a

K.Grzelak (UW) 17 / 62

Page 18: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Rozpakowywanie krotek

punkty = ((3,7,5),(1,1,1),(8,5,3))

for x,y,z in punkty:print(x,y,x)

# To samo sformatowane: uzycie funkcji format

for x,y,z in punkty:print(’x={0}, y={1}, z={2}’.format(x,y,z))

Tak samo dla list

K.Grzelak (UW) 18 / 62

Page 19: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Listy - kontynuacja

K.Grzelak (UW) 19 / 62

Page 20: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Listy

Listy mozna modyfikowac. Moga miec zmiennadługosc.

Tworzenie list - przykładypusta_lista = []lista1 = [5, 6, 7]lista2 = list(’Napis’)lista3 = list([125,81,16,25])lista4 = list(range(5,15))lista5 = [[1,4,9] , [1,2**3,3**3]]

Listy znaków

znaki1=[’A’,’B’,’D’,’Z’] znaki2=list(’ABCDE’)

K.Grzelak (UW) 20 / 62

Page 21: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Listy - dodawanie i usuwanie elementów

s.append(j): Dodawanie elementu na konculistys.insert(i,n): Wstawianie elementu n podindeksem i (i przesuwanie).Wolniejsze niz appends.pop(i): Usuwanie elementu o indeksie i.s.remove(n): Usuwanie pierwszego elementu ookreslonej wartosci.s.extend(lista): Rozbudowanie listy

K.Grzelak (UW) 21 / 62

Page 22: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Powtórzenie. Kiedy tworzone nowe obiekty w pamieci?

Zwykłe zmienne

W drugiej linijce nazwy a i b sa zwiazane z tymsamym obszarem w pamieci !

a=15b=aa=123

K.Grzelak (UW) 22 / 62

Page 23: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Kiedy tworzone nowe obiekty w pamieci ?

Zwykłe zmiennea=15b=aa+=5

Zwykłe zmiennea=15b=ab+=5

K.Grzelak (UW) 23 / 62

Page 24: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Kiedy tworzone nowe obiekty w pamieci ?

Listy

W drugiej linijce nazwy lista2 i lista1 sa zwiazane ztym samym obszarem w pamieci !

lista1=[1,15,3,44,5]lista2=lista1lista1=[’pies’,’kot’,’mis’,15]

K.Grzelak (UW) 24 / 62

Page 25: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Kolejny przykład z listami

lista1=[1,15,3,44,5]lista2=lista1lista2[1]=666print("lista1= ", lista1)print("lista2= ", lista2)# Wymuszone stworzenie nowej listylista3=lista1[:]lista2[0]=0print("lista1= ", lista1)print("lista3= ", lista3)

Wyniklista1= [1, 666, 3, 44, 5]lista2= [1, 666, 3, 44, 5]lista1= [0, 666, 3, 44, 5]lista3= [1, 666, 3, 44, 5]

K.Grzelak (UW) 25 / 62

Page 26: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Podsumowanie

T1=[125,225,369]# Tu NIE tworzony nowy obiektT2=T1# Tu tworzony nowy obiektT3=T1[:]# Tu tez tworzony nowy obiektT4=list(T1)

Tak mozna sprawdzic czy tworzony nowy obiekt

if T2 is T1:print(’T1 i T2 odwoluja sie do tego ’’samego obiektu’)

K.Grzelak (UW) 26 / 62

Page 27: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Słowniki - poczatek

K.Grzelak (UW) 27 / 62

Page 28: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Słownik

Zbiór par klucz-wartosc. Rozmiar słownika (inaczej tablicyasocjacyjnej, mapy) moze sie zmieniac. Klucze od wartoscioddzielane sa dwukropkami.

Tworzenie słowników - przykładypusty_slownik = {}

Taki sam słownik zdefiniowany na kilka sposobów:

a = {’one’: 1, ’two’: 2, ’three’: 3}b = dict(one=1, two=2, three=3)c = dict(zip([’one’, ’two’, ’three’], [1, 2, 3]))d = dict(zip((’one’, ’two’, ’three’), (1, 2, 3)))e = dict([(’two’, 2), (’one’, 1), (’three’, 3)])f = dict({’three’: 3, ’one’: 1, ’two’: 2})

https://docs.python.org/3/library/

K.Grzelak (UW) 28 / 62

Page 29: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Słownik

a = {’one’: 1, ’two’: 2, ’three’: 3}print(list(a.keys()))print(list(a.values()))if ’four’ not in a:

print("Klucza ’four’ nie ma w słowniku")print(a[’one’])a[’one’]=0print(a)del a[’two’]print(a)

Wynik działania programu[’one’, ’two’, ’three’][1, 2, 3]Klucza ’four’ nie ma w słowniku1{’one’: 0, ’two’: 2, ’three’: 3}{’one’: 0, ’three’: 3}

K.Grzelak (UW) 29 / 62

Page 30: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Zbiory - poczatek

K.Grzelak (UW) 30 / 62

Page 31: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Zbiór

Zbiór nieuszeregowanych, unikalnych elementów(słowniki składajace sie z samych kluczy")

s1={1,2,5,6,6,5,5,5}s2=set([1,2,5,6,6,5,5,5])

Wynik działania programu{1, 2, 5, 6}{1, 2, 5, 6}

K.Grzelak (UW) 31 / 62

Page 32: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Listy składane

K.Grzelak (UW) 32 / 62

Page 33: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Listy składane

lista = [ f(i) for i in X if g(i) ]

Tworzenie listy lista z wartosci funkcji f na tychelementach obiektu X, które spełniaja warunek g.

K.Grzelak (UW) 33 / 62

Page 34: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Listy składane

Przykładlista = [i**2 for i in range(20) if i%2==1]

print(lista)

Konstrukcja równowazna do:

lista = []for i in range(20):

if i%2 == 1:lista.append(i**2)

print(lista)

K.Grzelak (UW) 34 / 62

Page 35: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Powiekszanie listy w funkcji

K.Grzelak (UW) 35 / 62

Page 36: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Przykład z poprzedniego wykładu

def dzien(x, L):L.append(x)return L

T1=[’TN’,"11.11.2019","C. Olimp."]print(dzien(’czwartek’,T1))print(dzien(’wtorek’,T1))print(dzien(’poniedzialek’,T1))

Wynik działania programu[’TN’, ’11.11.2019’, ’C. Olimp.’, ’czwartek’][’TN’, ’11.11.2019’, ’C. Olimp.’, ’czwartek’, ’wtorek’][’TN’, ’11.11.2019’, ’C. Olimp.’, ’czwartek’, ’wtorek’, ’poniedziałek’]

K.Grzelak (UW) 36 / 62

Page 37: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Wersja 2

def dzien(x, L):L2=L[:]L2.append(x)return L2

T1=[’TN’,"11.11.2019","Centrum Olimpijskie"]print(dzien(’czwartek’,T1))print(dzien(’wtorek’,T1))print(dzien(’poniedzialek’,T1))

Wynik działania programu[’TN’, ’11.11.2019’, ’Centrum Olimpijskie’, ’czwartek’][’TN’, ’11.11.2019’, ’Centrum Olimpijskie’, ’wtorek’,][’TN’, ’11.11.2019’, ’Centrum Olimpijskie’, ’poniedziałek’]

K.Grzelak (UW) 37 / 62

Page 38: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Wersja 3

def dzien(x, L):L2=list(L)L2.append(x)return L2

T1=[’TN’,"11.11.2019","Centrum Olimpijskie"]print(dzien(’czwartek’,T1))print(dzien(’wtorek’,T1))print(dzien(’poniedzialek’,T1))

Wynik działania programu[’TN’, ’11.11.2019’, ’Centrum Olimpijskie’, ’czwartek’][’TN’, ’11.11.2019’, ’Centrum Olimpijskie’, ’wtorek’,][’TN’, ’11.11.2019’, ’Centrum Olimpijskie’, ’poniedziałek’]

K.Grzelak (UW) 38 / 62

Page 39: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje - podsumowanie

K.Grzelak (UW) 39 / 62

Page 40: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje - podsumowanie

Funkcje – podstawowy sposób organizacji kodu uzywanegowielokrotnie.

Instrukcja return przerywa działanie funkcji i zwraca daneW funkcji moze byc wiecej niz jedno polecenie return

Jesli nie ma zadnego return to funkcja zwraca obiekt None

K.Grzelak (UW) 40 / 62

Page 41: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje – zwracanie wartosci logicznej

Przykładdef doskonala(liczba):

suma = 0for i in range(1,liczba):

if liczba%i == 0:suma+=i

if suma==liczba:return True

else:return False

K.Grzelak (UW) 41 / 62

Page 42: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje – zwracanie wielu wartosci

Funkcja moze zwracac wiele wartosci !!

def sumy(a,b):suma_p=0suma_np=0for liczba in range(a,b+1):

if(liczba%2==0):suma_p+=liczba

else:suma_np+=liczba

suma=suma_p+suma_npreturn suma_p,suma_np,suma

suma1,suma2,suma_tot = sumy(1,10)# Mozna tez tak:wyniki = sumy(5,30)

K.Grzelak (UW) 42 / 62

Page 43: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje - zakresy waznosci zmiennych

Zakresy waznosci zmiennych

def f1():l1 = []for i in range(1,10):

l1.append(i)

# Mozliwe, ale nie polecane:l2 = []def f2():

for i in range(1,10):l2.append(i)

f1()f2()# Bład# print(l1)print(l2)

K.Grzelak (UW) 43 / 62

Page 44: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje - argumenty domyslne

def wypisz(imie,nazwisko,grupa=4,rok=1):print(imie, nazwisko, grupa, rok )

wypisz(’Jan’,’Kowalski’)wypisz(’Piotr’,’Majewski’,5,2)wypisz(’Adam’,’Nowakowski’,rok=3)wypisz(nazwisko="Makowska",imie="Anna",rok=3,grupa=5)

K.Grzelak (UW) 44 / 62

Page 45: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Argumenty funkcji

Funkcje moga miec argumenty:pozycyjnedefiniowane za pomoca słów kluczowych (dodefiniowania wartosci domyslnych)

Argumenty definiowane za pomoca słów kluczowychmusza byc za argumentami pozycyjnymi.

K.Grzelak (UW) 45 / 62

Page 46: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Przekazywanie do funkcji elementów listy/krotki ilisty/krotki jako całosci

Przekazujemy elementy listydef suma(a,b,c):

return a+b+c

lista=[4,5,2]

print(suma(*lista))

Przekazujemy cała listedef suma(l):

return sum(l)

lista=[4,5,2]

print(suma(lista))

K.Grzelak (UW) 46 / 62

Page 47: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Zmienna liczba argumentów funkcji

def fun1(*args):print(args)return len(args)

print(fun1(’Ala ma kota’))print(fun1(25,77,’Kwadrat’,25.5))

def fun2(*args,**kwargs):print(args)print(kwargs)

fun2(25,77,imie="Anna",grupa=4)

K.Grzelak (UW) 47 / 62

Page 48: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Funkcje anonimowe - lambda

Zwykła funkcjadef kwadrat(x):

return x**2print(kwadrat(5))

Funkcja lambdakwadrat_l = lambda x: x**2print (kwadrat_l(5))

Inna funkcja lambdasuma = lambda a,b,c: a+b+cprint(suma(5,10,15))

K.Grzelak (UW) 48 / 62

Page 49: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Dokumentacja funkcji

Dokumentacja funkcji - przykładdef suma(a,b,c):

" To jest funkcja do sumowania "return a+b+c

lista=[4,5,2]

print(suma.__doc__)

K.Grzelak (UW) 49 / 62

Page 50: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Biblioteki naukowe - kontynuacja

K.Grzelak (UW) 50 / 62

Page 51: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

https://www.scipy.org

K.Grzelak (UW) 51 / 62

Page 52: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Konwencje importowania bibliotek

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

W przypadku duzych bibliotek, np. Numpy,importowanie w sposób: from numpy import *to zła praktyka

K.Grzelak (UW) 52 / 62

Page 53: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Pakiet SciPy

Pakiet SciPyBiblioteka do zastosowan naukowychTutaj dopasowywanie funkcji do danych, liniowa algebra,całkowanie . . .Uzycie: import scipy.optimize

Uzycie skrótowe: import scipy.optimize as sp

Uzycie (dopasowanie funkcji do danych):from scipy.optimize import curve_fitWtedy curve_fit zamiast sp.curve_fit.

K.Grzelak (UW) 53 / 62

Page 54: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Dopasowywanie krzywych do danych

K.Grzelak (UW) 54 / 62

Page 55: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Dopasowywanie krzywej teoretycznej do danych

Wywołanie funkcji dopasowujacej krzywa teoretyczna do danychpar,cov = curve_fit(f,x,y,p0=start,sigma=s,absolute_sigma=True)

Funkcja zwraca macierz 1D z parametrami (par) i macierzkowariancji 2D (cov)f – dopasowywana funkcjax – macierz ze współrzednymi x punktówy – macierz ze współrzednymi y punktówp0 – macierz z poczatkowymi wartosciami parametróws – macierz z błedami y

Jesli nie podamy poczatkowych wartosci parametrów, to kazdy bedziemiał przypisana wartosc jeden.

K.Grzelak (UW) 55 / 62

Page 56: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Dopasowywanie krzywej teoretycznej do danych

Czesc 1 programu

import numpy as npimport matplotlib.pyplot as ptfrom scipy.optimize import curve_fit

# Wczytywanie danych do macierzydata = np.loadtxt(’linetest.txt’)x = data[:, 0]y = data[:, 1]s = data[:, 2]# Rysowanie punktow z bledamipt.errorbar(x, y, yerr = s, fmt=’o’)

K.Grzelak (UW) 56 / 62

Page 57: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Dopasowywanie krzywej teoretycznej do danych

Czesc 2 programu

# Definicja funkcji dopasowywanejdef f(x, a, b):

return a * x + b# Parametry poczatkowestart=np.array([1,0])# Glowna funkcja, wynik to macierz# z parametrami i macierz kowariancjipar, cov = curve_fit(f, x, y,p0=start,sigma=s,absolute_sigma=True)# Rysowanie dopasowywanej krzywejx2 = np.arange(-10, 10, 0.1)pt.plot(x2, f(x2,*par))pt.show()

K.Grzelak (UW) 57 / 62

Page 58: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Dopasowywanie krzywej teoretycznej do danych

Czesc 3 programu

# Wypisywanie dopasowanych parametrow i ich bledowprint("parametry= ", par)print("errors= ", np.sqrt(np.diag(cov)))

K.Grzelak (UW) 58 / 62

Page 59: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Histogramy

PrzykładPrzykładowo: w pliku pomiary.txt znajduja sie wyniki 100 pomiarówokresu wahadła matematycznego. Chcemy zrobic rozkład czestosciwystepowania wyników z okreslonego przedziału.

import numpy as npimport matplotlib.pyplot as pt

data = np.loadtxt(’pomiary.txt’)pt.hist(data)pt.xlabel(’T[s]’)pt.ylabel(’N’)pt.title(’Wyniki pomiarow okresu wahadla’)pt.show()

K.Grzelak (UW) 59 / 62

Page 60: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Histogramy

PrzykładRysunek bedacy wynikiem działania programu z poprzedniej strony.

3.10 3.15 3.20 3.25 3.30 3.35 3.40 3.45T[s]

0

10

20

30

40

50

60

N

Wyniki pomiarow okresu wahadla

K.Grzelak (UW) 60 / 62

Page 61: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

Generacja liczb losowych

W bibliotece random:Generacja rzeczywistej liczby losowej z przedziału [a,b):

random.uniform(a,b)

Generacja rzeczywistej liczby losowej z przedziału [0.0,1.0)random.random()

W bibliotece numpy:Generacja n całkowitych liczb losowych z przedziału [a,b):

data=np.random.randint(a,b,n)

Generacja n rzeczywistych liczb losowych z przedziału [a,b):

data=a+(b-a)*np.random.random_sample(n)

K.Grzelak (UW) 61 / 62

Page 62: Technologie Informacyjne i Komunikacyjne Rkaste/tikr/Wyklad7_TIKR.pdf · 2019-11-26 · Petla˛ for - podsumowanie Petla˛ forpo typie sekwencyjnym.Wypisywanie liczb w kolumnie. liczby

interpreter python3bardziej zaawansowany interpreter ipython3notatnik Jupyter Notebook https://jupyter.org :polecenie jupyter notebook otwiera notatnik wprzegladarcerozbudowane srodowiska programistyczne: PyDev,PyCharm, Spyder . . .

K.Grzelak (UW) 62 / 62