Wrocław, 07.11.2017 Wstęp do informatyki i programowania: Wykresy i interfejsy użytkownika Wydział Matematyki Politechniki Wrocławskiej Andrzej Giniewicz
Dzisiaj na zajęciach... Instrukcje sterujące Biblioteka NumPy Biblioteka Matplotlib Biblioteka ipywidgets 1/35
Instrukcje sterujące Instrukcje sterujące 2/35
Instrukcje sterujące if Instrukcja if jest podobna do filtrów w produktowaniu list oraz wyrażenia if. Od filtru różni się tym, że może wystąpić w dowolnym miejscu bloku jako samodzielna instrukcja, od wyrażenia różni się tym, że nie posiada wartości. Instrukcja ta oznacza w przybliżeniu jeżeli. Instrukcje sterujące 3/35
Instrukcje sterujące if Instrukcja if jest podobna do filtrów w produktowaniu list oraz wyrażenia if. Od filtru różni się tym, że może wystąpić w dowolnym miejscu bloku jako samodzielna instrukcja, od wyrażenia różni się tym, że nie posiada wartości. Instrukcja ta oznacza w przybliżeniu jeżeli. Instrukcję if zapisujemy w następujący sposób. i f warunek : # b l o k kodu, gdy warunek t o prawda Instrukcje sterujące 3/35
Więcej o if Instrukcja if może mieć dowolną liczbę kontynuacji zapisywanych jako elif. Są one sprawdzane, gdy wcześniejsze warunki nie zachodzą. Oznaczają mniej więcej w przeciwnym razie, jeżeli. Instrukcje sterujące 4/35
Więcej o if Instrukcja if może mieć dowolną liczbę kontynuacji zapisywanych jako elif. Są one sprawdzane, gdy wcześniejsze warunki nie zachodzą. Oznaczają mniej więcej w przeciwnym razie, jeżeli. i f warunek1 : # co, gdy warunek1 j e s t prawdą e l i f warunek2 : # co, gdy warunek1 j e s t f a ł szem, a l e 2 prawdą e l i f warunek3 : # co, gdy 1 i 2 j e s t f a ł szem, a l e 3 prawdą Instrukcje sterujące 4/35
To nie koniec if Niezależnie od tego, czy występowały wcześniej warunki elif czy nie, warunek równoważny elif True, zapisujemy jako else. Oznacza on mniej więcej w przeciwnym razie. Instrukcje sterujące 5/35
To nie koniec if Niezależnie od tego, czy występowały wcześniej warunki elif czy nie, warunek równoważny elif True, zapisujemy jako else. Oznacza on mniej więcej w przeciwnym razie. i f n%2==0: p r i n t ( n, " j e s t l i c z b ą parzyst ą " ) e l se : p r i n t ( n, " j e s t l i c z b ą n i e p a r z y s t ą " ) Instrukcje sterujące 5/35
Pętla for Pętla for jest tym dla generatorów z produktowania list, czym instrukcja if dla filtrów. Ma podobne działanie, ale może występować w dowolnym bloku kodu. Oznacza mniej więcej dla. Łączy się z instrukcją in oznaczającą mniej więcej należących do. Instrukcje sterujące 6/35
Pętla for Pętla for jest tym dla generatorów z produktowania list, czym instrukcja if dla filtrów. Ma podobne działanie, ale może występować w dowolnym bloku kodu. Oznacza mniej więcej dla. Łączy się z instrukcją in oznaczającą mniej więcej należących do. for zmienna in l i s t a : # kod, k t ó ry ma s i ę wykona ć # d l a ka ż dego elementu l i s t y Instrukcje sterujące 6/35
Przykład L = [ a, b, c ] for x in L : p r i n t ( " teraz x to ", x ) Instrukcje sterujące 7/35
Przykład L = [ a, b, c ] for x in L : p r i n t ( " teraz x to ", x ) W wyniku dostaniemy teraz x to a teraz x to b teraz x to c Instrukcje sterujące 7/35
Produktowanie za pomocą instrukcji Rozważmy kod L = l i s t ( range ( 1 0 ) ) X = [ ( x, y ) for x in L for y in L i f y<x ] Instrukcje sterujące 8/35
Produktowanie za pomocą instrukcji Rozważmy kod L = l i s t ( range ( 1 0 ) ) X = [ ( x, y ) for x in L for y in L i f y<x ] Jest to mniej więcej to samo, co L = l i s t ( range ( 1 0 ) ) X = [ ] for x in L : for y in L : i f y<x : X. append ( ( x, y ) ) Instrukcje sterujące 8/35
break i continue W pętlach są dwie dodatkowe instrukcje break oraz continue. Komenda break powoduje przerwanie pętli, natomiast continue powoduje zignorowanie reszty bloku kodu i pobranie nowego elementu z listy. Instrukcje sterujące 9/35
break i continue W pętlach są dwie dodatkowe instrukcje break oraz continue. Komenda break powoduje przerwanie pętli, natomiast continue powoduje zignorowanie reszty bloku kodu i pobranie nowego elementu z listy. for x in range (1000000): i f x > 10: break i f x%2 == 0: continue p r i n t ( x ) Instrukcje sterujące 9/35
break i continue W pętlach są dwie dodatkowe instrukcje break oraz continue. Komenda break powoduje przerwanie pętli, natomiast continue powoduje zignorowanie reszty bloku kodu i pobranie nowego elementu z listy. for x in range (1000000): i f x > 10: break i f x%2 == 0: continue p r i n t ( x ) Na ekranie zobaczymy liczby: 1, 3, 5, 7, 9. Instrukcje sterujące 9/35
else w for Co ciekawe, w języku Python do pętli for można dodać instrukcję else. Fragment kodu z else zostanie wykonany, pętla zakończy się bez użycia break. Instrukcje sterujące 10/35
else w for Co ciekawe, w języku Python do pętli for można dodać instrukcję else. Fragment kodu z else zostanie wykonany, pętla zakończy się bez użycia break. for x in L : i f x%2==0: p r i n t ( "W L j e s t l i c z b a parzysta " ) break e l se : p r i n t ( "W L nie ma l i c z b y p a r z y s t e j " ) Instrukcje sterujące 10/35
Czy to wszystko? Nie! Okazuje się, że jest jeszcze jeden rodzaj pętli. Pętle te mają ogólniejszą budowę, ponieważ nie muszą przechodzić po liście. Pętla ta to while, która mniej więcej oznacza dopóki. Instrukcje sterujące 11/35
Czy to wszystko? Nie! Okazuje się, że jest jeszcze jeden rodzaj pętli. Pętle te mają ogólniejszą budowę, ponieważ nie muszą przechodzić po liście. Pętla ta to while, która mniej więcej oznacza dopóki. while warunek : # wykonuje b l o k tak d ł ugo, # dopó k i warunek j e s t prawdą Instrukcje sterujące 11/35
Czy to wszystko? Nie! Okazuje się, że jest jeszcze jeden rodzaj pętli. Pętle te mają ogólniejszą budowę, ponieważ nie muszą przechodzić po liście. Pętla ta to while, która mniej więcej oznacza dopóki. while warunek : # wykonuje b l o k tak d ł ugo, # dopó k i warunek j e s t prawdą W instrukcji while możemy użyć break i continue oraz else. Działają tak samo, jak w pętli else. Instrukcje sterujące 11/35
Przykład z while a, b = 0, 1 while a < 100: p r i n t ( a ) a, b = b, a+b Instrukcje sterujące 12/35
Przykład z while a, b = 0, 1 while a < 100: p r i n t ( a ) a, b = b, a+b Wyświetli się 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89. Instrukcje sterujące 12/35
To już wszystko? Nie, ale wystarczy nam na długo. Poznaliśmy znaczną część języka Python! Nie poznaliśmy: programowania obiektowego, Instrukcje sterujące 13/35
To już wszystko? Nie, ale wystarczy nam na długo. Poznaliśmy znaczną część języka Python! Nie poznaliśmy: programowania obiektowego, wyjątków, Instrukcje sterujące 13/35
To już wszystko? Nie, ale wystarczy nam na długo. Poznaliśmy znaczną część języka Python! Nie poznaliśmy: programowania obiektowego, wyjątków, środowisk,... Instrukcje sterujące 13/35
To już wszystko? Nie, ale wystarczy nam na długo. Poznaliśmy znaczną część języka Python! Nie poznaliśmy: programowania obiektowego, wyjątków, środowisk,... Większość z tych rzeczy wymaga programowania obiektowego i choć ułatwia programowanie, to można sobie poradzić bez tego. Dalszy ciąg dopiero na kursie z programowania. Teraz zajmijmy się bibliotekami spoza biblioteki standardowej. Instrukcje sterujące 13/35
Biblioteka NumPy Biblioteka NumPy 14/35
Biblioteka NumPy NumPy (Numerical Python) jest biblioteką dostarczającą szybki i wydajny typ danych dla wektorów, macierzy oraz więcej wymiarowych tablic. Biblioteka NumPy 15/35
Biblioteka NumPy NumPy (Numerical Python) jest biblioteką dostarczającą szybki i wydajny typ danych dla wektorów, macierzy oraz więcej wymiarowych tablic. Czym się różni od list? Głównie wydajnością, ale również tym, że podstawowe operacje działają po elementach. Przykładowo list [1,2,3] i [0,0,1] operacja dodawania stworzy listę [1,2,3,0,0,1], natomiast dla wektorów, stworzy wektor o elementach 1 + 0 = 1, 2 + 0 = 2 oraz 3 + 1 = 4. W przypadku macierzy istnieje możliwość mnożenia element po elemencie (dla macierzy tego samego wymiaru) lub mnożenia uwzględniającego wymiary (zgodnego z matematyczną definicją mnożenia macierzy). Biblioteka NumPy 15/35
Biblioteka NumPy NumPy (Numerical Python) jest biblioteką dostarczającą szybki i wydajny typ danych dla wektorów, macierzy oraz więcej wymiarowych tablic. Czym się różni od list? Głównie wydajnością, ale również tym, że podstawowe operacje działają po elementach. Przykładowo list [1,2,3] i [0,0,1] operacja dodawania stworzy listę [1,2,3,0,0,1], natomiast dla wektorów, stworzy wektor o elementach 1 + 0 = 1, 2 + 0 = 2 oraz 3 + 1 = 4. W przypadku macierzy istnieje możliwość mnożenia element po elemencie (dla macierzy tego samego wymiaru) lub mnożenia uwzględniającego wymiary (zgodnego z matematyczną definicją mnożenia macierzy). Dodatkowo biblioteka NumPy definiuje odpowiedniki funkcji matematycznych (np.: sin), które działają na wektorach (funkcja jest liczona na każdym elemencie wektora). Biblioteka NumPy 15/35
Tworzenie wektorów Podczas zajęć interesować nas będą tylko tablice wymiaru 1 (wektory). Biblioteka NumPy 16/35
Tworzenie wektorów Podczas zajęć interesować nas będą tylko tablice wymiaru 1 (wektory). Zaczynamy od importu biblioteki import numpy as np Biblioteka NumPy 16/35
Tworzenie wektorów Podczas zajęć interesować nas będą tylko tablice wymiaru 1 (wektory). Zaczynamy od importu biblioteki import numpy as np Możemy je stworzyć z listy, krotki lub dowolnego typu uporządkowanego. np. array ( l i s t a ) # z l i s t y np. arange ( i, j, k ) # j a k range, od i do j co k np. l i n s p a c e ( a, b, n ) # n punkt ów r ówno od a do b np. zeros ( n ) # wektor n z e r np. ones ( n ) # wektor n j e d y n e k Biblioteka NumPy 16/35
Typy danych Mamy kilka podstawowych typów, najpopularniejsze to np.float oraz np.int. Jeśli tworzymy tablicę z listy np. array ( [ 1, 2, 3 ] ) powstanie wektor liczb całkowitych. Jeśli chcemy aby były to liczby zmiennoprzecinkowe, piszemy np. array ( [ 1, 2, 3 ], np. f l o a t ) Biblioteka NumPy 17/35
Typy danych Mamy kilka podstawowych typów, najpopularniejsze to np.float oraz np.int. Jeśli tworzymy tablicę z listy np. array ( [ 1, 2, 3 ] ) powstanie wektor liczb całkowitych. Jeśli chcemy aby były to liczby zmiennoprzecinkowe, piszemy np. array ( [ 1, 2, 3 ], np. f l o a t ) Tak samo działa dla pozostałych funkcji (następny po opisanych parametr). Biblioteka NumPy 17/35
Operacje na wektorach A = np. array ( [ 1, 0, 0 ] ) B = np. array ( [ 1, 1, 1 ] ) ( B A) 7 / (A + 1) Biblioteka NumPy 18/35
Operacje na wektorach A = np. array ( [ 1, 0, 0 ] ) B = np. array ( [ 1, 1, 1 ] ) ( B A) 7 / (A + 1) Co to jest? B A = (1, 1, 1) (1, 0, 0) = (0, 1, 1). Natomiast (B A) 7 = (0, 7, 7). A + 1 = (1, 0, 0) + 1 = (2, 1, 1). Całość wyrażenia, to (0/2, 7/1, 7/1) = (0, 7, 7). Biblioteka NumPy 18/35
Operacje na wektorach import math t = np. arange ( 0, 4 math. pi, math. p i / 2 ) np. s i n ( t ) Biblioteka NumPy 19/35
Operacje na wektorach import math t = np. arange ( 0, 4 math. pi, math. p i / 2 ) np. s i n ( t ) Co to jest? t to wektor od 0 do 4π (bez 4π) co π/2. Końcowy wektor, to w przybliżeniu (0, 1, 0, 1, 0, 1, 0, 1). Biblioteka NumPy 19/35
Biblioteka Matplotlib Biblioteka Matplotlib 20/35
Importowanie Matplotlib Matplotlib to biblioteka do robienia wykresów. Jak jej używać? Importujemy ją i to, co potrzebne do obliczeń. import m a t p l o t l i b. pyplot as p l t import numpy as np import math Biblioteka Matplotlib 21/35
Importowanie Matplotlib Matplotlib to biblioteka do robienia wykresów. Jak jej używać? Importujemy ją i to, co potrzebne do obliczeń. import m a t p l o t l i b. pyplot as p l t import numpy as np import math Dodatkowo, aby widzieć wykresy, gdzieś w notatniku wywołujemy komórkę zawierającą %m a t p l o t l i b i n l i n e Biblioteka Matplotlib 21/35
Pierwszy wykres x = np. l i n s p a c e ( math. pi, math. pi, 100) y = np. s i n ( x ) p l t. p l o t ( x, y ) Biblioteka Matplotlib 22/35
Jak zrobić własną funkcję? @np. v e c t o r i z e def sinus_kwadrat ( x ) : return math. s i n ( x ) 2 Biblioteka Matplotlib 23/35
Jak zrobić własną funkcję? @np. v e c t o r i z e def sinus_kwadrat ( x ) : return math. s i n ( x ) 2 x = np. l i n s p a c e ( math. pi, math. pi, 100) y = sinus_kwadrat ( x ) p l t. p l o t ( x, y ) Biblioteka Matplotlib 23/35
Dokumentacja http://matplotlib.org/api/pyplot_api.html# matplotlib.pyplot.plot http://matplotlib.org/gallery.html Biblioteka Matplotlib 24/35
Biblioteka ipywidgets Biblioteka ipywidgets 25/35
Najpierw importy %m a t p l o t l i b i n l i n e from ipywidgets import i n t e r a c t import m a t p l o t l i b. pyplot as p l t import numpy as np import math Biblioteka ipywidgets 26/35
Zaczynamy od rysunku f = 10 phi = 0 T = 1/ f t = np. l i n s p a c e ( 0, 5 T, 1000) x = np. s i n (2 math. p i f t + phi ) p l t. p l o t ( t, x ) Biblioteka ipywidgets 27/35
Robimy funkcję def r y s u j ( ) : f = 10 phi = 0 T = 1/ f t = np. l i n s p a c e ( 0, 5 T, 1000) x = np. s i n (2 math. p i f t + phi ) p l t. p l o t ( t, x ) r y s u j ( ) Biblioteka ipywidgets 28/35
Parametryzujemy def r y s u j ( f, phi ) : T = 1/ f t = np. l i n s p a c e ( 0, 5 T, 1000) x = np. s i n (2 math. p i f t + phi ) p l t. p l o t ( t, x ) r y s u j (10, 0) Biblioteka ipywidgets 29/35
Interact! def r y s u j ( f, phi ) : T = 1/ f t = np. l i n s p a c e ( 0, 5 T, 1000) x = np. s i n (2 math. p i f t + phi ) p l t. p l o t ( t, x ) p l t. show ( ) i n t e r a c t ( rysuj, f =(1, 3, 0. 0 1 ), phi =( 5, 5, 0. 0 1 ) ) Biblioteka ipywidgets 30/35
Dekorowane @interact ( f =(1, 3, 0. 0 1 ), phi =( 5, 5, 0. 0 1 ) ) def r y s u j ( f, phi ) : T = 1/ f t = np. l i n s p a c e ( 0, 5 T, 1000) x = np. s i n (2 math. p i f t + phi ) p l t. p l o t ( t, x ) p l t. show ( ) Biblioteka ipywidgets 31/35
Dokumentacja https://ipywidgets.readthedocs.io Biblioteka ipywidgets 32/35
Gdzie dalej Możemy tworzyć dowolne, nawet bardzo skomplikowane interfejsy graficzne. Na przykład https://www.youtube.com/watch?v=bh0rtx0qq5w http://bfy.tw/8uen Biblioteka ipywidgets 33/35
W następnym odcinku Kończymy z programowaniem, zaczynamy z informatyką zaczynamy od szukania miejsc zerowych i ekstremów. Biblioteka ipywidgets 34/35
Pytania? Pytania? 35/35