8/16/2019 Inzynieria Cala
1/336
Inżynieria oprogramowania
Ćwiczenia
16 lutego 2016
http://find/
8/16/2019 Inzynieria Cala
2/336
Prowadzący
1 dr Piotr Stolarski2 dyżur: wtorek 16:30
czwartek 11:00
http://find/http://goback/
8/16/2019 Inzynieria Cala
3/336
Cele przedmiotu
1 nabycie praktycznych umiejętności związanych z
wytwarzaniem oprogramowania2 opanowanie języka Python
http://find/http://goback/
8/16/2019 Inzynieria Cala
4/336
Treści
Programowanie w języku PythonWprowadzenie do programowania proceduralnegoTypy danychFunkcje i struktury kontrolneModułyWprowadzenie do programowania obiektowego
Obsługa plikówZaawansowane techniki; programowanie funkcjonalneProgramowanie wielowątkoweProgramowanie sieciWykorzystanie wyrażeń regularnych
Techniki usuwania błędówPraca z repozytorium kodu
Automatyzacja procesu budowania projektu
...
http://find/
8/16/2019 Inzynieria Cala
5/336
Literatura
1 http:
//openbookproject.net/thinkcs/python/english2e/
2 http://docs.python.org/tutorial/
3 Mark Summerfield, Python 3.4 ... dowolna inna pozycja do Pythona.
http://openbookproject.net/thinkcs/python/english2e/http://openbookproject.net/thinkcs/python/english2e/http://docs.python.org/tutorial/http://docs.python.org/tutorial/http://openbookproject.net/thinkcs/python/english2e/http://openbookproject.net/thinkcs/python/english2e/http://find/
8/16/2019 Inzynieria Cala
6/336
Zasady zaliczenia
Regulamin studiówZaliczenie ćwiczeń:
na każdych zajęciach oprócz ostatnich punkty za kodowaniezadań; 14 zajęć, zawsze do zdobycia 5-6 punktów (w sumiemin. 75 punktów)każde zadanie będzie można dokończyć w domu (terminzawsze podany na zajęciach)quiz na 25 punktóww sumie można będzie zdobyć 100 punktów (lub nieco ponad)
Praca niesamodzielnaMinus 10 punktów na koniec za każdy wykryty przypadekniesamodzielnej pracy, brak punktów za zadanie.
http://find/
8/16/2019 Inzynieria Cala
7/336
Zasady zaliczenia
Progi PUNKTOWE:
0.00 – 59.99 ndst60.00 – 69.99 dst70.00 – 79.99 dst pl80.00 – 89.99 db90.00 – 94.99 db pl95.00 – 100 bdb
brak wystarczającej liczby puntków = poprawka we wrześniu
formuła poprawki: quiz + do napisania zadanieprogramistyczne
http://find/http://goback/
8/16/2019 Inzynieria Cala
8/336
Quiz
quiz na moodle
test wyboruTerminKolokwium odbędzie się na ostatnich zajęciach.
http://find/
8/16/2019 Inzynieria Cala
9/336
Nieobecności
usprawiedliwienia przynosimy na najbliższych zajęciach popowrocie na uczelnię
po tym terminie brak możliwości usprawiedliwienia zajęć
do 2 nieusprawiedliwionych nieobecności – nie odejmujemypunktów
każda kolejna nieobecność to –3 punkty
frekwencja poniżej 50% – brak klasyfikacji (lub ndst w
przypadku studentów z IOZ)wykonywanie zadań nie wymaga obecności na zajęciach
http://find/
8/16/2019 Inzynieria Cala
10/336
IOZ
Podpisujemy zgodę na IOZ, ale zasady zaliczenia się niezmieniają.
Wszystkich studentów, bez względu na to, czy uzyskaliIOZ, czy nie, obowiązują takie same reguły zdobywania punktów.Wyjątkiem jest frekwencja poniżej 50%, co reguluje regulaminstudiów.
http://find/
8/16/2019 Inzynieria Cala
11/336
Reguły ogólne
W przypadkach spornych głównymi obowiązujacymi regułami jest
regulamin studiów i zasady zaliczenia obowiązujące w KIE: http://www.kie.ue.poznan.pl/pl/content/zasady-zaliczania
http://www.kie.ue.poznan.pl/pl/content/zasady-zaliczaniahttp://www.kie.ue.poznan.pl/pl/content/zasady-zaliczaniahttp://www.kie.ue.poznan.pl/pl/content/zasady-zaliczaniahttp://www.kie.ue.poznan.pl/pl/content/zasady-zaliczaniahttp://find/
8/16/2019 Inzynieria Cala
12/336
Rejestracja na przedmiot
Hasło:
http:
//moodle.ue.poznan.pl/course/view.php?id=6775
(WIGE RII G03 IwGiA - dz II) kokosanki
(WIGE RII G02 EB - dz II) makaroniki
http://moodle.ue.poznan.pl/course/view.php?id=6775http://moodle.ue.poznan.pl/course/view.php?id=6775http://moodle.ue.poznan.pl/course/view.php?id=6775http://moodle.ue.poznan.pl/course/view.php?id=6775http://find/
8/16/2019 Inzynieria Cala
13/336
Rejestracja do sprawdzarki
http://150.254.36.78/judge/sharifjudge/index.php/
register
Kod rejestracji: herbatniki
http://150.254.36.78/judge/sharifjudge/index.php/registerhttp://150.254.36.78/judge/sharifjudge/index.php/registerhttp://150.254.36.78/judge/sharifjudge/index.php/registerhttp://150.254.36.78/judge/sharifjudge/index.php/registerhttp://find/http://goback/
8/16/2019 Inzynieria Cala
14/336
Wprowadzenie do programowania w języku Python
Uniwersytet Ekonomiczny w Poznaniu
16 lutego 2016
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
15/336
Język Python
Definicja (Wikipedia)
Język programowania wysokiego poziomu ogólnego przeznaczenia irozbudowanym pakiecie bibliotek standardowych, którego ideąprzewodnią jest czytelność i klarowność kodu źródłowego. Jego składniacechuje się przejrzystością i zwięzłością.
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
16/336
Hello world w javie
1p ub li c c la ss H e ll oW or l d {
2p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) {
3S y st e m . o ut . p r in t ln ( " H e ll o , w or l d ! " );
4}
5}
./hello world.java
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
17/336
Hello world w Pythonie
1p ri n t ( " H e ll o w o rl d ! " )
./hello.py
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
18/336
Wybór języka programowania
Język Poziom w stosunku do C
C 1C++ 2.5
Fortran 95 2Java 2.5Perl 6
Python 6Smalltalk 6
Microsoft Visual Basic 4.5
Tabela: Poziomy języka w stosunku do C. Źródło: Code Complete 2 - Steve McConnell, za “Estimating Software Costs” (Jones1998), “Software Cost Estimation with Cocomo II” (Boehm 2000), “An Empirical Comparison of Seven Programming Languages”(Prechelt 2000).
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
19/336
Wersje Pythona
Ciągle wykorzystywane są dwie wersje:
Python 2 (ostatnia wersja: Python 2.7)
Python 3
Wersje te nie są ze sobą w pełni zgodne!
My na zajęciach korzystamy z wersji trzeciej.
Wprowadzenie do programowania w języku Python
http://find/http://goback/
8/16/2019 Inzynieria Cala
20/336
Python – różne implementacje
Różne implementacje języka Python:
CPython (Python) – główna implementacja, najczęściej stosowana,także podczas tych zajęć.
Jython – uruchamia programy w Pythonie na wirtualnej maszynieJava.
Iron Python – uruchamia programy w Pythonie w środowsku .NET.
PyPy – szybsze działanie, ale brak kompatybilności z niektórymielementami języka.
Różnią się m. in.:
szybkością wykonywania konkretnych operacjidostępnymi bibliotekami
Wprowadzenie do programowania w języku Python
C
http://find/http://goback/
8/16/2019 Inzynieria Cala
21/336
Co można zrobić za pomocą Pythona?
Przykładowe biblioteki:
django – web application framework
scipy – obliczenia naukowe
nltk – przetwarzanie języka naturalnego
pyQT – aplikacje okienkowe
Przykłady programów napisanych w pythonie:
BitTorrent
OpenERP
DropboxUbuntu software center
Wprowadzenie do programowania w języku Python
K i P h
http://find/
8/16/2019 Inzynieria Cala
22/336
Korzystanie z Pythona
korzystanie z interpretera na bieżąco
pisanie kodu w pliku
Wprowadzenie do programowania w języku Python
T i i h i i ó
http://find/
8/16/2019 Inzynieria Cala
23/336
Tworzenie i uruchamianie programów
Dowolny edytor tekstowy
Standardowo kodowanie - UTF-8, może być ASCII
pliki z rozszerzeniem .py lub .pyw (aplikacje okienkowe)
Uruchamianie: w konsoli - python hello.py lub tylko nazwa pliku wprzypadku zawarcia w pliku linii shebang
1#!/usr/bin/python
2p ri n t ( " H e ll o w o rl d ! " )
./hello shebang.py
Wprowadzenie do programowania w języku Python
P i j i h
http://find/
8/16/2019 Inzynieria Cala
24/336
Programowanie na zajęciach
na zajęciach korzystamy z systemu Windows
edytor: zalecany notepad++ lub PyScripter
podczas pracy w domu, w przypadku korzystania z systemu Linux,
polecam gedit
Ważne!
kodowanie znaków: UTF-8
wcięcia: każdy tabulator to cztery spacje
Wprowadzenie do programowania w języku Python
St d d ASCII
http://find/
8/16/2019 Inzynieria Cala
25/336
Standard ASCII
Przewiduje użycie jednego bajtu na znak
Poszczególne liczby kt. można wpisać w bajt są interpretowane jakoznaki
Obsługuje podstawowy zestaw znaków (litery, cyfry, podstawoweznaki matematyczne itp.)
Nie obsługuje alfabetów niełacińskich lub zawierających dodatkoweznaki (polski, hiszpański, chiński itp.)
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
26/336
Unicode
8/16/2019 Inzynieria Cala
27/336
Unicode
Przedsięwzięcie skatalogowania wszystkich (!) znaków używanych w jakimkolwiek języku w jakimkolwiek czasie i różnych innych znakówużytych w piśmie
Każdy symbol ma przyporządkowany identyfikator - to obejmujeUnicode (tabela ok 100 tys. symboli)
Identyfikatory trzeba przetłumaczyć na zapis w bajtach - zakodować
Różne kodowania: UTF-7,UTF-8,UTF-16,UTF-32 różnią się ilościąbajtów przewidzianych do reprezentacji pojedynczego znaku
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
28/336
Typy danych
8/16/2019 Inzynieria Cala
29/336
Typy danych
Liczby całkowite - int
Nieograniczonej długości (długie wolniej działają) - pamięć granicą
Ciągi tekstowe - strUnicode - dowolne znakiUjęte w cudzysłów podwójny lub pojedynczy
Wprowadzenie do programowania w języku Python
Dostęp do elementów ciągu tekstowego
http://find/
8/16/2019 Inzynieria Cala
30/336
Dostęp do elementów ciągu tekstowego
‘‘Trudne czasy’’[7]
‘‘muflon’’[0]
‘‘Trudne czasy’’[0:4]
działa dla każdej sekwencji
Wprowadzenie do programowania w języku Python
Konwersje
http://find/
8/16/2019 Inzynieria Cala
31/336
Konwersje
int(‘‘45’’)
int(‘‘ 45 ’’) - toleruje spacje
str(912)w przypadku niemożności konwersji - wyjątek
można zaprojektować własny typ danych, który będzie obsługiwałkonwersję
Wprowadzenie do programowania w języku Python
Identyfikatory
http://find/
8/16/2019 Inzynieria Cala
32/336
Identyfikatory
Identyfikator - nazwa referencji (“zmienna”)
Reguły
bez spacjizaczyna się literą lub podkreśleniem (uwaga - podkreślenia raczejzastrzeżone do specjalnych zadań)może zawierać cyfrywielkość liter ma znaczenie
Wprowadzenie do programowania w języku Python
Dynamiczna kontrola typu
http://find/
8/16/2019 Inzynieria Cala
33/336
Dynamiczna kontrola typu
Python ustala typ obiektu w trakcie wykonania programu, nie trzebago deklarować. Ten typ jest niezmienny.
Referencja do obiektu akceptuje obiekt dowolnego typu i można wkażdym momencie przypisać jej obiekt innego typu.
1a = 7
2a = a + 13a = " kura "
funkcja type() zwraca typ obiektu
1p r i n t ( a , t y p e ( a ) )
Wprowadzenie do programowania w języku Python
Standardowe wejście
http://find/
8/16/2019 Inzynieria Cala
34/336
Standardowe wejście
1p ri nt ( " J ak m as z na i mi e ? ")
2i mi e = i np ut ( )
3p ri n t ( " C z es c " , i mi e )
./input.py
Wprowadzenie do programowania w języku Python
Zadanie na rozgrzewkę – formularz
http://find/http://goback/
8/16/2019 Inzynieria Cala
35/336
Zadanie na rozgrzewkę formularz
Program zadaje kolejno następujące pytania (w nawiasach znajdują się
nazwy zmiennych):1 Podaj imię: (imie)
2 Podaj nazwisko: (nazwisko)
3 Rok studiów: (rok)
4
Specjalność: (specjalnosc)5 Miasto rodzinne: (miasto)
6 Zainteresowania: (zainteresowania)
Wypisanie na ekranie frazy:
Student nazywa się (imie) (nazwisko) i jest na (rok) roku studiów, naspecjalności (specjalnosc). Jego miasto rodzinne to (miasto), a jegozainteresowania obracają się wokół takich tematów jak: (zainteresowania).
Wprowadzenie do programowania w języku Python
Warunek
http://find/
8/16/2019 Inzynieria Cala
36/336
Najprostszy warunek w Pythonie
1if 5 > 0:
2p ri nt ( " P ie c j es t w ie ks ze od z er a " )
3p ri n t ( " K o ni e c p r og r am u " )
./if.py
Na co zwracamy uwagę:
dwukropek po warunku
wcięcie w linijkach po warunku sygnalizuje zasięg warunku (który
fragment kodu będzie wywołany warunkowo)
Wprowadzenie do programowania w języku Python
Prosta pętla
http://find/
8/16/2019 Inzynieria Cala
37/336
pę
Pętla for:
1for i in r an ge ( 0 , 6):
2p r i n t ( i )
./for.py
Na co zwracamy uwagę:
dwukropek po definicji pętli
wcięcie w linijkach wskazuje który fragment kodu wykonywany jest wpętli
proszę przetestować: co robi funkcja range?
Wprowadzenie do programowania w języku Python
Zadanie 1 – licznik
http://find/
8/16/2019 Inzynieria Cala
38/336
użytkownik wprowadza 5 wyrazów (po każdym wciska Enter)
cel: liczymy, ile z tych wyrazów zaczynało się od wielkiej literyPrzykładowe wejście:
1OJEJKU
2Jacek
3bINGO
4Ciastko
5czkawka
./zad1 input.txt
Przykładowe wyjście:
13
./zad1 output.txt
Podpowiedź na kolejnej stronie :)
Wprowadzenie do programowania w języku Python
Zadanie 1 – podpowiedź
http://find/
8/16/2019 Inzynieria Cala
39/336
p p
Przeanalizuj co robią następujące linie:
1p r i n t ( s t r . l o w e r ( " A a a " ) )
2p r i n t ( s t r . l o w e r ( " A A A " ) )
3p r i n t ( s t r . l o w e r ( " a a a " ) )
./lower.pyPrzy rozwiązaniu zadania wykorzystaj:
funkcję str.lower()
dostęp do elementu sekwencji
pętlęwarunek
Wprowadzenie do programowania w języku Python
Zadanie 2 – Weryfikacja numeru PESEL
http://find/
8/16/2019 Inzynieria Cala
40/336
y j
1 użytkownik wprowadza numer PESEL
2 sprawdzamy, czy zgadza się ostatnia cyfra
3 jeśli ostatnia cyfra jest prawidłowa program ma zwrócić 1
4 jeśli nie - program ma zwrócić 0
Zakładamy, że numer ma prawidłową długość (11 znaków).
Regułę poprawności numeru proszę odszukać w Sieci.
Przykładowe wejście:
197082123152
Przykładowe wyjście:
10
Wprowadzenie do programowania w języku Python
http://find/
8/16/2019 Inzynieria Cala
41/336
Wprowadzenie do programowania w języku Python(liczby, ciągi znaków, kolekcje, operatory logiczne)
Uniwersytet Ekonomiczny w Poznaniu
16 lutego 2016
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Liczby i operatory liczbowe
http://find/http://goback/
8/16/2019 Inzynieria Cala
42/336
Interpreter Python działa jak prosty kalkulator
Wykorzystywane operatory podstawowe: +, –, *, /, ()
12 + 2
22 + 2 * 2
3(2 + 2) * 2
43 / 2
./operators numbers.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Liczby i operatory liczbowe
http://find/
8/16/2019 Inzynieria Cala
43/336
Liczby całkowite (np. 2, 10, 154) są typu int
Liczby w postaci dziesiętnej (np. 2.0, 9.6) są typu floatWynik dzielenia (/) zawsze zwraca float
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Zaawansowane operatory liczbowe
http://find/http://goback/
8/16/2019 Inzynieria Cala
44/336
Uzyskanie reszty z dzielenia %
Otrzymanie liczby całkowitej z dzielenia //
Podnoszenie do potęgi **
113 / 521 3 / / 5
313 % 5
42 ** 2
52 ** 3
./advanced operators.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Działania na ciągach znaków
http://find/
8/16/2019 Inzynieria Cala
45/336
Ciągi znaków wypisujemy w "..." lub ’...’
1’ S ma ll a pp le ’
2
3’ It ’ s a s ma ll a pp le ’
4#blad
5
6’ It \ ’s a s ma ll a pp le ’
7" It ’ s a s ma ll a pp le "
./string expression.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/http://goback/
8/16/2019 Inzynieria Cala
46/336
Łączenie ciągów znaków
8/16/2019 Inzynieria Cala
47/336
Łączenie przy wykorzystaniu operatora +
Powielanie przy wykorzystaniu operatora *
14 * ’ Uni ’ + ’ wersytet ’
./string concatenate.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Inne sposoby łączenia znaków
http://find/
8/16/2019 Inzynieria Cala
48/336
1p ri nt ( ’ U ni ’ ’ w er sy ’ ’ t et ’ )2
3e nd in g = ’ tet ’
4p ri nt ( ’ U ni ’ ’ w er sy ’ e nd in g ) # blad
5p ri nt ( ’ Uni ’ ’ w er sy ’ + e nd in g ) # d ob rz e
6
7p ri nt ( ’ U ni ’ , ’ w er sy ’ , e nd in g )8
9w or d = ’ U ni we rs y ’
10word = word + en din g # w yn ik : U ni w er s yt et
11w or d += e nd in g
12p ri nt ( w or d )
./string concatenate 2.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Kolekcje
http://find/http://goback/
8/16/2019 Inzynieria Cala
49/336
Kolekcje wbudowane w Pythona: listy, zbiory, krotki, słowniki
Kolekcje mutowalne (np. lista) i niemutowalne (np. krotka)
Wartości obiektów (jeżeli są mutowalne) w niemutowalnej kolekcji
mogą podlegać zmianieW kolekcji można przechowywać dowolne obiekty niekoniecznie tegosamego typu
Kolekcje przechowują w istocie referencje do obiektów
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Krotki
http://find/
8/16/2019 Inzynieria Cala
50/336
1( " D a n i a " , " B e l g i a " , " F i n l a n d i a " , " H o l a n d i a " )
2( " j e d e n " , )
3( 1 , " d w a " , 3 , " c z t e r y " )
4() # p us ta k ro tk a
./tuples.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Metody na krotkach
http://find/
8/16/2019 Inzynieria Cala
51/336
Krotki nie posiadają metod dodawania elementów: append i extend
Krotki nie posiadają metod usuwania elementów: remove i pop
Można wyszukiwać elementy w krotce wykorzystując metodę index
Można wykorzystać operator in, aby sprawdzić, czy krotka zawieradany element
Dlaczego w takim razie używać krotek?
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
52/336
Metody na listach - dodawanie
8/16/2019 Inzynieria Cala
53/336
append - dodawanie pojedynczego elementu do końca listy
insert - dodawanie pojedynczego elementu do listy w wyznaczonymmiejscu
extend - dodawanie wielu elementów (łączenie z inną listą)
1l is t = [ ’ k a te dr a ’ , ’ i ns ty tu t ’ ]
2l i s t . a p p e n d ( ’ u n i w e r s y t e t ’ )
3l is t . i n s er t ( 2 , ’ u c z el n ia ’ )
4l is t . e x t en d ( [ ’ s z k ol a ’ , ’ w y dz i al ’ ] )
./lists add.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Metody na listach - usuwanie
http://find/
8/16/2019 Inzynieria Cala
54/336
remove - usuwanie pierwszej występującej wartości w liście
pop - usuwanie ostatniego elementu na liście i zwrócenie jegowartości
clear - usuwanie wszystkich elementów z listy
1list = [ ’a ’, ’ b’ , ’c ’, ’a ’, ’d ’]
2l i s t . r e m o v e ( ’ a ’ )
3l i s t . p o p ( )
4l i s t . c l e a r ( )
./lists remove.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Metody na listach c.d.
http://find/
8/16/2019 Inzynieria Cala
55/336
index(x) - zwraca indeks pierwszego elementu w liście o wartości xcount(x) - zwraca liczbę wystąpień x w liście
sort - sortuje listę
reverse - odwraca kolejność elementów w liście
1list = [ ’a ’, ’ b’ , ’c ’, ’a ’, ’d ’]
2l i s t . i n d e x ( c )
3l i s t . c o u n t ( a )
4l i s t . s o r t ( )
5l i s t . r e v e r s e ( )
./lists methods.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Kolekcje c.d.
http://find/
8/16/2019 Inzynieria Cala
56/336
Można zagnieżdżać kolekcje w sobie - są one obiektami jak wszystkoinne
funkcja len() podaje długość kolekcji
1l e n ( ( " j e d e n " , ) )
2len([])3l e n ( [ 1 , 2 , 3 , " p a u z a " ] )
4l e n ( " a u t o m a t y c z n i e " )
./collections len.py
Ciąg tekstowy jest krotką!
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Indeksowanie kolekcji
http://find/
8/16/2019 Inzynieria Cala
57/336
1c o l le c t io n = ( " D a n ia " , " B e l g ia " , " F i n l a nd i a " )
2c o l l e c t i o n [ 0 ]
3c o l l e c t i o n [ - 2 ]
4
5w or d = ’ U n iw er s yt e t ’
6word[2]
7word[-1]
8
9l is t = [ ’ k a t ed r a ’ , ’ u n i w er s y te t ’ , ’ i n s t yt u t ’ ]
10list[1]
11list[-3]
./collections index.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Przycinanie kolekcji
http://find/
8/16/2019 Inzynieria Cala
58/336
1c o l le c t io n = ( " D a n ia " , " B e l g ia " , " F i n l a nd i a " )
2c o l l e c t i o n [ 0 : 2 ]
3c o l l e c t i o n [ - 2 : ]
4
5w or d = ’ U n iw er s yt e t ’
6word[0:3]
7w o r d [ - 5 : - 1 ]
8
9l is t = [ ’ k a t ed r a ’ , ’ u n i w er s y te t ’ , ’ i n s t yt u t ’ ]
10list[:1]
11l i s t [ - 2 : ]
./collections slice.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operator tożsamości (logiczny)
http://find/
8/16/2019 Inzynieria Cala
59/336
is - sprawdza czy referencje prowadzą do tego samego obiektu
1a = [ " U ni we rs yt et " , 4]
2b = [ " U ni we rs yt et " , 4]
3a is b4
5b = a
6a is b
./operator is.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory relacyjne / porównania (logiczne)
http://find/
8/16/2019 Inzynieria Cala
60/336
Operatory , !=
1a = [ " U ni we rs yt et " , 4]
2b = [ " U ni we rs yt et " , 4]
3p ri nt ( a is b )
4p ri nt ( a == b )
./operators.py
Łączenie operatorów
1a = 8
20
8/16/2019 Inzynieria Cala
61/336
in - pozwala sprawdzić czy element należy do kolekcji
1t up = ( " D a ni a " , " B e l gi a " ,6 , " H o l an d ia " )
26 in tup
3’ Dan ia ’ not in tup
./operator in.py
Operator przynależności działa na łańcuchach znaków
1f ra za = " D zi ki e po la "
2" J" in f ra za
3" po " in f ra za
./operator in string.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory logiczne
j k ó d i j ik
http://find/
8/16/2019 Inzynieria Cala
62/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0
piec and dwa
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory logiczne
d j t któ d t i j ik
http://find/
8/16/2019 Inzynieria Cala
63/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0
piec and dwa #2piec and zero
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory logiczne
d t j t któ d t i j ik
http://find/
8/16/2019 Inzynieria Cala
64/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0piec and dwa #2piec and zero #0zero and piec
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
65/336
Operatory logiczne
and or not zwracają argument który determinuje wynik
8/16/2019 Inzynieria Cala
66/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0piec and dwa #2piec and zero #0zero and piec #0dwa and piec #5piec and True
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
67/336
Operatory logiczne
and or not zwracają argument który determinuje wynik
8/16/2019 Inzynieria Cala
68/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0piec and dwa #2piec and zero #0zero and piec #0dwa and piec #5piec and True #TrueTrue and piec #5
False and piec
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory logiczne
and or not zwracają argument który determinuje wynik
http://find/
8/16/2019 Inzynieria Cala
69/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0piec and dwa #2piec and zero #0zero and piec #0dwa and piec #5piec and True #TrueTrue and piec #5
False and piec #Falsezero and True
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory logiczne
and, or, not zwracają argument, który determinuje wynik
http://find/
8/16/2019 Inzynieria Cala
70/336
and, or, not zwracają argument, który determinuje wynik
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0piec and dwa #2piec and zero #0zero and piec #0dwa and piec #5piec and True #TrueTrue and piec #5
False and piec #Falsezero and True #0zero and False
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Operatory logiczne
and, or, not zwracają argument, który determinuje wynik
http://find/
8/16/2019 Inzynieria Cala
71/336
, , ją g , y j y
liczby niezerowe są traktowane jak prawda (True), 0 jak fałsz (False)
Operator not zawsze zwraca wartość boolowską
piec = 5dwa = 2zero = 0piec and dwa #2piec and zero #0zero and piec #0dwa and piec #5piec and True #TrueTrue and piec #5
False and piec #Falsezero and True #0zero and False #0
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Zadanie 1 – anagramy
użytkownik wprowadza 1 wyraz wzorcowy, np. tarka (zatwierdza
http://find/
8/16/2019 Inzynieria Cala
72/336
użytkownik wprowadza 1 wyraz wzorcowy, np. tarka (zatwierdzaEnterem)
użytkownik wprowadza 5 wyrazów (po każdym wciska Enter)cel: posortowana lista wyrazów będących anagramami wyrazuwzorcowego
Przykładowe wejście:
1krata
2karat3karoca
4trakt
5karta
./zad1 input.txt
Przykładowe wyjście:
1[ ’ k a r a t ’ , ’ k a r t a ’ , ’ k r a t a ’ ]
./zad1 output.txt
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Zadanie 1 – anagramy (pomoc)
http://find/
8/16/2019 Inzynieria Cala
73/336
Przy rozwiązaniu zadania możesz wykorzystać:
listę
indeksowanie krotek
sortowanie
pętlę
warunek
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
Instrukcja warunkowa
http://find/
8/16/2019 Inzynieria Cala
74/336
1if x > 5:
2pass3elif x < 5:
4p ri nt ( " x j es t m ni ej sz e od 5 " )
5e l s e :
6p ri nt ( " x j es t r ow ne 5 ")
./if.py
elif i else są opcjonalne
zamiennik switch lub case w innych językach programowania
jeżeli chcemy uwzględnić dane wyrażenie, ale nic nie robimy toużywamy słowa kluczowego pass - pustej instrukcji
pamiętać o wcięciach!
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
75/336
8/16/2019 Inzynieria Cala
76/336
Pętla for, funkcja range() c.d.
8/16/2019 Inzynieria Cala
77/336
Jaka jest różnica?
1l is t a = [ ’ k a t ed r a ’ , ’ u c z el n ia ’ ]
2for i in lista :
3p r i n t ( i )
4
5f or j in r an ge ( l en ( l i st a ) ):
6p r i n t ( j )
./for range diff.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
78/336
Break, continue
break stosujemy w celu przerwania działania pętli
8/16/2019 Inzynieria Cala
79/336
break stosujemy w celu przerwania działania pętli
1for i in rang e (2 , 10):2if i % 2 == 0:
3p r in t ( i , " j e st ą p ie r ws z ą cy fr ą p ar z ys t " )
4break
./for break.py
continue przechodzi do następnej iteracji w pętli
1for i in rang e (2 , 10):
2if i % 2 == 0:
3p ri nt ( i , " j es t p ar zy st a " )
4continue
5p r in t ( i , " j e st n i ep a r zy s t a " )
./for continue.py
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
80/336
Zadanie 2 – nawiasy c.d.
Przykładowe wejścia dla True:
8/16/2019 Inzynieria Cala
81/336
y j
1( if ( zero ? x ) max (/ 1 x ))
./zad2 input 1.txt
1I told ( that its not ( yet ) done ). (42)
./zad2 input 2.txt
Przykładowe wejścia dla False:
1: -)
./zad2 input 3.txt
1())(
./zad2 input 4.txt
Wprowadzenie do programowania w języku Python (liczby, ciągi znaków, ko
http://find/
8/16/2019 Inzynieria Cala
82/336
Wprowadzenie do programowania w języku Python(wyjątki, funkcje, rekurencja)
Uniwersytet Ekonomiczny w Poznaniu
16 lutego 2016
Wprowadzenie do programowania w języku Python (wyjątki, funkcje, rekur
http://find/
8/16/2019 Inzynieria Cala
83/336
Przykład
8/16/2019 Inzynieria Cala
84/336
1# ! / u sr / b i n / e nv p y th o n3
2try:
3t e x t = " t e s t 5 "
4i = int ( text )
5p r in t ( " i w y no s i " , i )6e xc ep t V al u eE rr or a s e x1 :
7p ri nt ( " k o nw er sj a " , text , " do i s ie n ie p ow io dl a " )
./wyjatek.py
Wprowadzenie do programowania w języku Python (wyjątki, funkcje, rekur
EAFP: Easier to ask for forgiveness than permission.
Zalecany styl kodowania w Pythonie (ale np. w Javie już
http://find/
8/16/2019 Inzynieria Cala
85/336
Zalecany styl kodowania w Pythonie (ale np. w Javie jużnie. . . dlaczego?).
Lepiej tak:
1try:
2el = e le me nt s [ k ey ]
3# do sth
4e xc ep t I nd ex E rr or as e :5# do sth else
A nie tak:
1if len ( e le me nt s ) > k ey :2el = e le me nt s [ k ey ]
3# do sth
4else:
5# do sth else
Wprowadzenie do programowania w języku Python (wyjątki, funkcje, rekur
http://find/
8/16/2019 Inzynieria Cala
86/336
Przeciążone operatory dla list
8/16/2019 Inzynieria Cala
87/336
Operator + i += są przeciążone dla ciągów znaków (str)
1i m i e = " J a n "
2i m i e + = " K o w a l s k i "
Uwaga - powstaje nowy ciąg znaków (str jest niezmienny)Dla list + powoduje dodanie do listy
1z i a r n a = [ " s e z a m " , " s l o n e c z n i k " ]
2z i a r n a + = [ " d y n i a " ]
Wprowadzenie do programowania w języku Python (wyjątki, funkcje, rekur
http://find/
8/16/2019 Inzynieria Cala
88/336
Tworzenie i wywoływanie funkcji
8/16/2019 Inzynieria Cala
89/336
bloki instrukcji można ujmować w funkcje
1d e f n a z w a F u n kc j i ( a r gu m en t , a r g u m e n t 2 ) :
2pakiet
argumenty są opcjonalnewartość zwracana domyślnie to None, chyba że funkcja zwróciwartość przy pomocy polecenia return
def działa jak operator przypisania - powoduje utworzenie obiektufunkcji i przypisanie go do referencji o wskazanej nazwie
funkcje jako obiekty mogą być przechowywane w kolekcjach,przekazywane jako argumenty do innych funkcji
Wprowadzenie do programowania w języku Python (wyjątki funkcje rekur
Przykład funkcji
1d ef p o b ie r z Li c z be ( m sg ) :
2w hi le T ru e :
http://find/
8/16/2019 Inzynieria Cala
90/336
2w hi le T ru e :
3try:
4l i n e = i n p u t ( m s g )5i = i n t ( l i n e )
6r et ur n i
7e xc ep t V al ue E rr or a s e rr :
8p r i n t ( e r r )
funkcja pobiera liczbę
jeżeli błąd to wraca do ponownego wykonania pętli, jeżeli bezbłędów - zwraca liczbę
wywołanie:
1w ie k = p o bi e rz L ic z be ( " P o da j s wo j w ie k " )
Wprowadzenie do programowania w języku Python (wyjątki funkcje rekur
http://find/
8/16/2019 Inzynieria Cala
91/336
Zadanie na rozgrzewkę. . . c.d.
8/16/2019 Inzynieria Cala
92/336
Zaimplementuj działanie na mnożenie, zastosuj je w wywołaniufunkcji policz.
Zaimplementuj sumę w taki sposób, żeby w liście mogły znaleźć się
dowolne wartości, a te, które nie będą liczbami, będą ignorowane.Przykładowo wywołanie dzialanie([1,‘‘a’’,-3,‘‘ 2 ’’],suma ignorowanie) powinno zwrócić 0.
Wprowadzenie do programowania w języku Python (wyjątki funkcje rekur
http://find/
8/16/2019 Inzynieria Cala
93/336
Zadanie na rozgrzewkę. . . c.d.
8/16/2019 Inzynieria Cala
94/336
Zaimplementuj funkcję zliczającą n wyrazów ciągu arytmetycznego.
Dlaczego w tym wypadku zastosowanie funkcji rekurencyjnej na n-ty
wyraz ciągu jest niewskazane?
Wprowadzenie do programowania w języku Python (wyjątki funkcje rekur
Moduły
Moduł to plik Pythona zawierający klasy i funkcjeMożna zaimportować moduł aby używać funkcji (dostęp przy
k ki)
http://find/http://goback/
8/16/2019 Inzynieria Cala
95/336
pomocy kropki)
1i m po r t s ys
2p r i n t ( s y s . a r g v )
Python posiada bogatą bibliotekę gotowych modułów
Przykład:1i m po r t r a nd o m
2x = r an do m . r a nd in t ( 1 , 16 )
3y = r a nd o m . c h oi c e ( [ " j a bl k o " , " g r us z ka " , " b an a n " ])
moduły standardowe zaczynają się małymi literami, własne możnanazywać dużymi (dla odróżnienia)konwencja: importy na początku plikusugerowana kolejność importowania: standardowe, zewn., własne
Wprowadzenie do programowania w języku Python (wyjątki funkcje rekur
http://find/
8/16/2019 Inzynieria Cala
96/336
Zadanie 2
8/16/2019 Inzynieria Cala
97/336
Oblicz, na ile sposobów można rozmienić określoną kwotę pieniędzy,mając do dyspozycji określone nominały.
Przykładowo dla nominałów [1, 2] kwotę 4 można rozmienić na 3sposoby:
1 + 1 + 1 + 11 + 1 + 2
2 + 2
Wskazówka: warto użyć rekurencji.
Wprowadzenie do programowania w języku Python (wyjątki funkcje rekur
http://find/
8/16/2019 Inzynieria Cala
98/336
8/16/2019 Inzynieria Cala
99/336
Listy składane
tworzenie listy pętlą for
8/16/2019 Inzynieria Cala
100/336
1
p r z e s t e p n e = [ ]2for rok in r an ge (1900,1940):
3if ( rok % 4 ==0 and
4rok % 100 !=0) or ( rok % 400 == 0):
5p r z e s t e p n e . a p p e n d ( r o k )
lista składana - [element for element in iteracja]
1lata = [ y for y in r an ge (1900,1940)]
lista składana z warunkiem
1
p rz e st ep n e = [ r ok for rok in r an ge (1900,1940)2if ( rok % 4 ==0 and r ok % 100 !=0)
3or ( rok % 400 == 0)]
Listy składaneZbiorySłowniki
http://find/
8/16/2019 Inzynieria Cala
101/336
Przykłady list składanych
8/16/2019 Inzynieria Cala
102/336
Liczby pierwsze to takie,... które nie są niepierwsze (nie sąwielokrotnością innej liczby niż 1)
1n p r = [ j for i in r an ge (2,8) for j in r an ge ( i * 2 , 5 0 , i ) ]
2p r = [ x for x in r an ge (2 , 50 ) if x no t in npr]
Listy składaneZbiorySłowniki
Przykłady list składanych
http://find/
8/16/2019 Inzynieria Cala
103/336
Przykład ze słowami:
1w or ds = ’ The q ui ck b ro wn fo x j um ps ’ . s pl it ( )
2s t u f f = [ [ w . u p p e r ( ) , w . l o w e r ( ) , len ( w ) ] for w in words]
Listy składaneZbiorySłowniki
Zbiór - set
obsługuje in, len, iterację
http://find/
8/16/2019 Inzynieria Cala
104/336
zbiory modyfikowalne - set, niemutowalne - frozensetdodane do zbioru mogą być tylko typy które dają hash tzn.float,frozenset,int,str,tuple
typy mutowalne nie mogą być dodawane do zbioru bo ich hash byłbyzmienny (dict,list,set)
1S = {7 , ‘ ‘ w el on ’ ’ , ( ‘‘ a ’ ’ ,1) , frozenset ( { 3 , 6 , 8 } ) }
pusty zbiór - tylko przez funkcję set()
zbiory nie przechowują duplikatów. Trick na usunięcie duplikatów zlisty
1x = list ( set (x))
Listy składaneZbiorySłowniki
Operatory i funkcje dla zbiorów
suma
http://find/
8/16/2019 Inzynieria Cala
105/336
1set ( ‘ ‘ p ec an ’ ’ ) | set ( ‘ ‘ p i e ’ ’ )
iloczyn
1set ( ‘ ‘ p ec an ’ ’ ) & set ( ‘ ‘ p i e ’ ’ )
różnica
1set ( ‘ ‘ p ec an ’ ’ ) - set ( ‘ ‘ p i e ’ ’ )
różnica symetryczna
1set ( ‘ ‘ p ec an ’ ’ ) ^ set ( ‘ ‘ p i e ’ ’ )
Listy składaneZbiorySłowniki
Operatory i funkcje dla zbiorów
http://find/
8/16/2019 Inzynieria Cala
106/336
powyższe operatory i funkcje aktualizujące im odpowiadające tworząkopie. Są wersje aktualizujące lewy argument
funkcje isdisjoint, pop, remove, update, add, clear, copy
zbiory można tworzyć przez zbiór składany
Listy składaneZbiorySłowniki
Frozenset
http://find/
8/16/2019 Inzynieria Cala
107/336
tworzenie - tylko przez funkcję frozenset()
obsługuje z API zbioru tylko funkcje nie zmieniające zbioru
Listy składaneZbiorySłowniki
Słownik
http://find/
8/16/2019 Inzynieria Cala
108/336
Słownik albo mapa (dictionary, map) to kolekcja par klucz - wartośćobsługuje in, len() oraz iterację
w Pythonie 3.0 jest dict oraz collections.defaultdict - słownik zwartościami domyślnymi
słownik jest kolekcją nieuporządkowaną tak jak zbiór
jako klucze mogą służyć tylko wartości hashowalne (tak jak przyzbiorach - float, frozenset, int, str, tuple)
wartości mogą być dowolne
słownik jest modyfikowalny
można porównywać słowniki operatorami == i !=
Listy składaneZbiorySłowniki
Słownik - tworzenie
http://find/
8/16/2019 Inzynieria Cala
109/336
1d = dict ( { ’ id ’ : 1 94 8 , ’ n a zw a ’ : ’ Z m y wa r ka ’ ,2’ r o z m i a r ’ : 3 } )
3d2 = dict ( [( ’ i d ’ , 19 48 ) , ( ’ n a z wa ’ , ’ Z m y w a rk a ’ ) ,
4( ’ r o z m i a r ’ , 3 ) ] )
5d3 = dict ( zip ( ( ’ i d ’ , ’ n a z w a ’ , ’ r o z m i a r ’ ) ,
6( 1 9 4 8 , ’ Z m y w a r k a ’ , 3 ) ) )
7d 4 = { ’ id ’ : 19 48 , ’ n az wa ’ : ’ Z m yw ar ka ’ , ’ r oz mi ar ’ : 3 }
d2 tworzy słownik z kolekcji par
d3 używa funkcji zip która zwraca listę krotek odpowiedniosparowanych
Listy składaneZbiorySłowniki
Słownik - wykorzystanie
można odwoływać się do elementów słownika po kluczu
http://find/
8/16/2019 Inzynieria Cala
110/336
1d 1 [ ’ n a z w a ’ ]
jeżeli nie ma klucza to wyjątek KeyError
można wstawiać do słownika
1d [ ’ x ’ ] = 2 3 4
usuwanie - del - uwaga na wyjątek KeyError
1del d [ ’ x ’ ]
słownik obsługuje funkcje clear, copy, fromkeys, get, items, k eys,pop, popitem, setdefault, update, values
Listy składaneZbiorySłowniki
Iteracja po słowniku - po parach
http://find/
8/16/2019 Inzynieria Cala
111/336
1for k l u c z , w a r t o s c in d . i t e m s ( ) :
2print ( k l u c z , w a r t o s c )
1for element in d . i t e m s ( ) :2print ( e l e m e n t [ 0 ] , e l e m e n t [ 1 ] )
Listy składaneZbiorySłowniki
http://find/
8/16/2019 Inzynieria Cala
112/336
Widoki
8/16/2019 Inzynieria Cala
113/336
keys, values, items to widoki na słownik
widok to niemutowalna sekwencja umożliwiająca iterację
widok zostanie zaktualizowany w przypadku aktualizacji słownika
na widokach można wykonywać operacje jak na zbiorach - suma,
iloczyn, różnica, różnica symetryczna1d . f r o m k e y s ( ’ A B C D ’ , 3 )
2s = set ( ’ A C X ’ )
3d op as ow an ia = d . ke ys ( ) & s
Listy składaneZbiorySłowniki
Słowniki składane
http://find/
8/16/2019 Inzynieria Cala
114/336
Słownik obsługuje podobnie jak lista i zbiór składanie
1{ k l u c z : w a r t o s c for k l u c z , w a r t o s c in iteracja if warunek
2w i el k os c i = { n a z wa : o s . p a th . g e ts i ze ( n az w a ) for nazwa in
3o s . l i s t d i r ( ’ . ’ ) if o s . p a t h . i s f i l e ( n a z w a ) }
odwracanie słownika - uwaga na TypeError przy mutowalnychwartościach
1o dw ro co ny = { v: k for k , v in d . i t e m s ( ) }
Listy składaneZbiorySłowniki
http://find/
8/16/2019 Inzynieria Cala
115/336
8/16/2019 Inzynieria Cala
116/336
Zadanie 1 – przykładowe wejście i wyjście
8/16/2019 Inzynieria Cala
117/336
Przykładowe wejście:
1p aw el k as ia l uk as z
2p aw el k as ia l uk as z k as ia p aw el l uk as z p aw el k as ia p aw el
Przykładowe wyjście:
1[( ’ p aw el ’ , 4) , ( ’ ka si a ’ , 3) , ( ’ lu ka sz ’ , 2) ]
Listy składaneZbiorySłowniki
Zadanie 2 – Indeksowanie
Wejście (w kolejnych linijkach):
http://find/
8/16/2019 Inzynieria Cala
118/336
liczba dokumentów do przetworzenia (n)n linijek z wielowyrazowymi dokumentami (1 dokument na linijkę)liczba zapytań do przetworzenia (m)m linijek z jednowyrazowymi zapytaniami
Wyjście:
m linijek (jedna na każde zapytanie)w każdej linijce lista zawierająca numery (indeksy) dokumentów, wktórych wystąpił wyraz z danego zapytaniakażda lista posortowana według częstości wystąpienia wyrazu zzapytania w danym dokumencieprzy równej częstości powinna być zachowana kolejność wczytywania
dokumentów
Listy składaneZbiorySłowniki
Zadanie 2 – przykład
http://find/
8/16/2019 Inzynieria Cala
119/336
132Y ou r c ar e set up , do not p lu ck my c ar e do wn .
3My c ar e is loss of care with old care done .
4Y ou r c ar e is g ain of care when new care is won.
52
6care
7is
1[1 , 2 , 0]
2[2 , 1]
Listy składaneZbiorySłowniki
Zadanie 2 – dodatkowe założenia
zapytania formułowane są małymi literami, ale odpowiedź powinna
http://find/
8/16/2019 Inzynieria Cala
120/336
uwzględniać wyrazy, które w dokumentach zapisane są różnąwielkością liter, np.:
dokument: A Rose is a rose is a roSEzapytanie: rosewystępowanie: 3 razy
wyrazy powinny zawierać tylko znaki alfanumeryczne (bezinterpunkcyjnych), tzn. wystąpienie znaku interpunkcyjnego lubspacji, tabulatora itp. powoduje podział ciągu znaków na oddzielnewyrazy,
jeśli zapytanie nie zwraca rezultatów jako wynik na zapytanie
powinna być wypisana pusta lista.
Listy składaneZbiorySłowniki
Zadania – podpowiedź
1# ! / u s r / b i n / p y t h o n 3
2
3
http://find/
8/16/2019 Inzynieria Cala
121/336
import string4
5l = " aaa bbb ccc " . spli t () # [ " a aa " , " b b b " ," c c c " ]
6j = " ," . jo in ( l ) # " aaa , bbb , c cc "
7
8p = s tr in g . p u nc tu a ti on # c ia g w sz y st ki ch
9# z n ak o w i n t er p u nk c y jn y c h 10s = s tr in g . w h it e sp ac e # c ia g w sz ys t ki ch
11# z na ko w b ia ly ch
12
13# j ak p os or to w ac s lo wn ik po w a rt o sc ia c h ?
14import operator
15t es t _d ic t = dict ( { ’ a ’ :1 , ’ c ’ :5 0 , ’ f ’ : 17 })16w yn ik = sorted ( t e s t _ d i c t . i t e m s ( ) ,
17k ey = o p er a to r . i t em g e tt e r ( 1 ))
Listy składaneZbiorySłowniki
Zadania – podpowiedź
http://find/
8/16/2019 Inzynieria Cala
122/336
Jak posortować słownik malejąco po wartościach i rosnąco po kluczach?Sortujemy dwa razy:
najpierw po kluczach rosnąco (w pierwszej linijce)
następnie malejąco po wartościach (w drugiej linijce)Odpowiednia kolejność w kluczach zostanie zachowana.
Listy składaneZbiorySłowniki
http://find/
8/16/2019 Inzynieria Cala
123/336
KlasyObiekty
Uniwersytet Ekonomiczny w Poznaniu
1 marca 2016
KlasyObiekty
Problemy programowania proceduralnego
http://find/
8/16/2019 Inzynieria Cala
124/336
Brak możliwości nazywania elementów przy tworzeniu bardziejzłożonych struktur danych, np. okrąg, punkt, itd.
Przy wykorzystaniu krotki (nawet nazwanej) - brak możliwościzmiany elementu składowego.
Przy wykorzystaniu listy lub słownika - brak możliwościkontrolowania wartości (np. podanie ujemnego promienia okręgu).
KlasyObiekty
Python, a programowanie obiektowe
http://find/
8/16/2019 Inzynieria Cala
125/336
Python pozwala tworzyć programy proceduralne, obiektowe ifunkcyjne oraz mieszać te style zależnie od potrzeb.
Programy proceduralne mogą wykorzystywać obiekty, ale dopieroprogram tworzący klasy można nazwać obiektowym.
Python jest całkowicie zorientowany obiektowo: można definiować własneklasy, dziedziczyć z własnych lub wbudowanych klas, a także tworzyćinstancje zdefiniowanych przez siebie klas.
KlasyObiekty
Podstawowe pojęcia
Klasa, typ, typ danych - synonimy, oznaczają zbiór obiektów, ichrodzaj, stanowią ”wzorzec” dla tworzenia obiektów w pamięci.
http://find/
8/16/2019 Inzynieria Cala
126/336
1s = str ( ’ a b c ’ )
2type ( s )
Instancja, egzemplarz, obiekt - synonimy, oznaczają pojedynczewystąpienia, obiekty danej klasy występujące w pamięci.
Enkapsulacja - obiekty zawierają w sobie dane (atrybuty)definiowane przez klasy; klasy definiują funkcje (metody), któremożna wykonywać na obiektach.
Hermetyzacja - dostęp do atrybutów obiektu powinien być pośredni(przez metody), a nie bezpośredni.
Właściwości - atrybuty dostępne pozornie bezpośrednio, ale w istocieobsługiwane przez metody.
KlasyObiekty
Konwencje i reguły dotyczące tworzenia klas
N kl P th i d ż lit
http://find/
8/16/2019 Inzynieria Cala
127/336
Nazwy klas w Pythonie zaczynamy dużą literą.
Metody specjalne __add__() lub __len__() umieszczone w klasiepozwalają obsługiwać operator + i funkcję len() dla obiektów tejklasy.
Wszystkie metody specjalne zaczynają się i kończą __
.Zwykłe metody zaczynają się od małej litery.
Można w module zdefiniować dowolną liczbę klas.
Nazwa modułu nie musi być taka sama jak nazwa klasy.
KlasyObiekty
Tworzenie własnej klasy
http://find/
8/16/2019 Inzynieria Cala
128/336
1class N a z w a K l a s y :
2b l o k _ i n s t r u k c j i
blok_instrukcji może być pusty - wtedy pass.
Polecenie class podobnie jak def umożliwia dynamiczne tworzenieklas.
Metody tworzy się przy użyciu def, z tym że do każdej metodytrzeba przekazać jawnie instancję obiektu - przez referencję self.
KlasyObiekty
Tworzenie obiektu
http://find/
8/16/2019 Inzynieria Cala
129/336
Tworzenie (obiektu) instancji - poprzez wywołanie klasy tak jakfunkcji:
1n = N az wa Kl as y ()
Obiekty biorą swoje zmienne i funkcje z klas.Klasy są podstawowym schematem, według których tworzone sąobiekty.
KlasyObiekty
Zmienne w metodach 1
Atrybuty obiektu - dostępne po odwołaniu się do instancji self.x.
Zmienne lokalne - dostęp po nazwie.
Zmienne klasy (statyczne) dostęp po nazwie klasy
http://find/
8/16/2019 Inzynieria Cala
130/336
Zmienne klasy (statyczne) - dostęp po nazwie klasy.Zmienne globalne (modułu) - dostęp po nazwie.
1 m o d u l o w a = ’a ’
2class T e s t o w a :
3z =04def _ _ i n it _ _ ( s el f , x = 1 ):
5s e l f . x = x
6def t e s t ( s e l f ) :
7print ( s e l f . x )
8y =7
9print ( y )10print ( T e s t o w a . z )
11print ( m o d u l o w a )
KlasyObiekty
http://find/
8/16/2019 Inzynieria Cala
131/336
Przykład
1class M o j a K l a s a :
2z m i e n n a = 2
3def _ _ i n i t _ _ ( s e l f , w a r t o s c = 1 ) :
4s e l f . w a r t o s c = w a r t o s c
def m o j a F u n k c j a ( s e l f ) :
8/16/2019 Inzynieria Cala
132/336
5def m o j a F u n k c j a ( s e l f ) :
6w y n i k 1 = s e l f . w a r t o s c * * s e l f . z m i e n n a
7w y n i k 2 = s e l f . w a r t o s c * * M o j a K l a s a . z m i e n n a
8print ( s e lf . w a r to sc , ’ p o d n i es i o na d o p o te g i : ’ ,
9s e lf . z m ie n na , ’ d a j e w y n ik : ’ , w y n i k 1 )
10print ( s e lf . w a r to sc , ’ p o d n i es i o na d o p o te g i : ’ ,11M o j a K la s a . z m ie n na , ’ d a j e w y n ik : ’ , w y n i k 2 )
12
13l ic zb a1 = M oj aK la sa ( )
14l i c z b a 1 . m o j a F u n k c j a ( )
15
16l ic zb a1 . z m i en na = 417l i c z b a 1 . m o j a F u n k c j a ( )
18
19l ic zb a2 = M oj aK la sa ( 3)
20l i c z b a 2 . m o j a F u n k c j a ( )
KlasyObiekty
Zadanie na rozgrzewkę
Utworzyć klasę obiektów Statki
http://find/
8/16/2019 Inzynieria Cala
133/336
Utworzyć klasę obiektów Statki
Każdy obiekt powinien mieć następujące cechy: model, ładowność,liczba masztów, wielkość.
Liczba masztów powinna być podana jako liczba (int)
Ładowność powinna być wyliczana z funkcji na podstawie wielkości: jeśli ’duzy’ - ładowność: 50 jeśli ’maly’ - ładowność: 10
Utworzyć trzy nowe obiekty: statek1, statek2 i statek3.
KlasyObiekty
http://find/
8/16/2019 Inzynieria Cala
134/336
Zadanie 1 - wynagrodzenie
Przykładowe wejście:
8/16/2019 Inzynieria Cala
135/336
Przykładowe wejście:12
2B a rt e k 2 58 0
3M a re k 1 68 0
Przykładowe wyjście:1B ar te k 1 86 3. 91 5 35 .0 9 3 11 5. 09
2M ar ek 1 23 7. 20 3 48 .4 3 2 02 8. 43
35 1 4 3 . 5 2
KlasyObiekty
Zadanie 1 - podpowiedzi
http://find/
8/16/2019 Inzynieria Cala
136/336
1round (i , n ) # z a o kr a g la n i e
2
3’ %.3 f ’ % 1 .2 90 03 # daje 1.29 0
Poszukać sposobu obliczania wynagrodzenia od 01.01.2014
Za koszty uzyskania przychodu przyjąć zawsze: 111.25
KlasyObiekty
Zadanie 2 - figury
Obliczyć sumę pól figur geometrycznych.
Założenia:
http://find/
8/16/2019 Inzynieria Cala
137/336
Założenia:
program przyjmuje pierwszą wartość: liczbę figur (i),dla liczby figur (i) wczytuje liczby (oddzielone spacją),każda figura jest wprowadzona w nowej linii; jeśli linia zawiera:
jedną liczbę - jest to promień koła,
dwie liczby - boki prostokąta,trzy liczby - boki trójkąta,
w wyniku wypisać sumę pól wprowadzonych figur (zaokrągloną do 2miejsc po przecinku).
Dla każdej figury geometrycznej (koło, prostokąt, trójkąt) utwórzoddzielną klasę.
KlasyObiekty
Zadanie 2 - figury
Przykładowe wejście:
5
http://find/
8/16/2019 Inzynieria Cala
138/336
15
22
34 6
43 3 . 5 4
58 2.1
64.14
Przykładowe wyjście:
1112.3
KlasyObiekty
KlasyObi kt
http://find/
8/16/2019 Inzynieria Cala
139/336
KlasyObiekty
część II
Uniwersytet Ekonomiczny w Poznaniu
8 marca 2016
KlasyObiektyczęść II
Dziedziczenie
http://find/
8/16/2019 Inzynieria Cala
140/336
KlasyObiektyczęść II
http://find/
8/16/2019 Inzynieria Cala
141/336
8/16/2019 Inzynieria Cala
142/336
Zadanie na rozgrzewkę
8/16/2019 Inzynieria Cala
143/336
Zaimplementuj system bankowy zgodnie z diagramem.
KlasyObiektyczęść II
Zadanie na rozgrzewkę c.d.
Bank:
W banku zapisane są wszystkie konta.
Metoda pobierz konto, to metoda prywatna, która pozwala
http://find/
8/16/2019 Inzynieria Cala
144/336
odwołać się do obiektu konta po jego numerze.
Metoda zaloz konto pozwala na założenie konta. Podana jestroczna stopa procentowa jako float (np. 0.036) oraz typ kapitalizacji(możliwe wartości: "miesieczna", "dzienna"). Metoda zwracanumer nowego konta.
Metoda wplac pozwala na wpłacenie pieniędzy na konto.
Metoda nastepny miesiac powoduje zaksięgowanie miesięcznychodsetek na wszystkich kontach.
Metoda przelej pozwala przelać określoną kwotę z jednego kontana inne.
KlasyObiektyczęść II
http://find/
8/16/2019 Inzynieria Cala
145/336
Zadanie na rozgrzewkę c.d.
Konto, KontoKapDzienna, KontoKapMiesieczna:
Każde konto ma metodę nastepny miesiac, jednak implementacjatej metod różni się ależności od tego c mam do c nienia
8/16/2019 Inzynieria Cala
146/336
tej metody różni się w zależności od tego, czy mamy do czynienia zKontoKapMiesieczna, czy z KontoKapDzienna.
Metoda nastepny miesiac w klasie KontoKapMiesiecznapowoduje naliczenie odsetek dla kwoty konta z wykorzystaniem
kapitalizacji miesiecznej. Końcowa kwota zaokrąglana jest do 2miejsca po przecinku.Metoda nastepny miesiac w klasie KontoKapDzienna powodujenaliczenie odsetek dla kwoty konta za cały miesiąc z wykorzystaniemkapitalizacji dziennej. Po każdym dniu kwota zaokrąglana jest dodrugiego miejsca po przecinku. Przyjmujemy, że miesiąc ma 30 dni.
KlasyObiektyczęść II
Zadania domowe
http://find/
8/16/2019 Inzynieria Cala
147/336
KlasyObiektyczęść II
Zadanie 1
Zaimplementuj dodawanie książek do biblioteki (metoda
dodaj egzemplarz ksiazki)W j d i d bibli ki i i b ć d d
http://find/
8/16/2019 Inzynieria Cala
148/336
W tej metodzie do biblioteki powinien być dodawany nowyEgzemplarz oraz (jeśli to konieczne) nowa Ksiazka.
Na wejściu w pierwszej linijce podana jest liczba egzemplarzy książekdo dodania (n), a następnie w kolejnych n linijkach egzemplarze
książek podane jako ("tytul", "autor", 2014).Wskazówka: aby wczytać krotkę z egzemplarzem, użyj:eval(input()).
Na wyjściu w kolejnych linijkach wypisana lista książek wraz z liczbąegzemplarzy, też w postaci krotek (posortowana po tytułach).
KlasyObiektyczęść II
Zadanie 1 c.d.
Przykładowe wejście:
15
2( " C ha tk a P uc ha tk a " , " A la n A le xa nd er M il ne " , 2 01 4)
( )
http://find/
8/16/2019 Inzynieria Cala
149/336
3( " Q uo V ad is " , " H e nr yk S ie n ki e wi cz " , 2 01 0)
4( " C ha tk a P uc ha tk a " , " A la n A le xa nd er M il ne " , 1 99 8)
5( " P an T ad eu sz " , " A da m M ic k ie wi cz " , 2 00 3)
6( " Q uo V ad is " , " H e nr yk S ie n ki e wi cz " , 2 01 0)
Przykładowe wyjście:
1( ’ C ha tk a P uc ha tk a ’ , ’ A la n A le xa nd er M il ne ’ , 2)
2( ’ P an T ad eu sz ’ , ’ A da m M ic k ie wi cz ’ , 1)
3( ’ Q uo V ad is ’ , ’ H en ry k S ie n ki e wi cz ’ , 2)
KlasyObiektyczęść II
Zadanie 2
http://find/
8/16/2019 Inzynieria Cala
150/336
Zaimplementuj wypożyczanie książek przez czytelnika.
KlasyObiektyczęść II
http://find/
8/16/2019 Inzynieria Cala
151/336
Zadanie 2 – wyjście
Na wyjściu w kolejnych linijkach wypisane wartości logiczne Truelub False, oznaczające powodzenie lub niepowodzenie wykonania
konkretnej akcji.
8/16/2019 Inzynieria Cala
152/336
dodaj – akcja zawsze powinna kończyć się powodzeniem.
wypozycz – może się skończyć niepowodzeniem, jeśli czytelnikwypożyczył za dużo egzemplarzy książki lub chciał wypożyczyć drugiegzemplarz tej samej książki, lub nie było już dostępnychegzemplarzy książki.
oddaj – może się skończyć niepowodzeniem, jeśli czytelnik nie matakiej książki.
KlasyObiektyczęść II
http://find/
8/16/2019 Inzynieria Cala
153/336
8/16/2019 Inzynieria Cala
154/336
Zadanie 2 – wskazówki
Warto, aby Biblioteka zapamiętywała obiekty czytelników (podobnie
jak książki). Można w tym celu napisać metodę prywatną, którabędzie pobierać czytelnika o podanym nazwisku (jeśli istnieje jużi ki bi k l ik ) j śli i i i j d d ć
8/16/2019 Inzynieria Cala
155/336
zapisany taki obiekt czytelnika), a jeśli nie istnieje, to dodawać nowyobiekt czytelnika i zwracać ten obikt.
Warto, żeby w obiekcie czytelnika były zapamiętane obiekty
wypożyczonych egzemplarzy i sprawdzanie części poprawnychwarunków na wypożyczenie i oddanie było oddelegowane na obiektyczytelnika.
Pamiętaj, że zgodnie z podejściem Pythona, często „Easier to askfor forgiveness than permission” (EAFP). Korzystaj z try: ...except KeyError: ...
.
KlasyObiektyczęść II
http://find/
8/16/2019 Inzynieria Cala
156/336
Adnotacje funkcji
Można opatrzyć sygnaturę funkcji adnotacjami korzystając ze
składni:1def n a z w a_ f u nk c j i ( a r g1 : a d1 , a rg 2 : a d2 ) - > ad 3 :
8/16/2019 Inzynieria Cala
157/336
2pass
Python dodaje te adnotacje do atrybutu __annotations__, który jest
słownikiem - atrybutem w funkcji jako adnotację możemy użyć:
stringatypu danych (w tym zdefiniowanych klas)
Sam Python nie przywiązuje żadnej roli do tych adnotacji, ale można
je wykorzystać wprost, np. do kontroli typów
Dokumentacja kodu Tworzenie modułów
Adnotacje funkcji
Jak działa poniższa funkcja?
1def m n o z e n i e ( a : int b : int ) -> int :
http://find/
8/16/2019 Inzynieria Cala
158/336
1def m n o z e n i e ( a : int , b : int ) > int :
2print ( m n o z e n i e . _ _ a n n o t a t i o n s _ _ )
3a nn s = m n oz e ni e . _ _ a nn o t at i o ns _ _
4i f t yp e ( a ) != a nn s [ ’a ’] or t yp e( b ) != a nn s [ ’b ’ ]:
5raise E x c ep t io n ( ’ B l e dn e t yp y p a r am e tr o w ! ’ )6else :
7return a * b
8
9print ( m n o z e n i e ( ’ o j e j ’ , 2 ) )
Dokumentacja kodu Tworzenie modułów
Adnotacje funkcji
w miejsce adnotacji można wstawić po prostu łańcuchy znakówopisujące co ma się znaleźć w danym parametrze
http://find/
8/16/2019 Inzynieria Cala
159/336
opisujące co ma się znaleźć w danym parametrze
1class B i b l i o t e k a :
2def w yp o zy c z ( s el f , n az w : ’ n a z wi s ko c z yt e l ni k a ’ ,3t yt : ’ t yt ul k si az ki ’ ) :
4pass
Dokumentacja kodu Tworzenie modułów
http://find/
8/16/2019 Inzynieria Cala
160/336
Ciągi dokumentujące – funkcje
aby dołączyć dokumentację do funkcji wystarczy po linii definicjiumieścić ją w komentarzu wielolinijkowym
8/16/2019 Inzynieria Cala
161/336
umieścić ją w komentarzu wielolinijkowym
dokumentacja funkcji może mieć np. następującą strukturę:
krótki opis w jednej liniilinię odstępu
dłuższy opisopis parametrów funkcjiprzykłady wykorzystania - w trybie interaktywnym interpretera
Dokumentacja kodu Tworzenie modułów
Ciągi dokumentujące + tworzenie modułów
Stwórz plik o następującej zawartości:
1import math
2
3def h e r o n ( a , b , c ) :
4" "" O bl ic za p ol e t ro jk at a wg w zo ru H er on a
http://find/
8/16/2019 Inzynieria Cala
162/336
5
6a , b ,c d lu go sc i b ok ow t ro jk at a
7> > h e r o n ( 3 , 4 , 5 )
8
6.0 9"""
10s = ( a+ b+ c )/2
11return m ath . sqrt ( s * (s - 1) * (s -b ) * ( s- c))
12
13if _ _ n am e_ _ = = ’ _ _ ma in __ ’ :
14print ( h e r o n . _ _ d o c _ _ )15print ( h e r o n ( 3 , 4 , 5 ) )
Dokumentacja kodu Tworzenie modułów
Ciągi dokumentujące + tworzenie modułów
zapisz plik na dysku (np. pod nazwą heron_modul.py)
otwórz interpreter pythona
i j j k d ł ( )
http://find/
8/16/2019 Inzynieria Cala
163/336
zaimportuj go jako moduł (import heron_modul)
wykonaj na module funkcję help()
oblicz pole trójkąta o bokach za pomocą funkcji zdefiniowanej w
module
Co robi następująca linijka?if __name__ == ’__main__’:
Dokumentacja kodu Tworzenie modułów
http://find/
8/16/2019 Inzynieria Cala
164/336
8/16/2019 Inzynieria Cala
165/336
Dokumentacja kodu Tworzenie modułów
http://find/
8/16/2019 Inzynieria Cala
166/336
Zadanie 1 – przykładowe wejście i wyjście
Wejście:
1[( ’ F ’, ’ B ’) , ( ’ B’ , ’ A’ ), ( ’B ’ , ’ D ’) , ( ’D ’ , ’ C’ ),
2( ’D ’, ’E ’) , ( ’F ’, ’ G’) , ( ’G ’, ’I ’) , ( ’I ’, ’ H’ )]
3[ ’B ’ , ’ F’ , ’ C’ ]
8/16/2019 Inzynieria Cala
167/336
Wyjście:
1[ ’B ’ , ’ F’ ]
2[ ’ F ’ ]3[ ’C ’ , ’D ’ , ’B ’ , ’F ’]
Dane odpowiadają drzewu przedstawionemu na ilustracji nawcześniejszych slajdach
Dokumentacja kodu Tworzenie modułów
Zadanie 2 – odległość węzłów w drzewie (miara prosta)Zdefiniujemy miarę prostą liczenia odległości pomiędzy węzłami wdrzewie jako liczbę krawędzi, które trzeba pokonać, aby dojść od
jednego do drugiego węzła
Możemy ją obliczyć poprzez znalezienie najniższego wspólnego
nadwęzła dla obu wierzchołków, a następnie określenia i zsumowania jego odległości od ich obu
P iż j dl ł ść i d ł i A i C i 3 ( j i
http://find/
8/16/2019 Inzynieria Cala
168/336
Poniżej, odległość między węzłami A i C wynosi 3 (najnizszymwspólnym nadwęzłem jest B, jego odległość od A wynosi 1 a od Cwynosi 2)
Dokumentacja kodu Tworzenie modułów
Zadanie 2 – wejście i wyjście
Na wejściu otrzymujemy:
Listę krotek reprezentującej drzewo, analogicznie do zad. 1.Listę krotek, reprezentujących zapytania; każda krotka składa się zt h l tó d ó h i h łkó i t ki
http://find/
8/16/2019 Inzynieria Cala
169/336
trzech elementów: dwóch nazw wierzchołków i nazwy metrykiwykorzystywanej do mierzenia odległości:
prosta – miara prosta, opisana na poprzednim slajdzie
potęgowa – opisana w komentarzu do metody licz odleglosc klasyMiaraPotegowa
Mamy za zadanie obliczyć odległość pomiędzy wierzchołkami za pomocązadanej miary. Na wyjściu wypisujemy listę liczb, które reprezentująodległości pomiędzy węzłami.
Dokumentacja kodu Tworzenie modułów
Zadanie 2 – przykładowe wejście i wyjście
Dane odpowiadają rysunkowi drzewa na wcześniejszych zlajdach.
Przykładowe wejście
1[( ’ F ’ ’ B ’) ( ’ B’ ’ A’ ) ( ’B ’ ’ D ’) ( ’D ’ ’ C’ )
http://find/
8/16/2019 Inzynieria Cala
170/336
1[( F , B ) , ( B , A ), ( B , D ) , ( D , C ),
2( ’D ’, ’E ’) , ( ’F ’, ’ G’) , ( ’G ’, ’I ’) , ( ’I ’, ’ H’ )]
3[( ’ p ro st a ’ , ’ C ’, ’ G ’) , ( ’ pr os ta ’ , ’ G’ , ’ C’ ),
4( ’ p ot eg ow a ’ , ’ G ’ , ’ C ’ )]
Przykładowe wyjście
1[4 , 4 , 8]
Dokumentacja kodu Tworzenie modułów
Wczytywanie danychPraca z CSV
http://find/
8/16/2019 Inzynieria Cala
171/336
Uniwersytet Ekonomiczny w Poznaniu
21 marca 2016
Wczytywanie danych Praca z CSV
Wczytywanie danych
input()
pobiera dane wprowadzone z klawiatury
http://find/
8/16/2019 Inzynieria Cala
172/336
pobiera dane wprowadzone z klawiatury
można przekazywać dane wejściowe bez ręcznego wpisywania
przygotowanie plików wejściowych zastępujących dane wprowadzaneręcznie
Wczytywanie danych Praca z CSV
Wczytywanie danych c.d.
input()Plik input.txt
http://find/
8/16/2019 Inzynieria Cala
173/336
1( " C ha tk a P uc ha tk a " , " A la n A le xa nd er M il ne " , 1 99 8)
2( " P an T ad eu sz " , " A da m M ic k ie wi cz " , 2 00 3)
3( " Q uo V ad is " , " H e nr yk S ie n ki e wi cz " , 2 01 0)
Plik jako dane wejściowepython3 moj_skrypt.py < input.txt
Wczytywanie danych Praca z CSV
Parsowanie argumentów
1import sys2
3for arg in s y s . a r g v :
http://find/
8/16/2019 Inzynieria Cala
174/336
g y g
4print ( a r g )
argumenty linii poleceń przekazywane są do programusys.argv jest listą elementów
pierwszy element - nazwa uruchomionego skryptu
Wczytywanie danych Praca z CSV
Parsowanie argumentów c.d.
getopt(arg, short, long)
F k j j j
http://find/
8/16/2019 Inzynieria Cala
175/336
Funkcja przyjmuje trzy parametry:
arg - listę argumentów
short - ciąg znaków zawierający jedno-znakowe flagilong - listę dłuższych flag, będących odpowiednikami krótszych
Wczytywanie danych Praca z CSV
Parsowanie argumentów - przykład
1import getopt , sys
2
3try :
4o pts , a rg s = g et op t . g et op t ( s ys . a rg v [ 1: ] ,5" h o :" , [ " h el p " , " o u tp ut = " ] )
6except g et o pt . G e to p t Er r o r a s e rr :
http://find/
8/16/2019 Inzynieria Cala
176/336
7print ( e r r )
8
9for op , ar in o p t s :
10if op in ( ’ - h ’ , ’ - - h el p ’ ) :
11print ( help ())
12elif op in ( ’ - o ’ , ’ - - o u tp u t ’ ) :
13print ( a r )
python3 moj_skrypt.py -hpython3 moj_skrypt.py -o tekst
Wczytywanie danych Praca z CSV
Moduł CSV
moduł csv umożliwia odczyt oraz zapis do liku CSV
http://find/
8/16/2019 Inzynieria Cala
177/336
CSV - pliki przechowujące tabele z danymi, zawierające rekordypodzielone na pola
brak ogólnego standardu co do separatorów pól
Wczytywanie danych Praca z CSV
Odczyt pliku CSV
1import csv
2
3p li k_ cs v = open ( n a z w a _ pl i k u , t r yb )4c sv . r e a de r ( p l ik _ cs v , d i a l ec t = ’ ’ , f o r m a t _ p ar a m s )
http://find/
8/16/2019 Inzynieria Cala
178/336
open() otwiera plik
nazwa_pliku - wskazuje nazwę pliku do otwarcia
tryb - definiuje jak będzie używany plik (read mode, write mode,append mode)
reader() tworzy nowy obiekt o podanych parametrach:
plik_csv - wskazuje na plikdialect - określa format pliku CSV (opcjonalnie)format_params - określa specyficzne parametry formatowania
Wczytywanie danych Praca z CSV
Praca z plikiem CSV
1import csv
2
3p li k_ cs v = open ( ’ s a m pl e . c s v ’ , ’ r ’ )4c z yt a j = c sv . r e ad e r ( p l i k_ c sv )
5
f i k d i ( j )
http://find/
8/16/2019 Inzynieria Cala
179/336
6for i , r ek or d i n e n um e ra t e ( c z y t a j ) :
7if i = = 0 :
8n ag lo we k = r ek or d
9else :10for j , p ol e in e n um e r at e ( r e k o r d ) :
11print ( n a g l o w e k [ j ] , ’ : ’ , p o l e )
12print ( ’ ’ )
13
14p l i k _ c s v . c l o s e ( )
Wczytywanie danych Praca z CSV
Zapis do CSV
1import csv
2
3p li k_ cs v = open ( ’ o u t pu t . c s v ’ , ’ w ’ , e n co d in g = ’ u tf - 8 ’ )
4z a p is z = c sv . w r i te r ( p l ik _ cs v , d i a l e c t = ’ u n i x ’ )
5
6dane = [
7( ’ I m i e ’ , ’ N a z w i s k o ’ , ’ F i r m a ’ , ’ S t a n o w i s k o ’ ) ,
http://find/
8/16/2019 Inzynieria Cala
180/336
8( ’ B a r t e k ’ , ’ P e r k o w s k i ’ , ’ U E P ’ , ’ I n f o r m a t y k ’ ) ,
9( ’ J a n ’ , ’ N o w a k ’ , ’ A B C ’ , ’ S p r z e d a w c a ’ ) ,
10( ’ J a k u b ’ , ’ D z i k o w s k i ’ , ’ U E P ’ , ’ A d m i n i s t r a t o r ’ ) ,
11( ’ J a c e k ’ , ’ M a l y s z k o ’ , ’ U E P ’ , ’ A d m i n i s t r a t o r ’ ) ,
12( ’ M a r e k ’ , ’ K o w a l s k i ’ , ’ A B C ’ , ’ I n f o r m a t y k ’ )
13]
14
15for element in d a n e :
16z a p i s z . w r i t e r o w ( e l e m e n t )17
18p l i k _ c s v . c l o s e ( )
Wczytywanie danych Praca z CSV
http://find/
8/16/2019 Inzynieria Cala
181/336
CSV - tworzenie dialektu
1import csv
2c sv . r e g is t e r_ d i al e c t ( ’ m o j D ia l ek t ’ , d e li m it e r = ’ | ’ ,
3q u o t i n g = c s v . Q U O T E _ A L L )
4
5p li k_ cs v = open ( ’ o u t pu t . c s v ’ , ’ w ’ )
6z a p is z = c sv . w r i te r ( p l ik _ cs v , d i a l e c t = ’ m o j D i a le k t ’ )
8/16/2019 Inzynieria Cala
182/336
7
8dane = [
9( ’ I m i e ’ , ’ N a z w i s k o ’ , ’ F i r m a ’ , ’ S t a n o w i s k o ’ ) ,
10( ’ B a r t e k ’ , ’ P e r k o w s k i ’ , ’ U E P ’ , ’ I n f o r m a t y k ’ )
11]
12
13for element in d a n e :
14z a p i s z . w r i t e r o w ( e l e m e n t )
15
16p l i k _ c s v . c l o s e ( )
Wczytywanie danych Praca z CSV
Wstęp do zadań
W pliku CSV posiadamy dane dotyczące połączeń telefonicznych. Każdy
wiersz opisuje jedno połączenie (pierwszy wiersz w pliku jestnagłówkiem). W każdym wierszu znajdują się kolejno:
Nadawca (From) - unikalny identyfikator liczbowy
http://find/
8/16/2019 Inzynieria Cala
183/336
( ) y y y
Odbiorca (To) - unikalna identyfikator liczbowy
Data i godzina (Datetime) - w postaci RRRRMMDD HHMM
Czas trwania (Duration(seconds)) - liczba sekund
Nadajnik (Cell Tower) - unikalny identyfikator liczbowy
Nadawca i odbiorca jest reprezentowany przez ten sam identyfikator.
Wczytywanie danych Praca z CSV
Zadanie 1 - połączenia
W pliku wejściowym podane są następujące informacje:
w pierwszej linii znak oddzielający kolejne pola w rekordzie, np. ;
w drugiej linii ścieżka dostępu do pliku zwierającego dane opołączeniach.
N jś i i jd ć i i f j
http://find/
8/16/2019 Inzynieria Cala
184/336
Na wyjściu powinna znajdować się informacja:
w pierwszym wierszu identyfikator użytkownika, który wykonał
największą liczbę połączeń, oraz łączny czas tych połączeńw drugim wierszu identyfikator użytkownika, który odebrałnajwiększą liczbę połączeń, oraz łączny czas tych połączeń
w przypadku równej liczby połączeń, powinien zostać wypisanyużytkownik o niższym identyfikatorze
Wczytywanie danych Praca z CSV
http://find/
8/16/2019 Inzynieria Cala
185/336
Zadanie 2 - statystyki
Plik wejściowy taki sam jak w Zadaniu 1. Do Zadania 2. wykorzystajskrypt z Zadania 1. Wynikiem zadania powinno być:
w pierwszym wierszu lista 10 identyfikatorów najczęściej dzwoniącychw drugim wierszu lista 10 identyfikatorów najczęściej odbierających
w trzecim wierszu najczęściej używany nadajnik wraz łączną liczbą
8/16/2019 Inzynieria Cala
186/336
w trzecim wierszu najczęściej używany nadajnik wraz łączną liczbąpołączeń, do których został użyty
w czwartym wierszu dla najczęściej dzwoniącego wypisać jegoatrybuty: średni czas połączenia wychodzącego (zaokrąglony do 2miejsc po przecinku) oraz średnia liczba połączeń wychodzących(zaokrąglona do 2 miejsca po przecinku)
identyfikatory powinny być posortowane malejąco wg liczbypołączeń, a w przypadku równej liczby połączeń od najniższego
Wczytywanie danych Praca z CSV
Zadanie 2 - statystyki
Przykładowe wyjście:
1[ ’ 22 6 ’, ’ 47 ’ , ’ 75 ’ , ’ 15 2 ’, ’ 158 ’ , ’ 17 6 ’, ’ 297 ’ ,
2’ 3 59 ’ , ’ 3 63 ’ , ’ 3 75 ’ ]
http://find/
8/16/2019 Inzynieria Cala
187/336
3[ ’5 ’ , ’0 ’ , ’2 ’ , ’ 13 ’ , ’ 172 ’ , ’1 ’, ’ 15 ’ , ’ 32 ’ ,
4’ 23 ’ , ’ 42 ’ ]
5( ’ 15 ’ , 5 4)61 0 77 . 4 0 .7 1
Wczytywanie danych Praca z CSV
Bibliotekaczęść II
http://find/
8/16/2019 Inzynieria Cala
188/336
Uniwersytet Ekonomiczny w Poznaniu
5 kwietnia 2016
Bibliotekaczęść II
http://find/
8/16/2019 Inzynieria Cala
189/336
Zadanie 1
Podczas dodawania egzemplarzy książki, podawana jest także data jego dodania do biblioteki, jako krotka, np. (2013, 12, 23).
Wyświetl zestawienie egzemplarzy książek, które zostały dodanepóźniej, niż podana data (czyli zestawienie nowszych egzemplarzy).
8/16/2019 Inzynieria Cala
190/336
Wejście:
W pierwszej linijce podawana liczba książek do dodania (n).W kolejnych n linijkach podane egzemplarze książki.W ostatniej linijce podana data (jako krotka).
Wyjście: analogiczne zestawienie, jak w poprzednim zadaniu
z biblioteki.
Bibliotekaczęść II
Zadanie 1 c.d.
Przykładowe wejście:
15
2( " Ch at ka P uc ha tk a " , " A la n A . M il ne " , 201 4 , (2 01 4 , 4 , 1 0) )3( " Q uo V ad is " , " H e nr yk S i en ki e wi c z " , 2 01 0 , ( 20 14 , 1 , 1 5) )
4( " Ch at ka P uc ha tk a " , " A la n A . M il ne " , 199 8 , (2 01 3 , 12 , 3 1) )
5( " P an T ad eu sz " , " A da m M ic k ie wi c z " , 2 00 3 , ( 20 12 , 1 , 1 ))
http://find/
8/16/2019 Inzynieria Cala
191/336
6( " Q uo V ad is " , " H e nr yk S i en ki e wi c z " , 2 01 0 , ( 20 14 , 1 , 1 5) )
7( 20 13 , 12 , 3 1)
Przykładowe wyjście:
1( ’ C ha tk a P uc ha tk a ’ , ’ A la n A . M il ne ’ , 1)
2( ’ Q uo V ad is ’ , ’ H en ry k S i en ki e wi c z ’ , 2)
Bibliotekaczęść II
Zadanie 2
Zaimplementuj naliczanie kar bibliotecznych.
Reguły naliczania kar:
Każdy egzemplarz ma limit wypożyczenia 7 dni.Za każdy dzień przekroczenia limitu naliczana jest kara w wysokości
50 groszy.Wszystkie kary sumują się.
Na wejściu podane są akcje z datami ich wykonania; w ostatniejlinijce bieżąca (końcowa) data Akcje podane są chronologicznie
http://find/
8/16/2019 Inzynieria Cala
192/336
linijce bieżąca (końcowa) data. Akcje podane są chronologicznie.
Na wyjściu:
Najpierw wyświetlone są wartości logiczne, opisujące poprawnośćwykonania operacji (analogicznie do poprzedniego zadaniaz biblioteki).Następnie wyświetlone jest zestawienie kar wszystkich czytelników(czytelnicy sortowani są rosnąco po nazwiskach). Jeśli czytelnik niema kar, nie jest wyświetlany. Nie trzeba zaokrąglać kar, ani
wyświetlać ich w specjalny sposób. Krotki z karami wyświetlane są jedna pod drugą, podobnie jak w przypadku wyświetlania zestawieniaegzemplarzy.
Bibliotekaczęść II
Zadanie 2 c.d.
Przykładowe wejście
111
2( " d o d a j " , " P a n T a d e us z " , " A . M i c k i e wi c z " , 2 00 0 , ( 2 0 14 , 1 , 1 ) )
3( " d o d a j " , " Q u o V a d is " , " H . S i e n k i e w ic z " , 2 01 0 , ( 2 0 14 , 1 , 1 ) )
4( " d o d a j " , " C h a t k a P u c h a tk a " , " A . A . M i l ne " , 1 99 8 , ( 2 01 4 , 1 , 1 ))
5( " d o d a j " , " P a n T a d e us z " , " A . M i c k i e wi c z " , 2 00 0 , ( 2 0 14 , 1 , 1 ) )
http://find/
8/16/2019 Inzynieria Cala
193/336
6( " d o d a j " , " C h a t k a P u c h a tk a " , " A . A . M i l ne " , 2 01 4 , ( 2 01 4 , 1 , 1 ))
7( " w y p o z y c z " , " B a r t ek P e r k o w sk i " , " P a n T a d e us z " , ( 20 1 4 , 1 , 2 5 ) )
8
( " w y p oz y cz " , " B a r t ek P e r ko w sk i " , " P a n T a de u sz " , (2 01 4 , 2 , 2 ))9( " w y p o z y c z " , " J a c ek M a l y s zk o " , " Q u o V a d is " , ( 20 1 4 , 2 , 1 2 ) )
10( " o d d a j " , " J a c e k M a l y s zk o " , " Q u o V a d is " , ( 20 1 4 , 2 , 1 7 ) )
11( " o d d a j " , " B a r t e k P e r k o w sk i " , " P a n T a d e us z " , ( 20 1 4 , 2 , 2 5 ) )
12( " w y p o z y c z " , " B a r t ek P e r k o w sk i " , " Q u o V a d is " , ( 20 1 4 , 3 , 5 ) )
13( 2 0 1 4 , 3 , 1 3 )
Bibliotekaczęść II
Zadanie 2 c.d.
Przykładowe wyjście:
1True2True
3True
4True
5True
http://find/
8/16/2019 Inzynieria Cala
194/336
5True
6True
7False
8True9True
10True
11True
12( ’ B a r te k P e rk o ws k i ’ , 1 2 .5 )
Bibliotekaczęść II
Wskazówki
Warto wykorzystać bibliotekę do obsługi dat.
Dokumentacja:
https://docs.python.org/3.0/library/datetime.htmlTutorial: http://pymotw.com/2/datetime/ (tutorial jest dlaPythona 2, ale moduł działa podobnie dla Pythona 3)
Przykład wykorzystania w konsoli Pythona 3:
http://find/https://docs.python.org/3.0/library/datetime.htmlhttp://pymotw.com/2/datetime/http://pymotw.com/2/datetime/https://docs.python.org/3.0/library/datetime.html
8/16/2019 Inzynieria Cala
195/336
Przykład wykorzystania w konsoli Pythona 3:
1
2>>> import datetime3> >> d1 = d at et im e . da te ( 200 8 , 3 , 1 2)
4>>> print ( d 1 )
52008-03-12
6> >> d2 = d at et im e . da te ( 200 9 , 1 , 2 1)
7> >> ( d1 - d2 ). d ay s
8-315
Bibliotekaczęść II
Sposób rozwiązania zadania 1
Dla ułatwienia na kilku kolejnych slajdach zaprezentowano krok po krokuprzykładowy sposób rozwiązania tego zadania. Opis powinien być
d d k ó i bili ś i j d i i l
http://find/
8/16/2019 Inzynieria Cala
196/336
przydatny studentom, którzy nie zrobili wcześniej zadania oryginalnego zbiblioteką.
Bibliotekaczęść II
Krok 1. Wczytywanie danych
W pliku z rozwiązaniem poprzedniego zadania, który znajduje się naMoodle, są następujące linijki:
1b i b li o t ek a = B i b li o t ek a ( )
2for i in r an ge ( int ( input ())):3t = eval ( input ())
4if t [ 0] == " d od aj " :
5print ( b i b l i ot e ka . d o d a j_ e g z em p l a rz _ k s ia z k i ( t [ 1] , t [ 2] , t [ 3 ]
6elif t [ 0] = = " w y po zy cz " :
http://find/
8/16/2019 Inzynieria Cala
197/336
6elif t [ 0] = = w y po zy cz :
7print ( b i b l i ot e ka . w y po z yc z ( t [ 1] , t [ 2 ] ))
8elif t [ 0] == " o dd aj " :
9print ( b i b
Top Related