Modelowanie procesów fizycznych w reaktorach jadrowych

Podobne dokumenty
Kurs rozszerzony języka Python

Kurs rozszerzony języka Python

Język Python. Język Python 1/35

Wykresy i interfejsy użytkownika

Zaawansowany kurs języka Python

Wstęp do Pythona. Janusz Szwabiński. Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.1/36

Zaawansowany kurs języka Python

Kurs rozszerzony języka Python

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Język Python (2) Język Python (2) 1/36

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Środowisko programisty

Wprowadzenie do Python

Podstawy programowania w Pythonie

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Python. Wprowadzenie. Jolanta Bachan

Podstawy programowania w Pythonie

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

Listy, krotki, słowniki, funkcje

Języki i metody programowania

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Podstawy programowania w Pythonie

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Przegląd języka Python. Łukasz Anwajler

rozdział 4: ZMIENNE I INSTRUKCJE

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Programowanie obiektowe

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Programowanie w języku Python. Grażyna Koba

Programowanie obiektowe

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Koło Studentów Informatyki Uniwersytetu Wrocławskiego

Wstęp do programowania

Ćwiczenie 3. Python 3: Python 3: Funkcje, moduły i operacje na plikach

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Wstęp do informatyki. Python 1

Technologie cyfrowe semestr letni 2018/2019

Zasady programowania Dokumentacja

Podstawy programowania w Pythonie

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Programowanie robota mobilnego E-puck w języku Python

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Wstęp do programowania

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek


Programowanie obiektowe

PHP: bloki kodu, tablice, obiekty i formularze

Podstawy programowania skrót z wykładów:

Języki i metody programowania

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Język C++ wykład VIII

Python wstęp. Michał Bereta

Programowanie obiektowe

Python wstęp do programowania dla użytkowników WCSS

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

System operacyjny Linux

Operacje wejścia/wyjścia (odsłona druga) - pliki

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków

Podstawy bioinformatyki 2017/18

System operacyjny Linux

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Wstęp do Informatyki dla bioinformatyków

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wyjątki (exceptions)

KOTLIN. Język programowania dla Androida

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Style programowania - krótki przeglad

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Technologie cyfrowe semestr letni 2018/2019

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Podstawy bioinformatyki 2017/18

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Podstawy i języki programowania

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

1 Przygotował: mgr inż. Maciej Lasota

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Programowanie i struktury danych

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

Podstawy programowania: Python. Wprowadzenie. Jolanta Bachan

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Delphi Laboratorium 3

Transkrypt:

Modelowanie procesów fizycznych w reaktorach jadrowych Krzysztof Miernik Zakład Fizyki Jadrowej Wydział Fizyki Uniwersytet Warszawski 1

Wykład 2: Wprowadzenie do Pythona 2

Język Python Stworzony w 1991 przez Guido van Rossuma Nazwa pochodzi od Monty Python Flying Circus Jest językiem wysokiego poziomu ogólnego przeznaczenia Jednym z naczelnych założeń projektowych jest czytelność kodu Umożliwia programowanie proceduralne, obiektowe i funkcyjne Typowanie dynamiczne i słabe Automatyczne zarzadzanie pamięcia Bardzo bogata biblioteka standardowa (batteries included) Nieprawdopodobnie bogate biblioteki dodatkowe (i sa łatwe do instalowania) Dlaczego Python? 3

Python, a inne języki Dlaczego Python? 4

Dlaczego Python? Google Trends popularno zapyta wzgl dem kategorii Programowanie Python C++ Fortran Dlaczego Python? 5

Dlaczego Python? Nature 518, 7537 (2015) Dlaczego Python? 6

Wprowadzenie do Pythona Python jako kalkulator liczby, ciagi znaków, listy instrukcje while, if, for skrypty, moduły listy, krotki, słowniki metody wejścia/wyjścia programowanie obiektowe biblioteka standardowa inne biblioteki Podstawy Pythona 7

Python jako kalkulator Duża część przykładów pochodzi z oficjalnego wprowadzenia do Pythona https://docs.python.org/3/tutorial/index.html. Obliczenia w interpreterze >>> 2 + 2 >>> 12 * 0.153-0.33 >>> 12 * (0.153-0.33) >>> 17 / 3 >>> 17 // 3 >>> 17 % 3 >>> 2**3 >>> 2**(1/2) >>> -3**2 >>> (-3)**2 >>> width = 20 >>> height = 50 + 9 >>> width * height >>> _ / 10**2 Podstawy Pythona 8

Łańcuchy znaków (1) Definiowanie łańcucha, polecenie print >>> spam eggs >>> doesn\ t >>> "doesn t" >>> "Yes", he said. >>> "\"Yes\", he said." >>> First line.\nsecond line. >>> s = First line.\nsecond line. >>> print(s) >>> print( C:\some\name ) >>> print(r C:\some\name ) >>> print("""\ Ala ma kota """) >>> 3 * un + ium Podstawowe struktury danych 9

Łańcuchy znaków (2) Podzbiory łańcucha, operacje >>> prefix = Py >>> glued = prefix + thon >>> glued[0] >>> glued[5] >>> glued[-1] >>> glued[-2] >>> glued[0:2] >>> glued[-2:] >>> glued[:2] >>> glued[:2] + glued[2:] >>> glued[0] = C >>> C + glued[1:] >>> len(glued) Podstawowe struktury danych 10

Łańcuchy znaków (3) Formatowanie łańcucha >>> print( {}.format( string )) >>> print( {} ma {}.format( ala, kota )) >>> s = "{0} {1} {2}" >>> s = s.format( Ala, ma, kota ) >>> print(s) >>> s = "{kto} {co} {kogo}" >>> s = s.format(kto= Ala, co= ma, kogo= kota ) >>> print(s) >>> pi = 3.141592653589793 >>> print(pi) >>> print( {:.3f}.format(pi)) >>> print( {:.3e}.format(pi)) >>> print( {: 8.3f}.format(pi)) >>> print( {:#^8.1f}.format(pi)) >>> print( {:*>8.1f}.format(pi)) >>> print( {:$<8.1f}.format(pi)) Podstawowe struktury danych 11

Listy Definiowanie, podstawowe operacje >>> squares = [1, 4, 9, 16, 25] >>> squares >>> squares[2] >>> squares[-1] >>> squares[0:2] >>> squares + [35, 49, 64, 81, 100] >>> squares = squares + [35, 49, 64, 81, 100] >>> squares >>> squares[5] = 36 >>> squares >>> len(squares) >>> letters = [ a, b, c ] >>> mix = squares + letters >>> mix >>> mix = [squares, letters] >>> mix >>> mix[0][3] >>> mix[1][2] Podstawowe struktury danych 12

Skrypty Program można zapisać w postaci skryptu w pliku tekstowym z rozszerzeniem *.py. Np. test.py squares = [1, 4, 9, 16, 25] print(squares) squares = squares + [35, 49, 64, 81, 100] print(squares) squares[5] = 36 print(squares) Skrypt można uruchomić poleceniem $ python test.py Kolejne przykłady będa wykorzystywały tę metodę zamiast interaktywnej powłoki Pythona. Skrypty 13

Instrukcja while Uwaga - w języku Python wcięcia definuja bloki kodu. Należy używać albo spacji, albo tabulatorów, ale nie wolno ich mieszać! a = 0 while a < 5: print(a) a += 1 a, b = 0, 1 while b < 10: print(b) a, b = b, a+b a, b = 0, 1 while b < 100: print(b, end=, ) a, b = b, a+b Instrukcje kontrolne 14

Instrukcja if x = 3 if x < 0: x = 0 print( Negative changed to zero ) elif x == 0: print( Zero ) elif x == 1: print( One ) else: print( More ) Instrukcje kontrolne 15

Pętla for (1) Pętla for porusza się po liście lub innej sekwencji z iteratorem cats = [ natasza, marusia, bolek, lolek ] for c in cats: print(c) Jeżeli chcemy dostać ciag arytmetyczny możemy użyć funkcji range for i in range(5): print(i) for i in range(5, 10): print(i) for i in range(0, 10, 3): print(i) for i in range(10, -5, -2): print(i) Ponieważ długość listy zwraca funkcja len, łatwo jest wygenerować ciag arytmetyczny odpowiadajacy danej liście elementów for i in range(len(cats)): print(i, cats[i]) Instrukcje kontrolne 16

Pętla for (2) W rzeczywistości range nie generuje listy, tylko iterator print(range(5)) print(list(range(5))) W pętli for możemy stosować polecenia break i continue. for num in range(2, 10): if num % 2 == 0: print("found an even number", num) continue print("found a number", num) Polecenie else jest wykonywane tylko jeżeli pętla nie zostanie przerwana przez break. for n in range(2, 20): for x in range(2, n): if n % x == 0: print(n, equals, x, *, n//x) break else: print(n, is a prime number ) Instrukcje kontrolne 17

Pętla while Polecenia continue, break, else można stosować w analogiczny sposób także w pętli while. x = 10 n = 7 while x > 0: if x % n == 0: print(x, is divisible by, n) break x -= 1 else: print( while - else ) Polecenie pass wykonuje pusta instrukcję i może być użyte w miejscach wymaganych przez składnię (np. jako puste miejse do wypełnienia w przyszłości. print( Press ctrl+c ) while True: pass Instrukcje kontrolne 18

Listy i ich metody (1) append, extend, insert, remove, pop, index, count, sort, reverse l = [3, 5, 1] print( list, l) l.append(9) print( append, l) l.extend([7, 13]) print( extend, l) l.insert(5, 11) print( insert, l) l.remove(1) print( remove, l) print(l.pop()) print( pop(), l) print(l.pop(2)) print( pop(2), l) print( 5 at position, l.index(5)) print( 11 appears, l.count(11), times ) l.sort(reverse=true) print( sort, reverse, l) l.reverse() print( reversed, l) Struktury danych 19

Listy i ich metody (2) copy, clear, del m = l.copy() print( copy, l, m) l.clear() print( clear, l, m) del nie zwraca wartości i usuwa element (lub zmienna) del m[0] print( del, m) del m[0:2] print( del, m) del m #print( del, m) Struktury danych 20

Kopiowanie list l = [1, 2, 3] m = l l[0] = 4 print(l, m) m jest tylko referencja do listy. Aby mieć dwie niezależne listy, musimy zrobić kopię. m = l.copy() l[0] = 1 print(l, m) l = [[0], [0], [0]] print(l) m = l.copy() l[0].append(1) print( l =, l, ; m =, m) Ta kopia jest tzw. kopia płytka i nie działa w przypadku zagnieżdżonych struktur. Trzeba użyć kopii głębokiej (o słowie import będzie później). import copy n = copy.deepcopy(l) l[1].append(1) print( l =, l, ; m =, m, ; n =, n) Struktury danych 21

Listy składane squares = [] for i in range(1, 10): squares.append(i**2) print(squares) To samo tylko szybciej (comprehension list) squares = [i**2 for i in range(1, 10)] print(squares) pairs = [(x, y) for x in range(1, 5) for y in range(1, 5) if x < y] print(pairs) pairs = [[(x, y) for x in range(1, z) for y in range(1, z) if x < y] for z in range(3, 6)] for i, p in enumerate(pairs): print(i, p) Struktury danych 22

Krotki i zbiory Krotki (tuple) sa podobne do list, ale sa niezmienne t = 1, 2, 3 r = (1, 2, 3) print(t, r) #t[0] = 0 #r[0] = 0 Zbiory (sets) sa jak zbiory matematyczne (nie może być duplikatów) s = {0, 0, 1, 1, 2, 3} print(s) Operator in odpowiada na pytanie o należność do zbioru (także listy, krotki, itd.) print(0 in s) print( Is in the set ) if 4 in s else print( Not in the set ) Struktury danych 23

Słowniki Słownik (dict) zawiera pary klucz - wartość (klucz musi być unikatowy) d = { Marek : 2.64, Krzysiek : 2.65, Agnieszka : 2.66 } print(d) print(d[ Marek ]) for k, v in d.items(): print(k, v) Klucz musi być niezmienny, więc np. tworzac mapę nuklidów (A, Z) musimy użyć tupli, a nie list jako kluczy. elements = {0 : n, 1 : H, 2 : He, 3 : Li, 4 : Be, 5 : B, 6 : C } nuclides = {} for z in range(len(elements)): for a in range(z, 3 * z): nuclides[(a, z)] = {}{}.format(a, elements[z]) print(nuclides) print( sort by key ) for n in sorted(nuclides.items()): print(n) Struktury danych 24

Funkcje (1) Funkcje tworzy się za pomoca składni def pitagoras(a, b): return (a**2 + b**2)**(1/2) a woła poprzez pitagoras(3, 4) Parametry moga mieć nadane domyślne wartości def arguments(x, x_max=1, dx=0.1): while x < x_max: print(x, x**(1/2)) x += dx wywołanie może mieć wtedy następujace postaci arguments(0.0) arguments(0.0, 2.0) arguments(0.0, dx=0.05) Funkcje 25

Funkcje (2) Odzyskiwanie parametrów w postaci listy i słownika def foo(i, j=1, *arguments, **keywords): print( i =, i) print( j =, j) print( arguments ) for arg in arguments: print(arg) print( keys ) for key in keywords.keys(): print(key) print( values ) for value in keywords.values(): print(value) print( items ) for item in keywords.items(): print(item) print( keys and values ) for key, value in keywords.items(): print(key, value) foo(0, 1, 2, 3, a=4, b=5, c=6) Funkcje 26

Funkcje (3) Parametr domyślny jest wyznaczany tylko raz i w miejscu deklaracji, co ma konsekwencje w pewnych przypadkach x = 5 def f1(arg=x): print(x) x = 6 f1() def f2(a, l=[]): l.append(a) return l print(f2(0)) print(f2(1)) Funkcje 27

Funkcja anonimowa Funkcja anonimowa (lambda) cubic = lambda x: x**3 print(cubic(2)) W szczególności można ich użyć przy sortowaniu list czy słowników for n in sorted(nuclides.items(), key=lambda x: x[0][1] ): print(n) Funkcje 28

Dokumentacja Funkcje (a także inne elementy) powinno się opisywać łańcuchem dokumentacyjnym (docstring). Python automatycznie obsługuje tak tworzona dokumentację. def foo(x): """Podnosi parametr x do kwadratu Bardzo prosta funkcja (bez sensu) """ return x**2 print(foo. doc ) Dokumentacja 29

Moduły Moduł to plik z rozszerzeniem *.py zawierajacy funkcje (i klasy), który można importować i używać w innym module. Plik nuclear_masses.py """ This module contains various methods of calculating nuclear masses. """ def LDM(A, Z, params=standard_params): """Liquid Drop Model""" pass def experimental_mass(a, Z, database= AME2013.dat ): pass if name == main : pass Jeżeli wywołamy powyższy plik jako skrypt, to wykonaja się polecenia obwarowane instrukcja if. Jeżeli natomiast zaimportujemy do innego skryptu, to ta część zostanie pominięta. Moduły i pakiety 30

Moduły Importowanie modułu import nuclear_masses nuclear_masses.ldm(10, 20) Importowanie wybranych funkcji from nuclear_masses import LDM LDM(10, 20) lub wszystkich (zwykle nie używane) from nuclear_masses import * LDM(10, 20) Moduły i pakiety 31

Pakiety Pakiety to moduły, które zawieraja inne moduły (w formie hierarchicznego drzewa) Taki pakiet to np. biblioteka matplotlib służaca do tworzenia wykresów. Zwykle importowany jest tylko moduł pyplot zawierajacy API użytkownika, ale czasem przydaja się inne elementy, np. moduł pozwalajacy na tworzenie animacji animation. import matplotlib.pyplot import matplotlib.animation matplotlib.pyplot.plot(x, y, - ) matplotlib.animation.funcanimation() Wygodnie jest zamiast długiej nazwy zaimportować moduł pod skrócona (dowolna) nazwa import matplotlib.pyplot as plt import matplotlib.animation as movie plt.plot(x, y, - ) movie.funcanimation() Moduły i pakiety 32

Pliki Funkcja open zwraca obiekt powiazany z plikiem, w zależności od trybu otwarcia może być on do odczytu (r), pisania (w, istniejacy plik zostaje skasowany), dopisywania (a), odczytu i zapisu (r+). Dodanie litery b do trybu oznacza tryb binarny, w innym przypadku jest to tryb tekstowy. data_file = open( data.txt, r) Funkcja read służy do czytania danych, read() wczyta cały plik, read(size) wczyta size bajtów. data_file.read(10) Funkcja readline wczytuje jedna linię tekstu (łacznie ze znakiem końca linii). data_file.readline() for line in data_file: print(line, end= ) write służy do pisania w pliku, natomiast seek i tell odpowiednio przesuwaja i zwracaja położenie bieżacej pozycji w pliku. data_file.write( {} {} {} \n.format(0, 0, 1) data_file.seek(10) data_file.tell() Operacje I/O 33

Błędy Prosty program w C++, z drobnym błędem #include <iostream> #include <vector> int main() { std::vector<int> v; if (v > 0) v.pop_back(); } i wynik kompilacji (149 linii) /usr/include/c++/6.3.1/bits/stl_iterator.h:906:5: note: template argument deduction/substitution failed: a.cpp:7:13: note: std::vector<int> is not derived from const gnu_cxx:: normal_iterator<_iterator, _Container> if (v > 0) ^ In file included from /usr/include/c++/6.3.1/bits/stl_algobase.h :67:0, from /usr/include/c++/6.3.1/bits/char_traits.h :39, from /usr/include/c++/6.3.1/ios:40, from /usr/include/c++/6.3.1/ostream:38, from /usr/include/c++/6.3.1/iostream:39, Wyjatki 34

Błędy w Pythonie Podobny program l = [0, 1, 2] if l > 0: l.pop() i próba uruchomienia Traceback (most recent call last): File "test.py", line 2, in <module> if l > 0: TypeError: > not supported between instances of list and int Wszelkie błędy sa zwracane w postaci wyjatków (Exception), należacych do odpowiednich klas. Powyżej mamy bład typu (TypeError). Program wcale nie musi przerywać działania w takiej sytuacji, możliwa jest odpowiednia obsługa wyjatku. data_file = open( data.txt ) counter = 0 for line in data_file: try: counter += int(line) except TypeError: pass Wyjatki 35

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Każdy obiekt ma swoje zmienne i procedury. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Każdy obiekt ma swoje zmienne i procedury. Obiekty można ponownie używać w innych programach. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Każdy obiekt ma swoje zmienne i procedury. Obiekty można ponownie używać w innych programach. Wewnętrzna strukturę obiektów można modyfikować, uzupełniać i poprawiać, o ile nie wpływa to na widziane z zewnatrz własności. Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Każdy obiekt ma swoje zmienne i procedury. Obiekty można ponownie używać w innych programach. Wewnętrzna strukturę obiektów można modyfikować, uzupełniać i poprawiać, o ile nie wpływa to na widziane z zewnatrz własności. Obiekty moga dziedziczyć (łaczyć się hierachicznie) po bardziej ogólnych klasach (np. samochód, czy rower jest bardziej szczegółowa realizacja klasy pojazd). Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Każdy obiekt ma swoje zmienne i procedury. Obiekty można ponownie używać w innych programach. Wewnętrzna strukturę obiektów można modyfikować, uzupełniać i poprawiać, o ile nie wpływa to na widziane z zewnatrz własności. Obiekty moga dziedziczyć (łaczyć się hierachicznie) po bardziej ogólnych klasach (np. samochód, czy rower jest bardziej szczegółowa realizacja klasy pojazd). Obiekty moga zawierać inne obiekty (np. samochód zawiera koła, czujnik prędkości itd.). Programowanie obiektowe 36

Programowanie obiektowe Podejście obiektowe jest próba opisu skomplikowanych systemów za pomoca abstrakcji. Tworzymy obiekty, z którymi się komunikujemy (i które moga się komunikować między soba), które realizuja zadania dzięki wewnętrznym metodom. Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnym sensie nie interesuje nas jak dany obiekt rozwiaże zadanie, o ile robi to zgodnie z oczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu. Każdy obiekt należy do pewnej klasy. Każdy obiekt ma swoje zmienne i procedury. Obiekty można ponownie używać w innych programach. Wewnętrzna strukturę obiektów można modyfikować, uzupełniać i poprawiać, o ile nie wpływa to na widziane z zewnatrz własności. Obiekty moga dziedziczyć (łaczyć się hierachicznie) po bardziej ogólnych klasach (np. samochód, czy rower jest bardziej szczegółowa realizacja klasy pojazd). Obiekty moga zawierać inne obiekty (np. samochód zawiera koła, czujnik prędkości itd.). W Pythonie wszyscy członkowie klasy sa publiczni, a wszystkie funkcje sa wirtualne (według terminologii C++). Programowanie obiektowe 36

Klasy import math class Point: def init (self, x, y): self.x = x self.y = y def distance(self, point): return math.sqrt((self.x - point.x)**2 + (self.y - point.y)**2) class Circle: def init (self, x, y, r): self.center = Point(x, y) self.r = r def distance_to_perimeter(self, point): return math.sqrt((self.center.x - point.x)**2 + (self.center.y - point.y)**2) - self.r p1 = Point(0, 0) p2 = Point(1, 2) c1 = Circle(1, 1, 1) print(p1.distance(p2)) print(c1.distance_to_perimeter(p2)) print(p1.distance(c1.center)) Programowanie obiektowe 37

Wyjatki - jeszcze raz Nowe wyjatki można tworzyć korzystajac z mechanizmu dziedziczenia. Wszystkie wyjatki dziedzicza po bazowej klasie Exception. class NuclearError(Exception): def init (self, msg = ): self.msg = msg def str (self): return self.msg try: if temp > temp_max: raise NuclearError( Max temp reached ) except NuclearError as err: print(err) Programowanie obiektowe 38

Krótki przeglad bibloteki standardowej (1) argparse - interfejs linii poleceń (parametry) datetime - operacje zwiazane z czasem i kalendarzem dbm - interfejs baz danych DBM distutils - narzędzia do instalowania i tworzenia pakietów Pythona doctest - testowanie dokumentacji email html http math - funkcje matematyczne multiprocessing - przetwarzanie wielowatkowe os - interakcje z systemem operacyjnym Biblioteka standardowa 39

Krótki przeglad bibloteki standardowej (2) random - generatory liczb losowych (płaski, Gauss) re - wyrażenia regularne smtpd - serwer SMTP smtplib - klient SMTP socketserver - operacje sieciowe niskiego poziomu ssl - OpenSSL sqlite3 - interfejs bazy danych SQLite timeit - pomiary wydajności programu tkinter - Tk GUI unittest - testowanie programu xml zipfile Biblioteka standardowa 40

Inne przydatne biblioteki numpy - numerical Python matplotlib QtPy scipy - scientific Python lmfit Ciekawostki SymPy - obliczenia symboliczne Biopython PyChem - astropy - Biblioteka standardowa 41

Podsumowanie 1 Dlaczego Python? 2 Podstawy Pythona 3 Podstawowe struktury danych 4 Skrypty 5 Instrukcje kontrolne 6 Struktury danych 7 Funkcje 8 Dokumentacja 9 Moduły i pakiety 10 Operacje I/O 11 Wyjatki 12 Programowanie obiektowe 13 Biblioteka standardowa Podsumowanie 42