Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy. Michaª Alichniewicz. Gda«sk 2014. Studenckie Koªo Automatyków SKALP



Podobne dokumenty
Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

1. Wprowadzenie do C/C++

1. Wprowadzenie do C/C++

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Przetwarzanie sygnaªów

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Metodydowodzenia twierdzeń

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Lekcja 12 - POMOCNICY

1 Podstawy c++ w pigułce.

Listy, krotki, słowniki, funkcje

Vincent Van GOGH: M»czyzna pij cy li»ank kawy. Radosªaw Klimek. J zyk programowania Java

P tle. Rozdziaª Wst p. 4.2 P tle P tla for(...);

ZAJ CIA 4. Podstawowe informacje o algorytmie. Operatory relacyjne i logiczne, instrukcja warunkowa if

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

1 Podstawy c++ w pigułce.

Podstawy i języki programowania

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Programowanie i struktury danych 1 / 44

Podstawy programowania w języku C

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

Programowanie wspóªbie»ne

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Kurs rozszerzony języka Python

Lab. 02: Algorytm Schrage

Programowanie obiektowe

Środowisko programisty

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

1 Bª dy i arytmetyka zmiennopozycyjna

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

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

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Podstawy programowania w Pythonie

Odczyt danych z klawiatury Operatory w Javie

Podstawy Programowania Podstawowa składnia języka C++

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

Sposoby przekazywania parametrów w metodach.

Algorytmy zwiazane z gramatykami bezkontekstowymi

Wstęp do programowania

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 2 - organizacja projektu i obiektowo± Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Programowanie w języku Python. Grażyna Koba

Przegląd języka Python. Łukasz Anwajler

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Listy i operacje pytania

x y x y x y x + y x y

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Programowanie wspóªbie»ne

2 Przygotował: mgr inż. Maciej Lasota

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie funkcyjne. Wykªad 13

Algorytmy i struktury danych

Wska¹niki, tablice dynamiczne wielowymiarowe

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

lekcja 8a Gry komputerowe MasterMind

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

19. Obiektowo± 1 Kacze typowanie. 2 Klasy

Warsztaty dla nauczycieli

Wstęp do programowania

Wstęp do informatyki- wykład 7

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Python. Wprowadzenie. Jolanta Bachan

Algorytmika i Programowanie VBA 1 - podstawy

Struktura pliku projektu Console Application

LibreOffice Calc VBA

KLASYCZNE ZDANIA KATEGORYCZNE. ogólne - orzekaj co± o wszystkich desygnatach podmiotu szczegóªowe - orzekaj co± o niektórych desygnatach podmiotu

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

O autorze... 9 Wprowadzenie... 11

Pętle. Dodał Administrator niedziela, 14 marzec :27

PowerShell. Sławomir Wawrzyniak

Metody dowodzenia twierdze«

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

Wybrane poj cia i twierdzenia z wykªadu z teorii liczb

Język ludzki kod maszynowy

Języki programowania wysokiego poziomu. PHP cz.2.

Cw.12 JAVAScript w dokumentach HTML

Ciaªa i wielomiany. 1 Denicja ciaªa. Ciaªa i wielomiany 1

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

Transkrypt:

Spotkania z Pythonem Cz ± 1 - podstawy 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 2014 1 / 66

Gdzie si mo»na spotka z Pythonem? Dystrybucja Linuksa Ubuntu - ±rodowisko graczne Unity Oprogramowanie do zarz dzania projektami TRAC (wykorzystywane m.in przez NASA) Klient Dropbox'a Serwis Instagram Blender / LibreOce (jako j zyk skryptowy / makra) M. Alichniewicz (SKALP) Python vol. 1 2014 2 / 66

Gªówne cechy j zyka Dynamiczny j zyk ogólnego przeznaczenia Struktura j zyka jest ukierunkowana na prostot i czytelno± kodu Multiplatformowo± (wliczaj c w to mikrokontrolery) Mo»liwo± ª czenia z innymi j zykami programowania Šatwo± instalacji dodatkowych bibliotek (i ich mnogo± ) Ogromna ilo± zastosowa«- od aplikacji desktopowych, po aplikacje internetowe Umo»liwia prac w trybie wiersza polece«, nie trzeba kompilowa plików przed uruchomieniem Nie wymaga dedykowanego edytora Rozwijane s dwie wersje - 2.x oraz 3.x M. Alichniewicz (SKALP) Python vol. 1 2014 3 / 66

Przykªadowy kod Najwi kszy wspólny dzielnik - implementacja w C: /** * Przykladowy program obliczajacy najwiekszy * wspolny dzielnik (algorytm Euklidesa) */ int nwd(int a, int b) { int c; while (b > 0) { c = a % b; a = b; b = c; } return a } M. Alichniewicz (SKALP) Python vol. 1 2014 4 / 66

Przykªadowy kod Najwi kszy wspólny dzielnik - implementacja w Pythonie: def nwd(a,b): """ Przykladowy program obliczajacy najwiekszy wspolny dzielnik (algorytm Euklidesa) """ while b > 0: c = a % b a = b b = c return a M. Alichniewicz (SKALP) Python vol. 1 2014 5 / 66

Jakie s podstawowe ró»nice? Brak klamer - bloki s oznaczane przez wci cie kodu! Brak ±redników - instrukcje nie musz si ko«czy ±rednikiem! Zmienne deklarujemy w momencie u»ycia - nie ma potrzeby robienia tego wcze±niej, jak np. w C M. Alichniewicz (SKALP) Python vol. 1 2014 6 / 66

Zmienne - podstawowe typy i operacje M. Alichniewicz (SKALP) Python vol. 1 2014 7 / 66

Typy zmiennych - podstawowe Typ liczbowy (krótki) - int: a = 5 # Liczba rowna "5" b = 0x0A # Liczba rowna "10" Typ liczbowy (dªugi) - long: a = -100000000000L # Duza liczba ujemna b = 500000000000000L # Jeszcze wieksza liczba Typ liczbowy (liczba zmiennoprzecinkowa) - oat: a = 1.23 # Mala liczba b = 4.5678e-9 # Jeszcze mniejsza liczba Typ liczbowy (zespolony) - complex: a = -1+0j # Dobry biegun b = 1+2.3e-1j # Zly, niedobry biegun M. Alichniewicz (SKALP) Python vol. 1 2014 8 / 66

Typy zmiennych - podstawowe Typ logiczny - boolean: a = True b = False # wazna jest wielkosc liter! Typ pusty - NoneType: a = None Typ tekstowy (ci g znaków) - str: a = 'Studenckie Kolo Automatykow SKALP' b = "Tak tez mozna zdefiniowac tekst" c = """A to jest bardzo dlugi tekst: Lorem ipsum dolor sit amet, consectetur adipiscing elit. """ Uwaga: je»eli w kodzie pojawi si tekst wielolinijkowy, typu: """ Lorem ipsum dupsum bupsum """ nie przypisany do»adnej zmiennej, wtedy jest to konstrukcja komentarza wielolinijkowego. M. Alichniewicz (SKALP) Python vol. 1 2014 9 / 66

Podstawowe operacje na zmiennych Operacje arytmetyczne: Dodawanie a = a + b # Dodaj a do b i zapisz do b a += b # Tak tez mozna a += 1 # Tak wyglada inkrementacja - nie ma czegos # typu "i++" Odejmowanie a = a - b # Odejmij b od a i zapisz do a a -= b # Tak tez mozna a -= 1 # Tak wyglada derementacja - nie ma czegos # typu "i--" Mno»enie a = a * b # Pomnoz a razy b a *= b # To tez zadziala a = a * 2 # Dajmy jakas liczbe zeby literkom # smutno nie bylo M. Alichniewicz (SKALP) Python vol. 1 2014 10 / 66

Podstawowe operacje na zmiennych Dzielenie i reszta z dzielenia a = a / b # Podziel a przez b a /= b # To tez zadziala a = a % 2 # Reszta z dzielenia przez 2 b %= 3 Pot gowanie a = a ** b # a do potegi b a **= b # To tez zadziala a = b ** 2 # Do kwadratu! Poszczególne typy liczbowe mo»na ze sob ª czy, uzyskuj c w efekcie liczb typu najwyzszego (o co chodzi: mno» c liczb dªug i krótk, dostaniemy liczb dªug. Dodaj c liczb zmiennoprzecinkow do liczby dªugiej, otrzymamy liczb zmiennoprzecinkow. Dziel c liczb zmiennoprzecinkow przez liczb zespolon, otrzymamy liczb zespolon etc.) M. Alichniewicz (SKALP) Python vol. 1 2014 11 / 66

Podstawowe operacje na zmiennych Operacje logiczne (dotyczy liczb caªkowitych): Iloczyn logiczny a = a & b # Iloczyn logiczny a i b a &= b # j.w. a = b & 0xF0 # iloczyn logiczny z liczb Suma logiczna a = a b # suma logiczna a i b a = b a = a 0x3 Alternatywa wykluczaj ca (XOR) a = a ^ b # a XOR b a ^= b # To tez zadziala a = a ^ 0xFF M. Alichniewicz (SKALP) Python vol. 1 2014 12 / 66

Podstawowe operacje na zmiennych Przesuni cie bitowe a = a >> 2 # Odpowiednik dzielenia razy 2 a >>= b # wersja skrocona a = b << 4 # Mnozymy b <<= 3 # ale w skrocie Negacja bitowa a = ~b # Tu nie ma co skracac... M. Alichniewicz (SKALP) Python vol. 1 2014 13 / 66

Operacje na ci gach znaków Dodawanie a = a + b # Polaczenie ciagow a i b w jeden a += 'dadada' # Dodanie ciagu 'dadada' do a Mno»enie przez liczb caªkowit a = 'a' * 5 # Zwielokrotnienie ciagu 'a' # pieciokrotnie a *= 5 # To juz skads znamy Co logiczne - nie mo»emy mno»y tekstu przez tekst, czy go dzieli przez liczb, etc. Tak samo jak nie mo»emy mno»y przez liczb uªamkow (jak kto± uzyska dla przykªadu, dwie i póª literki J, to mu pogratuluj ) M. Alichniewicz (SKALP) Python vol. 1 2014 14 / 66

Typy zmiennych - kolekcje Python, co jest niecz sto spotykane w innych j zykach, posiada specjalne rodzaje typów, tzw. kolekcje. Zgodnie z nazw, skªadaj si z specjalnie uªo»onego zbioru typów prostych (kolekcji tych typów): krotka, ang. tuple - mo»na to okre±li jako staªa tablica (nie mo»emy zmienia warto±ci, elementów, kolejno±ci, dodawa nowych elementów, etc.). Elementy mog by dowolnego typu: a = (1,2,3) # Jakies wartosci, np. zgrupowane # parametry jakiejs funkcji b = (4,5, 'jakis tekst nie zaszkodzi') c = (a, (1,2)) d = a[1] # Odwolanie do elementu e = b[1:3] # Pobranie elemntow od indeksow # 1 do 3 i zebranie ich w nowa tuple f = (0,) # Tupla 1-elementowa - trzeba pamietac # o przecinku po elemencie! g = (1,) * 6 # Tupla z szesciu ``1'' Tuple cz sto s wykorzystywane do grupowania warto±ci parametrów, lub zwracania kilku warto±ci z funkcji. M. Alichniewicz (SKALP) Python vol. 1 2014 15 / 66

Typy zmiennych - kolekcje lista, ang. list - w przeciwie«stwie do tupli, mo»emy zmienia elementy, jak i dodawa nowe b d¹ usuwa istniej ce. Podobnie jak w tuplach, elementy mog by dowolnego typu: a = [1,2,3] # Jakies wartosci, np. zgrupowane # parametry jakiejs funkcji b = range(1,4) # Da to samo co wyzej c = [None]*4 # Stworzy liste o 4 elementach pustych, # zamiast None moze byc cokolwiek d = b[3] e = b[1:3] # Zachowanie podobne jak w tuplach, ale # tu tworzymy nowe listy f = [[1,2], [3,4]] # Mozemy zagniezdzac g = [] # Pusta lista Jest to typowy przykªad tablicy znanej z C. M. Alichniewicz (SKALP) Python vol. 1 2014 16 / 66

Typy zmiennych - kolekcje Listy oraz tuple zachowuj si podobnie jak ci gi tekstowe, czyli mo»na poª czy kilka mniejszych list: a = [1, 2] b = [3, 4] c = a + b # W efekcie dostaniemy [1, 2, 3, 4] c = c + [] # Dalej zostaje to co wyzej - dodanie # pustej listy nic nie da b d¹ krotek (tupli): a = (4, 3) b = (2, 1) c = a + b # W efekcie dostaniemy (4, 3, 2, 1) stworzy jedn, wi ksz list lub tuple. Kolekcje musz by tego samego typu, tj. do listy nie mo»na doda tupli. M. Alichniewicz (SKALP) Python vol. 1 2014 17 / 66

Typy zmiennych - kolekcje zbiór, ang. set - dosªownie uporz dkowany zbiór elementów - podobne do listy, ale elementy nie mog si powtarza i s automatycznie sortowane: a = {1,2,3} zbiór staªy, ang. frozenset - podobnie jak zwykªy zbiór, ale nie mo»na go modykowa : a = frozenset([1,2,3]) S to typowo matematyczne typu danych, wi c mo»na na nich robi wszystkie znane z matematyki operacje na zbiorach - iloczyn, suma, etc: c = a & b # Iloczyn zbiorow a i b c = a b # Suma zbiorow a i b c = a ^ b # Elementy ``skrajne'' (a b ) - (a & b) c = a - b # Roznica zbiorow M. Alichniewicz (SKALP) Python vol. 1 2014 18 / 66

Typy zmiennych - kolekcje sªownik, ang. dictionary. Jest to rodzaj tablicy, w której za indeks mog robi praktycznie dowolnie wybrane warto±ci, zdeniowane przez nas: a = { 'indeks1': 'wartosc_1', 42: 'Ultimate Question of Life, ' 'the Universe, and Everything', (1,2): ('Tak tez mozna', 3.14) } Odowªujemy si do takiego sªownika w prosty sposób: a['indeks1'] + a[42] # Da nam w wyniku 'wartosc_1ultimate Question...' Sªownik jest odpowiednikem tablicy asocjacyjnej znanej m.in. z j zyka PHP. Jest to konstrukcja stosunkowo rzadko spotykana w innych j zykach. M. Alichniewicz (SKALP) Python vol. 1 2014 19 / 66

Typy zmiennych - kolekcje Z kolekcji do których elementów mo»emy odwoªywa si wg. klucza (listy oraz sªowniki) mo»emy w prosty sposób usuwa elementy (sªowo kluczowe del). Nie dotyczy to tupli, która z denicji jest staªa. a = [1,2,3] del a[1] print repr(a) # Wyswietli [1,3] b = {'1': 1, '2': 2, '3': 'blabla'} del b['2'] print repr(b) # Wyswietli {'1': 1, '3': 'blabla'} Ilo± elementów w kolekcji (dowolnej) mo»emy sprawdzi funkcj len: a = (1,2,3) b = len(a) # b wynosi 3 c = len((1,2,(1,2))) # c rowniez wynosi 3 # na poziomie ``glownym'' # sa 3 elementy M. Alichniewicz (SKALP) Python vol. 1 2014 20 / 66

Pisanie po ekranie M. Alichniewicz (SKALP) Python vol. 1 2014 21 / 66

Pisanie po ekranie Podstawowe pisanie po ekranie jest wykonywane przez funkcj - nomen omen - print: print 'Hello world!' Z C/C++ znamy te» funkcj printf: printf("wyswietl: a = %d, b = 0x%X", 10, 20); W Pythonie oczywi±cie te» wyst puje odpowiednik takiej funkcji: print 'Wyswietl: a = %d, b = 0x%X' % (10, 20) Nale»y zwóci tutaj uwag na podwójne zastosowanie operatora %. W przypadku liczb, dziaªa jako dzielenie modulo. Z kolei przy ci gach tekstowych sªu»y do formatowania. W przypadku, je»eli w ci gu który formatujemy jest tylko jedna zmienna, po operatorze % nie musi si pojawi tupla, wystarczy pojedyncza warto± / zmienna. M. Alichniewicz (SKALP) Python vol. 1 2014 22 / 66

Pisanie po ekranie W ramach tzw. debuggowania przez wy±wietlanie (czyli wstawianie w ±rodek kodu instrukcji wy±wietlania,»eby si mniej wi cej zorientowa gdzie si program sypie), przydatne jest kilka funkcji: Funkcja repr - zwraca u»yteczn dla czªowieka reprezentacj danej zmiennej/typu/warto±ci. Czyli, np. drukuje list. a = repr # Przypisz do zmiennej a funkcje repr. # Tak, to jest poprawna konstrukcja. print repr(a) # Powinno wyswietlic cos w stylu # ``<built-in function repr>'' Funckja id - drukuje unikalny identykator obiektu (zmiennej, wartosci, etc.). Czasami ta warto± si pojawia w ci gu zwróconym przez repr: print id(repr) # Wyswietli jakas liczbe, # u kazdego inna M. Alichniewicz (SKALP) Python vol. 1 2014 23 / 66

Pisanie po ekranie - przekazywanie zmiennych Znaj c funkcj która zwraca unikalne ID ka»dego elementu (zmiennej), mo»emy wprost zaobserwowa jedn z wªasno±ci Pythona. W Pythonie wszystko jest przekazywane przez referencj. Oznacza to,»e domy±lnie istnieje jeden unikalny obiekt danego typu, a ka»de przypisanie go do kolejnej zmiennej powoduje jedynie przekazanie referencji. Mo»na to zaobserwowa na przykªadzie: a = 123 print id(a) # Wyswietli jakas liczbe, # np. 19316032 b = a print id(b) # Wyswietli TO SAMO co # instrukcja wyzej M. Alichniewicz (SKALP) Python vol. 1 2014 24 / 66

Pisanie po ekranie - przekazywanie zmiennych Bardziej obrazowy przykªad tej wªasno±ci to np. przekazanie referencji do podlisty: a = [1,2,3,[4,5]] b = a[3] print repr(b) # Wyswietli [4,5] b[0] = 123 print repr(a) # Wyswietli [1,2,3,[123,5]]! M. Alichniewicz (SKALP) Python vol. 1 2014 25 / 66

Bloki kontrolne M. Alichniewicz (SKALP) Python vol. 1 2014 26 / 66

Bloki kontrolne Poniewa» Python jest j zykiem który stawia na prostot i przejrzysto± kodu, ilo± instrukcji blokowych jest ograniczona. J zyk ten posiada tylko 1 konstrukcj warunkow - if... else.... Nie posiada z kolei znanej m.in. z C instrukcji switch. Liczba p tli równie» jest ograniczona - wyst puj tylko p tle for i while, brak jest znanej z innych j zyków p tli do... while. Brak te» instrukcji skoku typu label... goto. W przeciwie«stwie do wi kszo±ci znanych j zyków (które maj wspólnego przodka, j zyk ALGOL), w Pythonie nie stosuje si klamer do oznaczania bloków! Bloki oznaczamy przez wci cia - zmiana ci gªo±ci wci cia oznacza otworzenie / zako«czenie bloku (jednocze±nie wymuszaj c na u»ytkowniku przejrzysto± kodu). Python akceptuje wci cie zªo»one z 2 spacji, 4 spacji b d¹ tabulatora (zalecane s 4 spacje). Korzystaj c z wiersza polece«(konsoli) pythona (polecenie python) blok ko«czymy pust lini. M. Alichniewicz (SKALP) Python vol. 1 2014 27 / 66

Bloki kontrolne - instrukcja warunkowa - wersja C Znana z C konstrukcja warunkowa wygl da mniej wi cej tak: if ( warunek ) { // Jakis tam kod } else if ( warunek_2 ) { // Jeszcze inny kod } else { // Nic nie wyszlo } M. Alichniewicz (SKALP) Python vol. 1 2014 28 / 66

Bloki kontrolne - instrukcja warunkowa - wersja Python Z kolei w Pythonie to wyglada tak: if warunek: # Jakis tam kod elif warunek_2: # Jeszcze inny kod else: # Nic nie wyszlo Jak wida, w Pythonie wyst puje sªowo kluczowe elif, co jest odpowiednikiem else if z C (gdzie tak na prawd, mamy 2 zagnie»d»one warunki - w Pythonie caªy czas to jeden warunek). Instrukcj switch znan z C zbudujemy za pomoc odpowiedniej ilo±ci if... elif... else. M. Alichniewicz (SKALP) Python vol. 1 2014 29 / 66

Bloki kontrolne - instrukcja warunkowa - warunki Par sªów na temat tworzenia warunków. Wi kszo± operatorów warunkowych jest identyczna jak w pozostaªych j zykach programowania: ==, >, <, >=, <=,!=. Jest te» jeden niewyst puj cy: Dokªadna równo±. Z racji tego,»e zmienne w Pythonie nie maj odgórnie przypisanego typu, funkcja mo»e - dla przykªadu zwróci warto± liczbow, albo False w przypadku niepowodzenia. Jak odró»ni 0 matematyczne od 0 logicznego? Do tego sªu»y sªowo kluczowe is, które sprawdza równie» typ: 1 == True # Zwroci ``True'' - 1 to 1 1 is True # Zwroci ``False'' - bo matematyczne # ``1'' to nie logiczna prawda. Podobny operator wyst puje w j zyku PHP - ===. M. Alichniewicz (SKALP) Python vol. 1 2014 30 / 66

Bloki kontrolne - instrukcja warunkowa - warunki W Pythonie istnieje jeszcze jeden przydatny operator - sªowo kluczowe in. Pozwala ono sprawdzi, czy w kolekcji znajduje si element o danej warto±ci: a = [1,2,3] 2 in a # Da ``True'' - bo 2 jest elementem listy 5 in a # Da ``False'' - nie ma takiego elementu W przypadku sªowników, sprawdza czy dany element jest kluczem: a = {'1': 1, '2': 2} '1' in a # Da ``True'' - bo '1' jest kluczem 1 in a # Da ``False'' - nie ma takiego klucza M. Alichniewicz (SKALP) Python vol. 1 2014 31 / 66

Bloki kontrolne - instrukcja warunkowa - warunki Š czenie warunków jest nieco odmienne od tego w C. W wi kszo±ci j zyków programowania, do tego sªu» podwojone operatory do operacji logicznych na bitach - czyli && jako i oraz jako lub. Python stawia na czytelno± - a wi c, zamiast maªo zrozumiaªych krzaków, mamy form tekstow : and oraz or. Podobnie jest z negacj : zamiast symbolu!, stosujemy sªowo kluczowe not: if warunek1 and warunek2: # Zrob cos elif not warunek1 and not warunek2: # Zrob cos innego elif warunek1 or warunek2: # Jeszcze cos innego?! else: # To cos jeszcze zostalo? Oczywi±cie, warunki mo»emy zagnie»d»a (zarówno instrukcj if, jak i sam tre± warunku). M. Alichniewicz (SKALP) Python vol. 1 2014 32 / 66

Bloki kontrolne - instrukcja warunkowa - warunki Kilka uwag do tworzenia warunków: Je»eli chcemy sprawdzi warto± logiczn, nie musimy jej porównywa do prawdy czy faªszu, wystarczy konstrukcja typu lub if zmienna_logiczna: # Zrob cos if not zmienna_logiczna_2: # Zrob cos innego 0 w ka»dej postaci liczbowej oznacza faªsz, wszystkie inne liczby to prawda warto± None to faªsz pusta kolekcja (pusta tupla, lista, etc) a tak»e pusty ci g znaków to faªsz, wszystko inne - prawda M. Alichniewicz (SKALP) Python vol. 1 2014 33 / 66

Bloki kontrolne - p tla while Znana z C p tla while: while (warunek) { // Zrob cos } w Pythonie przybiera posta : while warunek: # Zrob cos Tworzenie warunków jest identyczne jak w instrukcji warunkowej. Nie licz c warunku, kod wewn trz p tli mo»e zosta przerwany, a p tla zako«czona dzi ki instrukcji break, albo przerwany a nast pnie wznowiony od pocz tku (kolejna iteracja) dzi ki instrukcji continue (tu podobnie jak w C) M. Alichniewicz (SKALP) Python vol. 1 2014 34 / 66

Bloki kontrolne - p tla for Znana z C p tla for wygl da tak (przyklad): for (i=0; i<wartosc_koncowa; i++) { // Zrob cos } Pythonowy odpowiednik tej p tli to for i in range(0,wartosc_koncowa): # Zrob cos Funkcja range ju» si nam przewin ªa w momencie omawiania list. Sk d si tu wi c wzi ªa? M. Alichniewicz (SKALP) Python vol. 1 2014 35 / 66

Bloki kontrolne - p tla for Otó» - algorytm dziaªania p tli for w j zyku C (i pochodnych) wygl da mniej wi cej tak: 1 Zainicjuj zmienne licznika (i = 0) 2 Sprawd¹ warunek (i < wartosc_koncowa) 3 Je»eli warunek prawdziwy, wykonaj kod p tli; w przeciwnym wypadku, zako«cz p tl. 4 Wykonaj aktualizacj warto±ci zmiennych licznika (i++) 5 Wró do punktu 2. M. Alichniewicz (SKALP) Python vol. 1 2014 36 / 66

Bloki kontrolne - p tla for A jak to wygl da w Pythonie? 1 We¹ kolejn warto± z sekwencji (kolejna warto± z listy - przykªadowo - zwróconej przez range(0,wartosc_koncowa)) 2 Je»eli si to udaªo (to nie jest koniec listy), wykonaj kod p tli; w przeciwnym wypadku, zako«cz p tl. 3 Wró do punktu 1. Jak widzicie, algorytm p tli for w Pythonie znacznie si ró»ni od tego w C. Ró»nica wynika z tego,»e p tla nazwana for w Pythonie jest dosªownie interpretowana jako dla ka»dego elementu z sekwencji, wykonaj. Jako sekwencj mo»emy poda dowoln kolekcj (tuple, list, zbiór, a tak»e ci g tekstowy). Wniosek jest jeden: p tla for w Pythonie mo»e dziaªa jak jej odpowiednik w C, ale to nie jest klasycza p tla FOR. M. Alichniewicz (SKALP) Python vol. 1 2014 37 / 66

Bloki kontrolne - p tla for Przykªady? skladniki = ['jablko', 'banan', 'gruszka', 'pomarancza'] print 'Skladniki salatki owocowej to:' for owoc in skladniki: print owoc, ciag = 'SKALP' print 'Kolejne znaki w ciagu %s' % ciag for znak in ciag: print 'Znak: %c' % znak print 'Klasyczne for:' for i in range(0,10): print 'i wynosi: %d' % i M. Alichniewicz (SKALP) Python vol. 1 2014 38 / 66

Funkcje M. Alichniewicz (SKALP) Python vol. 1 2014 39 / 66

Tworzenie funkcji - wersja C Przykªadowy kod funkcji w C wygl da tak: /** * Jakis komentarz / opis do funkcji, niewymagane, * ale zalecane ze wzgledu na czytelnosc */ typ_zwracany nazwa_funkcji(typ1 zmienna1, typ2 zmienna2, typ_etc zmienna_etc) { // Jakis tam kod funkcji } return wartosc_zwracana; // Cos zwracamy M. Alichniewicz (SKALP) Python vol. 1 2014 40 / 66

Tworzenie funkcji - wersja Python Z kolei w Pythonie, szkielet wygl da tak: def nazwa_funkcji(zmienna1, zmienna2, zmienna_etc) """ Jakis komentarz / opis do funkcji, niewymagane, ale zalecane ze wzgledu na czytelnosc """ # Jakis tam kod funkcji return wartosc_zwracana; # Cos zwracamy Jak widzimy, funcj deklarujemy sªowem kluczowym def i nie podajemy»adnych typów (mo»emy te» nic nie zwraca, odpowiednik funkcji void z C). Pami tajmy te»,»e jak wszystko w Pythonie, argumenty s przekazywane przez referencj! M. Alichniewicz (SKALP) Python vol. 1 2014 41 / 66

Tworzenie funkcji - wersja Python Python, jako j zyk skryptowy, daje nam jeszcze jedn mo»liwo± - podanie domy±lnych warto±ci argumentów def nazwa_funkcji(zmienna1 = 1, zmienna2 = 2, zmienna_etc = 'etc') """ Jakis komentarz / opis do funkcji, niewymagane, ale zalecane ze wzgledu na czytelnosc """ # Jakis tam kod funkcji return wartosc_zwracana; # Cos zwracamy M. Alichniewicz (SKALP) Python vol. 1 2014 42 / 66

Tworzenie funkcji - wersja Python Jaka z tego korzy±? Otó» jedn z cech odró»niaj cych Pythona od innych j zyków, jest to,»e owszem - argumenty do funkcji mo»emy podawa wg. kolejno±ci denicji, ale tak»e mo»emy przypisywa warto±ci do konkretnych argumentów: # Wywolanie klasyczne nazwa_funkcji(1, 2, 3) # Trzeci argument pozostaje domyslny nazwa_funkcji(1, 2) # Pierwsze dwa zostaja domyslne nazwa_funkcji(zmienna_etc = 'nowe etc') # Same domyslne nazwa_funkcji() M. Alichniewicz (SKALP) Python vol. 1 2014 43 / 66

Tworzenie funkcji - wersja C, zmienna liczna argumentów W Pythonie - tym razem podobnie jak w innych j zykach - jest te» mo»liwe zdeniowanie funkcji przyjmuj cej kilka argumentów. W C, jest to troch skomplikowane: #include <stdarg.h> void vargs(int first,...) { va_list arg; // Tablica z argumentami va_start(arg, first); // Ustaw wskaznik int foo; char bar; foo = va_arg(arg, int); // Wez pierwszy (typ int) bar = va_arg(arg, char); // Wez drugi (typ char) // Zrob z tym cos } va_end(arg); // Poinformuj gdzie koniec M. Alichniewicz (SKALP) Python vol. 1 2014 44 / 66

Tworzenie funkcji - wersja Python, zmienna liczna argumentów Jak widzimy, w C musimy te argumentu zdejmowa po kolei z listy, co nie zawsze jest wygodne tudzie» mo»liwe. Python, jak wiemy, stawia na prostot i czytelno± kodu. W zwi zu z tym, zamiast takiego potworka mamy kod: def vargs(first, *args, **kwargs): """ Zmienna liczba argumentow. ``args'' to lista na ktorej sa argumenty, dla ktorych nie podalismy nazwy - czyli wywolanie funkcja typu vargs(1, 2, 3, 4). ``kwargs'' to slownik w ktorym sa argumenty przekazane z nazwy, czyli wywolanie typu vargs(dwa = 2, piec = 5) """ pass # Nic nie rob M. Alichniewicz (SKALP) Python vol. 1 2014 45 / 66

Tworzenie funkcji - wersja Python, zmienna liczna argumentów Jak to dziaªa mo»emy sprawdzi w prosty sposób, wykorzystuj c poznan wcze±niej funkcj repr def vargs(*args, **kwargs): """ Wyswietl argumenty """ print repr(args) print repr(kwargs) a nast pnie spróbowa wywoªa funkcj na ró»ne sposoby z ró»nymi argumentami: vargs(1, 2, 3) # Slownik kwargs bedzie pusty vargs(jeden = 1, dwa = 2) # List args bedzie pusta vargs(1, dwa = 2) # Dane beda w args i w kwargs vargs() # Lista args i slownik kwargs puste Wa»ne jest,»eby argumenty nienazwane byªy podawane PRZED tymi z konkretn nazw. M. Alichniewicz (SKALP) Python vol. 1 2014 46 / 66

Wywoªywanie funkcji - rozpakowywanie list i sªowników Czasami sie zdarza,»e mamy kod który tworzy sªownik - tudzie» list /tupl - z argumentami dla funkcji, które wszystkie przekazujemy. Mo»emy to zrobi tradycyjnie: lista = (1,2) slownik = {'trzy': 3} vargs(lista[0], lista[1], trzy=slownik['trzy']) Mo»emy to te» przyspieszy, stosuj c rozpakowanie sekwencji: lista = (1,2) slownik = {'trzy': 3} vargs(*lista, **slownik) Jak zobaczycie, dziaªa tak samo. M. Alichniewicz (SKALP) Python vol. 1 2014 47 / 66

Wyj tki M. Alichniewicz (SKALP) Python vol. 1 2014 48 / 66

Czym s wyj tki? W trakcie tworzenia funcji, czasami mo»e si okaza»e dla danych argumentów nie jest mo»liwe wykonanie takiej funkcji. Oczywi±cie, na fakt»e nie zostaªo to wykonane, trzeba jako± zareagowa. Jednym ze sposób, znany z C jest zwracanie np. ujemnych warto±ci, albo kodu bª du. W Pythonie mo»na te» zwróci np. warto± False. Ale jak zidentykowa, co poszªo nie tak? Zaªó»my prost funkcj, która otwiera port szeregowy i wysyªa po nim jakie± dane. W tej funkcji mo»e wiele rzeczy pój± nie tak: Bª dna nazwa portu Port zaj ty Brak uprawnie«etc. Oczywi±cie na ka»dy z bª dów trzeba zareagowa inaczej. Mo»na zwraca ró»ne warto±ci jako wynik funkcji. M. Alichniewicz (SKALP) Python vol. 1 2014 49 / 66

Czym s wyj tki? Jak to zrobi inaczej? Zaªó»my,»e funkcja mo»e zaraportowa wyst pienie bª du i zako«czy swoje dziaªanie. Zaªó»my te»,»e takie zgªoszenie mo»na przechwyci i wykona odpowiednie operacje naprawcze - te zaªo»enia mo»na rozwin jako system wyj tków (ang. exceptions). Brak tego mechanizmu w C, pojawiª si od C++, jest wykorzystywany m.in. w Javie i w PHP. M. Alichniewicz (SKALP) Python vol. 1 2014 50 / 66

Wyj tki w Pythonie Najprostszym przykªadem operacji która mo»e pój± nie tak, jest dzielenie. Dzielenie przez 0 nie nale»y do cz stych, i musimy si przed nim zabezpieczy. Jak? Mo»na sprawdzi, czy nie chcemy dzieli przez 0, je»eli tak, to ko«czymy nasz funkcj / piszemy komunikat o bª dzie / etc: # Obliczamy c = a / b if b == 0: print "Nie mozna dzielic przez 0!" else: print "Wynik z dzielenia: %d" % (a / b) Co si stanie, je»eli jednak podzielimy? M. Alichniewicz (SKALP) Python vol. 1 2014 51 / 66

Wyj tki w Pythonie Sprawd¹my: a / b # Zwroci: # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # ZeroDivisionError: integer division or modulo by zero Na ekranie widzimy bª d, a w zasadzie wªa±nie wyj tek zgªoszony (rzucony) przez Pythona. Tak samo, wyj tek zostanie zgªoszony jak b dziemy chcieli odwoªa si do nieistniej cego elementu listy: a = [1,2,3] a[4] # Zwroci: # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # IndexError: list index out of range M. Alichniewicz (SKALP) Python vol. 1 2014 52 / 66

Wyj tki w Pythonie Zgodnie z ide wyj tków, powinni±my móc wyªapa ten bª d. Skªadnia bloków obsªugi wyj tków jest stosunkowo intuicyjna. Najprostsza jej forma to: try: # Sprobuj wykonac jakis kod ktory moze nie wyjsc # np wspomniane dzielenie przez 0 except TypWyjatku as e: # Kod, ktory zostanie wykonany jezeli wyjatek # zostanie rzucony. W ``e'' moga znajdowac sie # dodatkowe informacje na temat wyjatku except TypWyjatku2: # Mozna reagowac na kilka typow wyjatkow, # mozna tez nie odczytywac konkretnych # informacji o bledzie (tylko fakt, ze wystapil) except: # Mozemy tez nie znac typu M. Alichniewicz (SKALP) Python vol. 1 2014 53 / 66

Wyj tki w Pythonie Zwykªa instrukcja typu try... except pozwala nam reagowa na wyj tek, którego czasami si wr cz spodziewamy. A je»eli chcemy wykona jak ± akcj jak wyj tek NIE wyst pi? Teoretycznie, mo»emy umie±ci ten kod wewn trz bloku try - wtedy, je»eli wyj tek nie wyst pi, kod si powinien wykona. Tracimy jednak na czytelno±ci kodu! Dlatego te», Python przychodzi z pomoc nieco bardziej rozbudowan instrukcj : try... except... else: try: # Proba wykonania kodu except TypWyjatku as e: # Proba sie nie powiodla else: # Proba sie powiodla, zrobmy cos dodatkowego M. Alichniewicz (SKALP) Python vol. 1 2014 54 / 66

Wyj tki w Pythonie Czasami zdarza si,»e w bloku try alokujemy jakie± zasoby - klasycznym, wr cz akademickim przykªadem jest tutaj otwarcie pliku. Niezale»nie od tego, czy wyj tek wyst piª, czy nie, plik musimy zamkn. Mo»emy takie zamykanie pliku umie±ci albo w bloku try ORAZ w bloku except, mo»emy te» umie±ci zamykanie pliku w bloku except ORAZ w bloku else. Mo»emy te» skorzysta z dedykowanego bloku zaprojektowanego m.in. wªasnie do zwalniania zasobów - try... except... nally try: # Jakis kod w ktorym alokujemy zasoby except TypWyjatku as e: # Proba sie nie powiodla finally: # Czy sie udalo, czy nie, zwalniamy zasoby M. Alichniewicz (SKALP) Python vol. 1 2014 55 / 66

Wyj tki w Pythonie Oczywi±cie, instrukcje else oraz nally mo»emy ze sob ª czy, co daje nam ko«cow, peªn form bloków do obsªugi wyj tków: try: # Jakis kod w ktorym alokujemy zasoby except TypWyjatku as e: # Proba sie nie powiodla else: # Proba sie jednak udala finally: # Czy sie udalo, czy nie, zwalniamy zasoby M. Alichniewicz (SKALP) Python vol. 1 2014 56 / 66

Wyj tki w Pythonie - programowanie wyj tkami Dosy cz st praktyk w±ród programistów, jest podej±cie upewnij si trzy razy, zanim co± wykonasz -»eby nie byªo bª dów. Przykªadem takiej praktyki jest m.in. wspomniane wcze±niej sprawdzanie, czy mo»emy dzieli przez dan liczb. Python z kolei, promuje podej±cie totalnie odmienne: spróbuj co± zrobi, co najwy»ej Ci nie wyjdzie - wtedy zrób co± innego - czyli rób i ªap wyj tki. Takie podej±cie skutkuje m.in. tym,»e Python rzuca wyj tkami na przysªowiowe prawo i lewo - i czasami nie da si zastosowa pierwszego podej±cia. Przykªadowo - jak sprawdzi, czy w danym sªowniku jest element o danym indeksie/kluczu (jak by wygl daªa taka funkcja?) M. Alichniewicz (SKALP) Python vol. 1 2014 57 / 66

Wyj tki w Pythonie - programowanie wyj tkami Mniej wi cej tak: def haskey(dict, name): """ Sprawdza, czy w slowniku `dict` istnieje klucz `name` """ try: _ = dict[name] # Pobierz wartosc # do jakiejs zmiennej except KeyError: return False else: return True # Wyjatek - a wiec klucza # nie ma # Udalo sie - wiec klucz # istnieje To podej±cie jest zastosowane nawet wewn trz wbudowanych w Pythona funkcji! M. Alichniewicz (SKALP) Python vol. 1 2014 58 / 66

Zadania do wykonania M. Alichniewicz (SKALP) Python vol. 1 2014 59 / 66

Zadanie 1 Napisz 2 funkcje realizuj ce silni na 2 sposoby: rekurencyjnie oraz iteracyjnie. M. Alichniewicz (SKALP) Python vol. 1 2014 60 / 66

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 2014 61 / 66

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 2014 62 / 66

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 2014 63 / 66

Materiaªy M. Alichniewicz (SKALP) Python vol. 1 2014 64 / 66

Materiaªy Dokumentacja j zyka Python https://docs.python.org/2/ Forum StackOverow http://stackoverflow.com/ Python Enchancement Proposals https://www.python.org/dev/peps/ M. Alichniewicz (SKALP) Python vol. 1 2014 65 / 66

Spotkania z Pythonem Cz ± 1 - podstawy 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 2014 66 / 66