Inzynieria Cala

Embed Size (px)

Citation preview

  • 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ę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