You are on page 1of 25

Technologie informacyjne

Wprowadzenie do Pythona
Marek Retinger
2 pa¹dziernika 2022

Spis tre±ci

1 Wprowadzenie 2

2 Podstawy Python'a 2
2.1 Instalacja ±rodowiska . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Wprowadzenie do narz¦dzia programistycznego PyCharm . . . . 4
2.3 Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Staªe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5 Operacje na liczbach . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6 Operacje na ci¡gach znakowych . . . . . . . . . . . . . . . . . . . 9
2.7 Obsªuga wej±cia/wyj±cia . . . . . . . . . . . . . . . . . . . . . . . 10
2.8 Skrypty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.9 Komentarze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.10 Podstawowe struktury danych . . . . . . . . . . . . . . . . . . . . 11

3 Instrukcje steruj¡ce 13
3.1 Instrukcja warunkowa if . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 P¦tla while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 P¦tla for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4 Funkcje 15

5 Obsªuga plików 16
5.1 Odczyt danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2 Zapis danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.3 Format CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Format JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6 Biblioteki 19
6.1 NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.2 Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.3 Enum - typ wyliczeniowy . . . . . . . . . . . . . . . . . . . . . . 22

7 Klasy 23
7.1 Metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

8 Zadania 24

1
1 Wprowadzenie

Python to interpretowany j¦zyk programowania ogólnego przeznaczenia, po raz


pierwszy wydany w 1991 roku. Jego zaletami s¡ multiplatformowo±¢, szybko±¢
prototypowania, relatywnie dobra wydajno±¢ wykonywania kodu oraz mnogo±¢
dost¦pnych bibliotek. Kod napisany w tym j¦zyku jest czytelny i zwi¦zªy. Cech¡
szczególn¡ j¦zyka jest interpretacja znaków biaªych. Inaczej ni» w przypadku
pozostaªych, dotychczas poznanych j¦zyków programowania, maj¡ one ogromne
znaczenie i odpowiadaj¡ m.in. za przynale»no±¢ pojedynczej linii lub bloku kodu
do danej klasy, czy instrukcji steruj¡cej. Funkcjonalno±¢ j¦zyka mo»e zosta¢
rozszerzona poprzez u»ycie darmowych bibliotek. Ich repozytorium jest dost¦pne
pod adresem https://pypi.org
Kod napisany w j¦zyku Python mo»na wykona¢ bezpo±rednio z konsoli, uru-
chomionej w ramach wiersza polece« lub terminala. Powstaªo wiele narz¦dzi,
zarówno darmowych jak i komercyjnych, wspomagaj¡cych prac¦. Najciekaw-
szymi i najpopularniejszymi z nich s¡ Spyder, wchodz¡cy w skªad m.in. pakietu
WinPython
1 oraz PyCharm, który zostanie przedstawiony na zaj¦ciach.

2 Podstawy Python'a

2.1 Instalacja ±rodowiska

Do realizacji kursu, u»yty zostanie Python w wersji 3.8.6. Mo»na go po-


bra¢ z ocjalnej strony wydawcy  https://www.python.org/downloads/
release/python-386/. Linki do zasobów zostaªy umieszczone na dole strony.
Sugerowane jest u»ycie wersji, w której nazwie znajduje si¦ fraza executable
installer .
Po uruchomieniu instalatora nale»y zaznaczy¢ opcj¦ Add Python 3.8 to
PATH i klikn¡¢ Install Now (rys. 1). Wybrana opcja pozwoli na skorzystanie
z interpretera j¦zyka Python w wierszu polece« systemu, niezale»nie od aktual-
nej ±cie»ki.

Ilustracja 1: Okno instalatora interpretera j¦zyka Python (I)

Proces instalacji mo»e potrwa¢ do kilku minut. Po jego prawidªowym uko«-


czeniu, wy±wietlony zostanie stosowny komunikat (rys. 2).

1 https://winpython.github.io/

2
Ilustracja 2: Okno instalatora interpretera j¦zyka Python (II)

Werykacja poprawno±ci instalacji mo»e odby¢ si¦ przy u»yciu wiersza po-
lece« systemu Windows. Aby go uruchomi¢, nale»y u»y¢ skrótu klawiszowego
Logo Windows + R i w nowo otwartym okienku wpisa¢ cmd, po czym klikn¡¢
przycisk OK (rys. 3).

Ilustracja 3: Okno Uruchamianie

U»ycie komendy python w wierszu polece« powinno poskutkowa¢ uruchomie-


niem powªoki interpretera (rys. 4). W±ród wy±wietlonych informacji, widoczna
powinna by¢ wersja interpretera  3.8.6. Uzyskanie takiego komunikatu ozna-
cza, »e ±rodowisko zostaªo poprawnie zainstalowane.

Ilustracja 4: Okno wiersza polece«

3
2.2 Wprowadzenie do narz¦dzia programistycznego Py-
Charm

Przed przyst¡pieniem do pracy z Pythonem, warto zainstalowa¢ i skonguro-


wa¢ dedykowane ±rodowisko programistyczne. Polecanym narz¦dziem jest Py-
2
Charm rmy JetBrains . Aby pobra¢ narz¦dzie, nale»y przej±¢ pod adres https:
//www.jetbrains.com/pycharm/download/#section=windows i wybra¢ wer-
sj¦ Community. Instalacj¦ nale»y przeprowadzi¢ z domy±lnymi ustawieniami.

Ilustracja 5: Wycinek sekcji pobierania na stronie https://jetbrains.com

Po zako«czeniu procesu instalacji, nale»y uruchomi¢ program PyCharm


Community Edition 2020.2.3. Podczas pierwszego uruchomienia, wy±wietlone
zostanie kilka okien. Pierwsze z nich (rys. 6) zwi¡zane b¦dzie z umow¡ licencyjn¡,
któr¡ nale»y przeczyta¢ i zaakceptowa¢. Kolejne okno, odnosi si¦ do przesyªa-
nia anonimowych statystyk dot. u»ytkowania oprogramowania (rys. 7). Ostatnie
okno dotyczy ustawie« pocz¡tkowych (rys. 8). Nale»y tutaj u»y¢ przycisk Skip
Remaining and Set Defaults .

Ilustracja 6: PyCharm  umowa licencyjna

Przed utworzeniem pierwszego projektu, konieczne jest doª¡czenie do na-


rz¦dzia PyCharm, uprzednio zainstalowanego interpretera j¦zyka (utworzenie

2 https://jetbrains.com

4
Ilustracja 7: PyCharm  udost¦pnianie danych statystycznych

Ilustracja 8: PyCharm  ustawienia pocz¡tkowe

powi¡zania). Aby tego dokona¢, w oknie pocz¡tkowym (rys. 9) nale»y klikn¡¢


na Congure i z listy rozwijalnej wybra¢ Settings . Otwarte zostanie okno
(rys. 10), w którym to po lewej stronie znajdowa¢ si¦ b¦dzie lista z dost¦pnymi
kategoriami ustawie«. Kluczow¡ opcj¦ stanowi Python Interpreter. Po jej wybra-
niu, wy±wietlony zostanie nowy widok okna z aktywnymi interpreterami. Nale»y
tutaj klikn¡¢ w ikon¦ z¦batki znajduj¡cej si¦ po prawej stronie, na wysoko±ci
listy etykietowanej jako Python Interpreter. Pojawi si¦ wówczas lista z akcjami
mo»liwymi do wykonania  tutaj nale»y klikn¡¢ Add . Nowo otwarte okno
pozwoli na wybranie jednego spo±ród kilku wariantów konguracji interpretera.
Aby skongurowa¢ narz¦dzie pod k¡tem zaj¦¢, nale»y wybra¢ System Interpre-
ter (rys. 11) i klikn¡¢ w przycisk OK w tym oraz kolejnym oknie.
Dopiero teraz mo»liwe jest utworzenie nowego projektu. W oknie pocz¡tko-

5
Ilustracja 9: PyCharm  ekran startowy

Ilustracja 10: PyCharm  doª¡czanie interpretera (I)

wym (9) klikn¡¢ nale»y New Project . Pojawi si¦ wówczas widok, w którym
to b¦dzie mo»na skongurowa¢ ustawienia nowego projektu. Nale»y to zrobi¢
zgodnie z tym, co zostaªo przedstawione na rysunku 12. Jedyna ró»nica po-
winna dotyczy¢ pola Location. Po u»yciu przycisku Create , nast¡pi przej±cie
do gªównego okna programu (rys. 13). Okno to zostaªo podzielone na kilka cz¦-
±ci. Najwa»niejsze z punktu widzenia zaj¦¢ b¦d¡:

ˆ struktura projektu, widoczna po lewej stronie,

ˆ obszar roboczy, widoczny po prawej stronie,

ˆ terminal oraz konsola widoczne w dolnej cz¦±ci.

6
Ilustracja 11: PyCharm  doª¡czanie interpretera (II)

Po klikni¦ciu w przycisk konsoli (Python Console ), pojawi si¦ zakªadka wi-


doczna na rysunku. Z punktu widzenia funkcjonalno±ci, jest ona to»sama z in-
terpreterem uruchamianym w wierszu polece« i nie jest powi¡zana z aktualnie
wykonywanym kodem. Aby uruchomi¢ skrypt nale»y skorzysta¢ z kombinacji
klawiszy SHIFT+F10 lub wybra¢ z belki menu gªównego Run→ Run `main`.

Ilustracja 12: PyCharm  tworzenie nowego projektu (I)

7
Ilustracja 13: PyCharm  tworzenie nowego projektu (II)

2.3 Zmienne

J¦zyk Python, podobnie jak j¦zyk MATLAB, charakteryzuje si¦ dynamicznym


typowaniem zmiennych. Oznacza to, »e po przypisaniu warto±ci do zmiennej,
Python sam okre±li jaki typ b¦dzie dla niej odpowiedni.

a = 10
b = ' Tekst '

Zadanie: Wykonaj powy»sze komendy w konsoli Pythona. Jakie typy


zmiennych zostaªy do nich przypisane?

Programista ma jednak mo»liwo±¢ skorzystania z mechanizmu konwersji ty-


pów zmiennych. Dziaªa to podobnie jak w przypadku rzutowania znanego z j¦-
zyków C i C++. Operacja ta realizowana jest jednak odmiennie, bo za po±red-
nictwem dedykowanych funkcji str(), float() oraz int().
Zadanie: Wpisz w konsoli kod
c = str(a)
Jakiego typu jest zmienna c?
Deniuj¡c nazwy zmiennych nale»y pami¦ta¢ o kilku zasadach:

ˆ nazwa musi zaczyna¢ si¦ liter¡ lub znakiem podªogi,

ˆ nazwa nie mo»e zaczyna¢ si¦ od cyfry,

ˆ nazwy mog¡ zawiera¢ tylko litery (A-z), cyfry (0-9) oraz znak podªogi,

ˆ rozró»niane s¡ wielko±ci liter.

2.4 Staªe

Wiele j¦zyków programowania pozwala na deniowanie staªych, czyli warto±ci


lub struktur, które nie ulegaj¡ zmianie w trakcie dziaªania programu. Przykªa-
dem staªej mo»e by¢ liczba Pi. Python nie pozwala na tworzenie staªych, znanych
np. z j¦zyka C, czy C++. Przyj¦ta zostaªa jednak konwencja, »e nazwy wszyst-
kich niezmiennych warto±ci zapisywane s¡ wersalikami (wielkimi literami).

PI = 3.14159265359
MOUNT_EVEREST = 8849
Zasady tworzenia nazw dla staªych s¡ identyczne jak w przypadku zmiennych.

8
2.5 Operacje na liczbach

Python pozwala operowa¢ na danych liczbowych, podobnie jak ma to miejsce w


innych j¦zykach wysokiego poziomu. Do dyspozycji programisty pozostawiono
zbiór operatorów, przedstawiony w tabeli 1. Za ich pomoc¡ mo»na wykonywa¢
operacje zarówno na liczbach caªkowitych jak i zmiennoprzecinkowych.

Tabela 1: Operatory arytmetyczne

Operator Dziaªanie
+ Dodawanie
- Odejmowanie
* Mno»enie
/ Dzielenie
% Reszta z dzielenia
// Dzielenie caªkowite
** Pot¦gowanie

Szczególn¡ uwag¦ nale»y zwróci¢ na operatory dzielenia. O ile typ zmien-


nej, do której zwracany b¦dzie wynik, zwyczajowo jest zale»ny od operandów
i wyniku samej operacji, o tyle w przypadku dzielenia przy u»yciu / wynik za-
wsze b¦dzie zmienn¡ zmiennoprzecinkow¡. Efekt ten nie zawsze jest po»¡dany,
st¡d twórcy dodali drugi operator dzielenia  //. Warto±¢ zwracana za jego
po±rednictwem jest zawsze caªkowita. Cze±¢ liczby znajduj¡ca si¦ po przecinku
jest pomijana, niezale»nie od jej warto±ci.

d = 77
e = 10
f = 0.10001

Zadanie: Przetestuj dziaªanie ka»dego z operatorów zawartych w tabeli.


Porównaj wyniki operacji x = e/f oraz y = e//f .

2.6 Operacje na ci¡gach znakowych

Ci¡gi znakowe w j¦zyku Python musz¡ zosta¢ umieszczone w ramach odpowied-


nich znaczników. Do dyspozycji s¡ trzy ró»ne kombinacje:

ˆ `tekst`  tekst w pojedynczej linii,

ˆ "tekst"  tekst w pojedynczej linii,

ˆ """tekst"""  tekst w wielu liniach.

Dªugo±¢ tekstu zwraca funkcja len(). Ma ona zastosowanie zarówno w sto-


sunku do zmiennych tekstowych jak i do samych ci¡gów.

g = ' Test '


len ( g )
len ( ' Test ')
Ci¡gi znakowe mo»na ze sob¡ ª¡czy¢, tworz¡c dªu»sze wyra»enia. Sªu»y do
tego operator +. W ci¡gach tekstowych mo»na tak»e umieszcza¢ liczby. Nie-
zb¦dna jest wtedy stosowna konwersja typów.

9
h = g + ' numer ' + str ( e )
Mo»liwe jest tak»e odwoªanie si¦ do pojedynczego znaku przy u»yciu opera-
tora [ ]. Nale»y pami¦ta¢, »e ci¡g znaków jest numerowany od 0.

i = ' Test '


print ( i [0] + i [1] + i [2] + i [3])
Do podziaªu ci¡gu na podci¡gi sªu»y metoda split(). Jako argument przyj-
muje ona separator, czyli fraz¦, wzgl¦dem której ma nast¡pi¢ podziaª.

j = ' Test_1 ; Test_2 '


k = j . split ( '; ')
print ( k )

Zadanie: Przeanalizuj wynik wywoªania dla powy»szego wyra»enia.

2.7 Obsªuga wej±cia/wyj±cia

Konsola interpretera Python pozwala na interakcj¦ z u»ytkownikiem. Mo»liwe


jest wczytanie danych podanych przez u»ytkownika oraz wypisanie danych na
ekranie. Sªu»¡ do tego odpowiednio funkcje input() oraz print().
Funkcja input() przyjmuje jako argument tekst, który zostanie wy±wie-
tlony na ekranie, jeszcze przed pobraniem tekstu od u»ytkownika. Zwracana
jest zmienna typu tekstowego. Przed wykonaniem operacji arytmetycznych na-
le»y pami¦ta¢, aby dokona¢ konwersji na wªa±ciwy typ.

value_1 = input ( ' Podaj pierwsz ¡ liczb ¦ : ')


value_2 = int ( input ( ' Podaj drug ¡ liczb ¦ : ') )
Funkcja print() wypisuje na ekranie zadany tekst. Nie ma konieczno±ci
stosowania ci¡gów formatuj¡cych  poszczególne cz¦±ci tekstu s¡ ª¡czone ope-
ratorem +.

value_1 = int ( value_1 )


print ( ' Suma liczb : ' + str ( value_1 + value_2 ) )

Zadanie: Przetestuj dziaªanie powy»szego kodu. Zmodykuj go tak, aby


wczytane zostaªy dwa ci¡gi tekstowe. Nast¦pnie poª¡cz je w jedno wyra»enie
i wy±wietl.

2.8 Skrypty

Wykonywanie polece« z poziomu konsoli interpretera ogranicza si¦ w praktyce


do pojedynczych komend. Du»o lepszym rozwi¡zaniem, poznanym ju» w ra-
mach poprzednich zaj¦¢, jest u»ycie skryptów. W przypadku Pythona, s¡ to
pliki z rozszerzeniem *.py. Wraz z pierwszym projektem, utworzony zostaª plik
skryptowy main.py. Co wi¦cej, zostaª on automatycznie otwarty w edytorze.

Uwaga: Usu« zawarto±¢ pliku main.py. Nie b¦dzie ona przydatna na tych
i kolejnych zaj¦ciach.

Zadanie: Przetestuj dziaªanie kodu z podrozdziaªu 2.7.

Cz¦sto, szczególnie w przypadku wi¦kszych projektów, zachodzi potrzeba


znalezienia bª¦dów, które nie powoduj¡ bª¦du krytycznego programu, ale wpªy-
waj¡ na wynik oblicze«. Do tego celu idealnie nadaje si¦ debugger wbudowany

10
w narz¦dzie PyCharm. Klikaj¡c pomi¦dzy numerem linii a obszarem roboczym,
u»ytkownik mo»e doda¢ punkt zatrzymania (tzn. break point ). Gdy interpreter
dotrze do wykonywania danej linii kodu, zostanie on zatrzymany, a na ekranie
pojawi¡ si¦ dodatkowe informacje diagnostyczne. Aby uruchomi¢ tryb debuggo-
wania, mo»na u»y¢ skrótu klawiszowego SHIFT+F9. Tryb ten b¦dziemy u»ywa¢
na zaj¦ciach tylko okazjonalnie.

Zadanie: Napisz program, który wczyta od u»ytkowników dwie liczby (pod-


staw¦ oraz wykªadnik pot¦gi), wykona operacj¦ pot¦gowania i wypisze wynik
na ekranie.

Zadanie: Napisz program, który wczyta od u»ytkownika dwie liczby, po-


dzieli je i wypisze na ekranie warto±¢ caªkowit¡ oraz reszt¦ z dzielenia.

2.9 Komentarze

Przygotowuj¡c skrypt, nierzadko konieczne jest opisanie funkcjonalno±ci po-


szczególnych fragmentów lub bloków kodu. Jest to czynno±¢ szczególnie istotna,
gdy do kodu powraca si¦ po dªu»szej przerwie lub udost¦pnia si¦ go innym oso-
bom. Komentowanie tre±ci, przydaje si¦ tak»e w trakcie poszukiwania bª¦dów
w kodzie, dziel¡c kod na mniejsze fragmenty.
W j¦zyku Python dost¦pne s¡ dwa podstawowe typu komentarzy  jedno-
liniowe oraz wieloliniowe. Pierwsze z nich, jak sama nazwa wskazuje, sªu»¡ do
zakomentowania pojedynczej linii kodu lub do dopisania komentarza za kodem
wªa±ciwym. Komentarz taki tworzy si¦ za pomoc¡ znacznika #.
# ponizej nastapi przypisanie wartosci 5 do zmiennej xyz
xyz = 5 # tutaj nastapilo przypisanie
Druga mo»liwo±¢ to dodanie komentarza blokowego, który obejmuje jedn¡
lub wiele linii kodu. Sªu»¡ do tego znaczniki """ i musz¡ one zosta¢ u»yte
dwukrotnie, aby rozpocz¡¢ blok oraz go zamkn¡¢.

"""
Kod opracowa ª :
Jan Kowalski
100100
"""
xyz = 5
W ramach pojedynczego skryptu mo»na u»ywa¢ obu typów komentarzy.

2.10 Podstawowe struktury danych

Twórcy j¦zyka Python przewidzieli cztery podstawowe struktury danych. S¡


nimi listy, krotki, zbiory oraz sªowniki. Ka»da ze struktur posiada swoj¡ specy-
k¦ oraz przeznaczenie.
Listy sªu»¡ do przechowywania du»ej liczby pojedynczych warto±ci. Kolej-
no±¢ elementów na li±cie mo»e by¢ zmieniana po jej utworzeniu. Dopuszczalne
s¡ tak»e duplikaty warto±ci. Dost¦p do pojedynczego elementu uzyskuje si¦ za
po±rednictwem nawiasów kwadratowych. Elementy s¡ numerowane od zera. Na
potrzeby dodawania oraz usuwania elementów, zdeniowane zostaªy odpowied-
nio metody append() oraz remove(). Dªugo±¢ listy mo»na uzyska¢ za po±red-
nictwem funkcji len().

11
l = [ 'A ' , 'B ' , 'C ']
l [2] = 'X '
l . append ( 'D ')
l . remove ( 'A ')
print ( l [0])
print ( len ( l ))
Krotki, podobnie jak listy, sªu»¡ do przechowywania zbioru pojedynczych
warto±ci. Podstawow¡ ró»nic¡ jest fakt, »e ich zawarto±¢ nie mo»e zosta¢ zmie-
niona po ich utworzeniu. W praktyce oznacza to, »e niemo»liwe jest u»ycie ope-
ratora przypisania (poskutkuje bª¦dem). Dost¦p do pojedynczego elementu uzy-
skuje si¦ za po±rednictwem nawiasów kwadratowych. Elementy s¡ numerowane
od 0. Mo»liwe jest pobranie warto±ci wskazuj¡cej na dªugo±¢ krotki, za po±red-
nictwem funkcji len().
t = ( 'A ' , 'B ' , 'C ')
print ( t [0])
print ( len ( t ))
Zbiory stanowi¡ kolekcje, sªu»¡ce do przechowywania unikalnych warto±ci.
Warto±ci te nie posiadaj¡ zdeniowanej kolejno±ci wyst¡pienia, a tym samym
nie ma mo»liwo±ci pobrania konkretnej warto±ci. Co wi¦cej, kilkukrotne wypisa-
nie zawarto±ci zbioru, mo»e skutkowa¢ inn¡ kolejno±ci¡ elementów przy ka»dym
wywoªaniu. Dodawanie oraz usuwanie elementów odbywa si¦ przy pomocy me-
tod add() oraz remove(). Rozmiar zbioru mo»na pobra¢ przy u»yciu funkcji
len().
s = { 'A ' , 'B ' , 'C '}
s . add ( 'D ')
s . remove ( 'A ')
print ( s )
print ( len ( s ))
Dost¦p do elementów zbioru odbywa si¦ za po±rednictwem p¦tli for.

for i in s :
print ( i )
Ostatni¡ struktur¡ s¡ sªowniki. Podobnie jak zbiory, sªu»¡ one do przechowy-
wania unikalnych elementów, przy czym s¡ to pary postaci klucz:warto±¢, gdzie
tylko klucz musi by¢ unikalny w ramach danego sªownika. Dost¦p odbywa si¦
za po±rednictwem klucza podanego w nawiasach kwadratowych. Mo»liwe jest
dodawanie i usuwanie elementów oraz zmiana ich warto±ci.

d = { ' el_A ': 'A ', ' el_B ': 'B ' , ' el_C ': 'C '}
d [ ' el_D '] = 'D '
del d[ ' el_A ']
print ( d )
print ( d [ ' el_B ' ])
print ( len ( d ))

Zadanie: Przetestuj ka»d¡ z omówionych struktur.

12
3 Instrukcje steruj¡ce

3.1 Instrukcja warunkowa if


Instrukcje warunkowe pozwalaj¡ na kontrol¦ procesu wykonywania kodu ¹ródªo-
wego. Umo»liwiaj¡ one wskazanie, które fragmenty kodu powinny zosta¢ wyko-
nane w zale»no±ci od speªnienia (lub nie) warunków wej±ciowych. Ka»da instruk-
cja warunkowa rozpoczyna si¦ sªowem kluczowym if. Za sªowem if zawsze musi
pojawi¢ si¦ warunek do sprawdzenia oraz znak :. Mo»na tu wykorzysta¢ opera-
tory porównania (tabela 2) oraz  w celu budowy bardziej zªo»onych warunków
 operatory logiczne (tabela 3).

Tabela 2: Operatory porównania

Operator Dziaªanie
== Równy
!= Nierówny
> Wi¦kszy
< Mniejszy
>= Wi¦kszy lub równy
<= Mniejszy lub równy

Tabela 3: Operatory logiczne

Operator Dziaªanie
and Iloczyn logiczny
or Suma logiczna
not Negacja

Instrukcja warunkowa mo»e by¢ bez alternatywy i skªada¢ si¦ tylko ze sªowa
kluczowego if. Nale»y pami¦ta¢, »e gª¦boko±¢ wci¦cia tekstu wskazuje przyna-
le»no±¢ danego wyra»enia lub bloku tekstu do danej klauzuli (biaªe znaki maj¡
tu znaczenie). Instrukcja if opcjonalnie mo»e zawiera¢ alternatyw¦, deniiwan¡
przy u»yciu sªowa elif oraz else. Poni»szy przykªad ilustruje zasad¦ dziaªania
instrukcji warunkowej dla przypadku dzielenia przez 0.

# poprawny kod
a = 5
b = 0
if b == 0:
print ( ' Blad dzielenia przez 0! ')
else :
c = a / b
print ( c )

# niepoprawny kod
a = 5
b = 0
if b == 0:
print ( ' Blad dzielenia przez 0! ')
else :

13
c = a / b
print ( c )

Zadanie: Przygotuj kod instrukcji warunkowej, która sprawdzi czy warto±¢


zmiennej a jest wi¦ksza od 100, mniejsza od 100, czy równa 100. Zwrócona
powinna zosta¢ informacja w formie tekstowej (np. 'Liczba jest mniejsza ni»
100.' )

3.2 P¦tla while


Przetwarzanie du»ej ilo±ci danych wymusza konieczno±¢ u»ycia dedykowanych
instrukcji danego j¦zyka programowania. P¦tle pozwalaj¡ na wykonanie danego
bloku kodu wielokrotnie, bez konieczno±ci jego zwielokrotniania w pami¦ci, czy
w pliku ¹ródªowym.
P¦tla while to p¦tla, która jest wykonywana dopóki dany warunek jest speª-
niony (logiczna prawda). Stosuje si¦ j¡, gdy nie jest znana liczba iteracji do
wykonania. Takimi przypadkami s¡ m.in. wczytywanie liczb od u»ytkownika,
do czasu podania konkretnej warto±ci, czy losowanie liczb, do czasu uzyskania
warto±ci oczekiwanej.
P¦tl¦ t¦ deniuje si¦ za pomoc¡ sªowa kluczowego while. Kolejno nale»y
poda¢ warunek, który jest sprawdzany przy ka»dym obiegu p¦tli. Warunek musi
zosta¢ zako«czony znakiem :.

Uwaga: Aby p¦tla zostaªa zako«czona, warunek musi sta¢ si¦ logicznym faª-
szem lub musi zosta¢ u»yte sªowo kluczowe break. W przeciwnym wypadku,
ciaªo p¦tli b¦dzie wykonywane w niesko«czono±¢ (do momentu siªowego wy-
muszenia zako«czenia dziaªania programu)!

Poni»szy kod ukazuje przykªadowe zastosowanie p¦tli while.


v = 1
while v > 0:
v = int ( input ( ' Podaj liczb ¦ : ') )
print ( ' Podano ' + str ( v ) )

Zadanie: Uruchom przykªadowy kod. W jaki sposób dziaªa ten program


i jaki jest efekt jego wykonania?

Zadanie: Napisz program, który b¦dzie wczytywaª liczby podawane przez


u»ytkownika do momentu, gdy ich suma b¦dzie mniejsza ni» 1000. Program
powinien na bie»¡co informowa¢ o ostatnim wyniku sumowania.

3.3 P¦tla for


P¦tl¦ f or deniuje si¦ przy u»yciu sªów kluczowych for oraz in. Za sªowem
for nale»y umie±ci¢ nazw¦ zmiennej (iterator), kolejno sªowo in i struktur¦,
która ma zosta¢ poddana iteracji. Nale»y te» pami¦ta¢ o znaku :. Mo»liwe jest
tak»e u»ycie funkcji range(). Przyjmuje ona nast¦puj¡ce argumenty: warto±¢
pocz¡tkow¡, warto±¢ ko«cow¡, krok. Warto zaznaczy¢, »e mamy tutaj do czy-
nienia z przedziaªem otwartym tzn. wywoªanie range(2,6,1) wykona p¦tle dla
warto±ci 2, 3, 4 i 5. Istniej¡ tak»e alternatywne wywoªania tej funkcji:

ˆ range(a)  warto±ci z przedziaªu <0; a) z krokiem 1,

14
ˆ range(a, b)  warto±ci z przedziaªu <a; b) z krokiem 1.

W ciele ka»dej p¦tli mo»na zagnie»d»a¢ inne p¦tle, instrukcje warunkowe


oraz deniowa¢ zmienne. Mo»liwe jest przygotowanie np. skryptu sumuj¡cego
liczby parzyste z zadanego przedziaªu, co przedstawiono na przykªadzie poni»ej.

sum = 0
for el in range (1 , 101) :
if el % 2 == 0:
sum = sum + el
print ( sum )

Zadanie: Napisz program, który znajdzie i wypisze liczby pierwsze z za-


kresu 1-b, gdzie b to warto±¢ nie mniejsza ni» 1000.

Zadanie: Napisz program, który wczyta od u»ytkownika tekst i sprawdzi,


czy jest on palindromem.

Zadanie: Napisz program, który wczyta od u»ytkownika dwa teksty


i sprawdzi, czy s¡ one anagramami.

Zadanie: Napisz program, który wczyta od u»ytkownika liczb¦ n i obliczy


warto±¢ silni n!. Wyniki po±rednie zapisz na li±cie, której zawarto±¢ zostanie
nast¦pnie wy±wietlona wraz z ko«cowym wynikiem oblicze«.

4 Funkcje

Podstawow¡ struktur¡, która umo»liwia uporz¡dkowanie i ograniczenie rozmiaru


kodu s¡ funkcje. Funkcja peªni rol¦ bloku wykonawczego, który realizuje pewne,
specyczne zadanie. Zaletami takiego podej±cia s¡ przede wszystkim cz¦±ciowa
niezale»no±¢ od pozostaªej cz¦±ci kodu
3 oraz mo»liwo±¢ wielokrotnego wykonania
tego samego fragmentu kodu, bez konieczno±ci jego duplikowania. Deklaracja
funkcji skªada si¦ ze sªowa kluczowego def, nazwy wªasnej funkcji (zgodnie
z zasad¡ deklaracji zmiennych) oraz argumentów, o ile s¡ one potrzebne. Co
wi¦cej, argumenty mog¡ by¢ obowi¡zkowe lub opcjonalne.

def funkcja_a () : # funkcja bez argumentow wejsciowych


return True

def funkcja_b ( a ) : # funkcja z jednym , obowiazkowym


argumentem wejsciowym
return a * a

def funkcja_c (a , b =1) : # funkcja z dwoma argumentami


wejsciowymi , w tym z jednym opcjonalnym
return a * b
Warto±¢ wyj±ciowa funkcji mo»e zosta¢ zwrócona za po±rednictwem sªowa klu-
czowego return. Poni»ej przedstawiony zostaª przykªad, który obrazuje zasad¦
konstruowania i dziaªania funkcji. Oba bloki kodu realizuj¡ to samo zadanie,
przy czym drugi z nich zostaª zdeniowany z u»yciem funkcji.

3 Gdy u»yte s¡ tylko zmienne lokalne, a wyj±cie nie jest zwracane za po±rednictwem argu-

mentu wej±ciowego.

15
wartosc_a = 5
wartosc_b = 8
wynik_a = wartosc_a + wartosc_b * wartosc_a

wartosc_a = 7
wartosc_b = 9
wynik_b = wartosc_a + wartosc_b * wartosc_a

def funkcja (a , b ) :
return a + b * a

wynik_a = funkcja (5 , 8)
wynik_b = funkcja (7 , 9)

Zadanie: Napisz program, który wczyta od u»ytkownika liczb¦ n i obliczy


warto±¢ silni n!. Obliczenie silni powinno zosta¢ wykonane w funkcji.

Zadanie: Napisz program, który wczyta od u»ytkownika liczb¦ n i obliczy


warto±¢ n-tego elementu ci¡gu Fibonacciego. Obliczenia powinny zosta¢ wy-
konane w funkcji.

5 Obsªuga plików

5.1 Odczyt danych

Operacja odczytu danych, ogranicza si¦  w najprostszej formie  do wywoªania


zaledwie trzech funkcji. Funkcja open() sªu»y do wªa±ciwego otwarcia pliku.
Jako argumenty przyjmuje nazw¦ pliku (lub ±cie»k¦ oraz nazw¦ pliku) i tryb
otwarcia pliku; jako wynik zwraca uchwyt do pliku. Podstawowe tryby pracy
zostaªy przedstawione w tabeli 4.

Tabela 4: Lista trybów pracy z plikiem

r odczyt
w zapis
a dopisywanie
x tworzenie (bª¡d, gdy istnieje)

Kolejna funkcja, to metoda read(). Pozwala ona na odczytanie caªej za-


warto±ci pliku. Mo»liwe jest tak»e odczytanie tylko jego fragmentu. Aby tego
dokona¢, nale»y jako argument poda¢ liczb¦ znaków do wczytania. Alternatyw-
nie, mo»na u»y¢ metody readline(), która czyta plik "po jednej linii". Ostatnia
funkcja to metoda close(), sªu»¡ca do zamkni¦cia pliku.
p = open ( ' plik . csv ' , 'r ')
d = p . read ()
p . close ()

Zadanie: Wczytaj zawarto±¢ pliku liczby.txt i utwórz na jej podstawie list¦.


Zsumuj wszystkie warto±ci listy i wy±wietl wynik.

16
Zadanie: Wczytaj zawarto±¢ pliku tekst.txt. Nast¦pnie pobierz od u»yt-
kownika pojedynczy, dowolny znak (lt), policz liczb¦ wyst¡pie« znaku lt we
wczytanym tek±cie i wy±wietl wynik.

5.2 Zapis danych

Zapis danych w j¦zyku Python  podobnie jak i odczyt  mo»na ograniczy¢


do trzech funkcji, z czego tylko jedna ulegnie zmianie  read() na write().
Oprócz tego, wskaza¢ nale»y wªa±ciwy tryb pracy z plikiem.

a = 5
b = 6
c = a / b

p = open ( ' plikB . txt ' , 'w ')


p . write ( ' Wynik operacji matematycznej : ' + str ( c ) )
p . close ()

Zadanie: Napisz program, który wczyta zawarto±¢ pliku liczby.txt, posor-


tuje warto±ci rosn¡co oraz malej¡co i zapisze wyniki odpowiednio do plików
asc.txt i desc.txt. Warto±ci powinny by¢ od siebie oddzielone znakiem my±l-
nika (-).

Zadanie: Napisz program, który wczyta plik asc.txt, rozdzieli jego zawar-
AT X. Wy-
to±¢ do pi¦ciu kolumn i przeksztaªci do postaci tabeli w j¦zyku L E
nik powinien zosta¢ zapisany w pliku z rozszerzeniem *.tex.

AT X, w którym wy±wietlona zo-


Zadanie: Przygotuj dokument w j¦zyku L E
stanie uprzednio wygenerowana tabela.
Podpowied¹: Kod sªu»¡cy do wczytywania danych z plików *.tex (L AT X)
E
zostaª zaª¡czony poni»ej. Nale»y pami¦ta¢, aby wskaza¢ odpowiedni¡ liczb¦
kolumn!

\ begin { table }[! h ]


\ begin { tabular }{| c | c | c | c |}
\ input { file . tex }
\ end { tabular }
\ end { table }

5.3 Format CSV

Format CSV (ang. Comma Separated Value ) deniuje struktur¦ pliku, jako zbiór
warto±ci oddzielonych przecinkami. Python posiada wbudowany moduª, pozwa-
laj¡cy na prac¦ z takimi plikami w sposób relatywnie prosty. Aby z niego sko-
rzysta¢ nale»y umie±ci¢ poni»szy kod na pocz¡tku skryptu.

import csv
Odczyt danych mo»na zrealizowa¢ w sposób analogiczny do uprzednio omó-
wionych operacji na plikach. Zamiast metody read(), korzystamy tutaj z me-
tody reader() obiektu csv. Jako argumenty przyjmuje ona uchwyt do pliku
oraz pojedynczy znak, który b¦dzie wskazywaª na separator danych.

17
import csv

p = open ( ' liczby . csv ' , 'r ')


r = csv . reader (p , delimiter = ' , ')

for d in r :
print ( d )

p . close ()

Zadanie: Napisz program, który wczyta zawarto±¢ pliku liczby.csv i ka»d¡


z warto±ci, podniesie do pot¦gi zadanej przez u»ytkownika.

Struktura kodu, odpowiadaj¡cego za zapis, wygl¡da nieco inaczej  zmiana


odnosi si¦ zarówno do samego otwarcia pliku jak i formy zapisu danych. W tym
wariancie, funkcja open() przyjmuje dodatkowy argument newline, który odpo-
wiada za znacznik ko«ca linii. Je±li nie zostanie on dopisany, to pomi¦dzy ka»d¡
lini¡ z danymi, pojawi si¦ dodatkowa, pusta linia. Metod¡, odpowiedzialn¡ bez-
po±rednio za zapis danych, jest writerow(). Dane do zapisu (w formie listy
warto±ci) nale»y poda¢ jako argument.

import csv

p = open ( ' liczby_2 . txt ' , 'w ' , newline = ' ')
r = csv . writer (p , delimiter = ' - ')

r . writerow ([ 'A ' , 'B ' , 'C ' ])


r . writerow ([ 'D ' , 'E ' , 'F ' ])

p . close ()

Zadanie: Napisz program, który wczyta zawarto±¢ pliku liczby.csv i zapisze


dane jako liczby_sc.txt, zast¦puj¡c wszystkie znaki przecinka ±rednikami.

5.4 Format JSON

Innym, popularnym formatem danych, jest JSON (ang. JavaScript Object Nota-
tion ). Powstaª on jako alternatywa dla formatu XML (ang. Extensible Markup
Language ). Jego struktura przypomina struktur¦ sªownika w j¦zyku Python.
Aby skorzysta¢ z wbudowanej biblioteki, nale»y doª¡czy¢ moduª json.
import json
Zbiór funkcji realizuj¡cych odczyt danych, niewiele ró»ni si¦ od tego, dla
formatu CSV. Ró»nica polega gªównie na u»yciu metody load() obiektu json.
Odwoªanie do dowolnej warto±ci, odbywa si¦ za po±rednictwem wskazania na
nazw¦ klucza.

import json

json_p = open ( ' plik . json ' , 'r ')


r = json . load ( json_p )

print ( r )
print ( r [ " el_A " ])

18
json_p . close ()

Zadanie: Napisz program, który wczyta zawarto±¢ pliku liczby.json i ka»d¡


z warto±ci, podniesie do pot¦gi zadanej przez u»ytkownika.

Zapis danych jest realizowany identycznie jak w przypadku zwykªych


plików, przy czym zamiast wskazania konkretnych warto±ci, nale»y poda¢
json.dumps() i jako jego argument wskaza¢ struktur¦ (sªownik) do zapisania.

import json

dt = { ' liczba_A ': 2341 , ' liczba_B ': 4451 , ' liczba_C ': 734}

json_p = open ( ' plik_2 . json ' , 'w ')


json_p . write ( json . dumps ( dt ) )
json_p . close ()

Zadanie: Napisz program, który wczyta zawarto±¢ pliku liczby.json i zapi-


sze dane jako liczby_e.json, zast¦puj¡c klucze kolejnymi warto±ciami liczbo-
wymi (od zera).

6 Biblioteki

6.1 NumPy

NumPy stanowi rozbudowan¡ bibliotek¦, pozwalaj¡c¡ na prac¦ z macierzami.


Cechuje si¦ prostot¡ u»ycia oraz bardzo dobr¡ wydajno±ci¡. Przed pierwszym
u»yciem moduªu, nale»y sprawdzi¢, czy zostaª on zainstalowany. Mo»na to zrobi¢
wprost, wywoªuj¡c instalator i sprawdzaj¡c efekt jego wywoªania. W terminalu
narz¦dzia PyCharm nale»y u»y¢ komendy pip3 install numpy, co poskutkuje
rozpocz¦ciem procesu instalacji lub wy±wietleniem komunikatu informuj¡cego,
»e biblioteka zostaªa uprzednio zainstalowana.
Samo u»ycie biblioteki standardowo nale»y zacz¡¢ od jej doª¡czenia. Mo»na
to zrobi¢ na dwa sposoby  klasycznie lub tworz¡c alias (tutaj np).
import numpy
import numpy as np

Macierze

Podstawow¡ struktur¦ danych stanowi¡ macierze. Mo»na je utworzy¢ przy u»y-


ciu funkcji ogólnego przeznaczenia  array()  lub korzystaj¡c z funkcji dedy-
kowanych. Funkcje te zostaªy wymienione w tabeli 5. W przypadku array(),
wskaza¢ nale»y wszystkie warto±ci, które b¦d¡ znajdowaªy si¦ w macierzy, a nie
jak w przypadku pozostaªych, tylko jej wymiary.

np_a = np . array ([[1 ,2 ,3 ,4] , [5 ,6 ,7 ,8]])


np_b = np . zeros ([2 ,4])
np_c = np . ones ([2 ,4])
np_d = np . full ([2 ,4] , 5)
np_e = np . eye (3)
np_f = np . random . random ([2 ,4])

19
Tabela 5: Funkcje deniuj¡ce macierze

Nazwa Opis
zeros([w,k]) Macierz zer
ones([w,k]) Macierz jedynek
full([w,k],c) Macierz warto±ci c
eye(r) Macierz jednostkowa
random.random([w,k]) Macierz losowych warto±ci z przedziaªu ⟨0, 1⟩

Dost¦p do poszczególnych komórek macierzy uzyskuje si¦ za po±rednictwem


nawiasów kwadratowych. Poda¢ mo»na jedn¡ lub dwie warto±ci, zale»nie od tego
czy chcemy odczyta¢ warto±¢ b¦d¡c¡ na przeci¦ciu wiersza i kolumny, czy te»
chcemy pobra¢ warto±¢ caªego wiersza/caªej kolumny.

print ( np_a [0 ,0])


print ( np_a [0])
print ( np_a [: ,0])
Przydatna mo»e si¦ okaza¢ tak»e metoda shape(). Pozwala ona na spraw-
dzenie wymiarów danej macierzy. Jako, »e zwraca krotk¦, mo»liwe jest odwoªa-
nie si¦ do danej warto±ci bezpo±rednio w momencie wywoªania lub pó¹niej, gdy
zajdzie taka potrzeba.

dim = np_a . shape


print ( np_a . shape )
print ( np_a . shape [0])
print ( dim [0])

Operacje arytmetyczne i logiczne

W Pythonie, przy u»yciu biblioteki NumPy, mo»liwe jest operowanie na danych


w sposób analogiczny do tego, znanego z narz¦dzi MATLAB, czy Octave. Do-
my±lnie, operacje wykonywane s¡ na caªej strukturze danych, a nie tylko na jej
wycinku. Podstawowe operacje zostaªy przedstawione w tabeli 6. Nale»y przy
tym pami¦ta¢, »e oba operandy musz¡ by¢ strukturami, pochodz¡cymi z biblio-
teki NumPy.

Tabela 6: Operatory arytmetyczne (NumPy)

Nazwa Opis
- Odejmowanie
+ Dodawanie
* Mno»enie (elementów macierzy)
@ Mno»enie macierzy
/ Dzielenie
**c Pot¦gowanie przez skalar (c)

print ( np_a - np_c )


print ( np_a / np_c )

np_g = np . full ([4 , 2] , 3)

20
print ( np_a @ np_g )
print ( np_d **5)
Na macierzach mo»na tak»e wykonywa¢ operacje logiczne. Ich zbiór jest
zgodny z tymi, przedstawionymi w tabeli 3. W przypadku wykonania operacji
porównania, utworzona zostanie macierz o wymiarach macierzy bazowej, wy-
peªniona warto±ciami logicznymi (True lub False). Wynik operacji jest zale»ny
od speªnienia zadanego warunku mi¦dzy elementami o tych samych indeksach
w macierzach.

print ( np_a == np_c )


print ( np_a <= 3)
Kompletna dokumentacja biblioteki NumPy znajduje si¦ pod adresem
https://numpy.org/doc/stable/reference/index.html.
Zadanie: Utwórz macierz 8x8 zawieraj¡c¡ warto±ci losowe, w tym wi¦k-
sze od zera. Przeksztaª¢ j¡ do struktury sªownika i zapisz w formacie JSON.
Kluczami powinny by¢ frazy zapisane w notacji  val_wiersz_kolumna  (np.
 val_0_0 ).

6.2 Matplotlib

Matplotlib stanowi jedn¡ z najpopularniejszych bibliotek sªu»¡cych do genero-


wania wykresów w Pythonie. Jej struktura bardzo przypomina schemat two-
rzenia wykresów, znany z MATLABa i Octave. Na szczególn¡ uwag¦ zasªuguj¡
nazwy metod, które maj¡ swoje odpowiedniki w uprzednio wymienionych j¦zy-
kach. Aby skorzysta¢ z moduªu Matplotlib nale»y go uprzednio zaimportowa¢.
Niezwykle wa»ny b¦dzie tutaj moduª pyplot.
import matplotlib . pyplot as plot
Nast¦pnie, nale»y zdeniowa¢ warto±ci dla osi X oraz osi Y. Mo»na do tego celu
u»y¢ bibliotek¦ NumPy. Posiada ona wbudowan¡ metod¦ arrange() pozwala-
j¡c¡ na utworzenie wektora. Jej argumenty oznaczaj¡ kolejno warto±¢ pocz¡t-
kow¡, warto±¢ ko«cow¡ oraz krok. Nale»y przy tym pami¦ta¢, »e tworzony jest
tutaj przedziaª prawostronnie otwarty.

import numpy as np
import matplotlib . pyplot as plot

x = np . arange (1 , 100 , 2)
y = x * x
z = y * ( x /2.0) + 10

plot . figure ()
plot . plot (x , y , x , z )
plot . xlabel ( 'O ± x ')
plot . ylabel ( 'y ')
plot . legend ([ " Seria A " , " Seria B " ])
plot . show ()
Po zdeniowaniu wej±cia, mo»na wygenerowa¢ wykres. Sªu»¡ do tego kolejno
metody figure() oraz show(). Pierwsza odpowiada za utworzenie nowego wy-
kresu, druga za jego wy±wietlenie. Pozostaªe metody odpowiadaj¡ wprost tym,

21
znanym z MATLABa/Octave i oznaczaj¡ odpowiednio narysowanie wykresu,
nadanie etykiety dla osi X, nadanie etykiety dla osi Y, dodanie legendy do wy-
kresu.
Kompletna moduªu plot biblioteki Matplotlib znajduje
dokumentacja
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.
si¦ pod adresem
pyplot.plot.html.
Zadanie: Zapoznaj si¦ z dokumentacj¡ moduªu plot. Zmie« styl linii, ich
kolor oraz znaczniki dla przykªadowego wykresu.

Zadanie: Korzystaj¡c z wektora:


t = np.arrange(0, 1, 0.01)
przygotuj wykresy funkcji sinus o cz¦stotliwo±ciach 2 Hz i 3 Hz dla zakresu
od 0 do 2π . Kolor linii ustaw odpowiednio na zielony i na czerwony. Dodaj
tytuª wykresu, opisy osi, legend¦, siatk¦ pomocnicz¡ o zakresie osi y mi¦dzy
−1.2 a 1.2.

6.3 Enum - typ wyliczeniowy

Wiele j¦zyków programowania oferuje mo»liwo±¢ zdeniowania typu wyliczenio-


wego, pozwalaj¡cego na przyporz¡dkowanie etykiety tekstowej do warto±ci licz-
bowej. Python oferuje tak¡ funkcjonalno±¢ natywnie od wersji 3.4. Aby z niej
skorzysta¢, nale»y zaimportowa¢ bibliotek¦ korzystaj¡c z polecenia:

from enum import Enum


Typ wyliczeniowy sprawdza si¦ doskonale, gdy zaistnieje potrzeba posªugi-
wania si¦ etykietami przyjaznymi dla czªowieka. Przykªadowo, je±li zdeniowano
by zmienn¡ wybrana_zabawka i dopuszczalnymi warto±ciami zabawek byªyby
piªka, klocki oraz puzzle to klasycznie mo»na by to zrobi¢ w nast¦puj¡cy
sposób:

wybrana_zabawka = 0 # 0 = pilka , 1 = klocki , 2 = puzzle


lub w taki:

wybrana_zabawka = ' pilka ' # pilka , klocki , puzzle


Pierwszy z wymienionych przypadków operuje na warto±ciach liczbowych,
co wymusza konieczno±¢ zapami¦tania przyporz¡dkowania indeksu liczbowego
do znaczenia. W drugim przypadku nie jeste±my ograniczeni »adnym zbiorem
danych, co w konsekwencji mo»e prowadzi¢ do pojawienia si¦ wieloznaczno±ci
i duplikatów (wielko±¢ liter ma tutaj znaczenie).
U»ycie biblioteki Enum ogranicza si¦ do zdeniowania klasy dziedzicz¡cej po
Enum oraz wprowadzenia warto±ci.

class Zabawka ( Enum ) :


PILKA = 0
KLOCKI = 1
PUZZLE = 2
Nast¦pnie, mo»liwe jest bezpo±rednie odniesienie si¦ do typu wyliczeniowego
np.:

wybrana_zabawka = Zabawka . PILKA

22
Zmienn¡ wybrana_zabawka mo»na u»y¢ m.in. w instrukcjach warunkowych.
Mo»na tak»e bezpo±rednio pobra¢ jej warto±¢ oraz nazw¦ (jak w przypadku
sªownika  klucz i warto±¢). Sªu»¡ do tego odpowiednio metody name oraz value.
if wybrana_zabawka == Zabawka . PILKA :
print ( ' Wybrano : ' + wybrana_zabawka . name + '! ( indeks : ' +
str ( wybrana_zabawka . value ) + ') ')

Zadanie: Przetestuj dziaªanie typu wyliczeniowego.

Zadanie: Rozszerz list¦ dost¦pnych warto±ci o dodatkowe dwa przedmioty.

7 Klasy

Klasa stanowi typ danych, agreguj¡cy zbiór metod oraz struktur danych. Sta-
nowi ona podstawowy element programowania obiektowego, a tym samym re-
alizuje jego podstawowe paradygmaty:

ˆ abstrakcj¦  oferuj¡c zbiór metod, bez udost¦pniania szczegóªów ich im-


plementacji,

ˆ hermetyzacj¦  izoluj¡c obiekt od pozostaªej cz¦±ci programu,

ˆ dziedziczenie  daj¡c mo»liwo±¢ stworzenia hierarchii i zale»no±ci pomi¦dzy


obiektami,

ˆ polimorzm  oferuj¡c mo»liwo±¢ przeci¡»ania metod i operatorów.

Struktura klasy skªada si¦ ze sªowa kluczowego class oraz nazwy wªasnej
(opcjonalnie nazwy klasy, po której odbywa si¦ dziedziczenie). Na zaj¦ciach za-
prezentowana zostanie mo»liwie jak najprostsza forma deniowania oraz u»ycia
klas, dlatego dziedziczenie nie zostanie tutaj omówione.

Zdeniujmy teraz klas¦ Pudelko, która b¦dzie zawieraªa w sobie pust¡ list¦.
class Pudelko :
przedmioty = []
Takie utworzenie klasy mo»e niekiedy prowadzi¢ do problemów z alokacj¡ pa-
mi¦ci lub te» by¢ po prostu niepo»¡dane. Aby poprawnie nada¢ warto±ci pocz¡t-
kowe, nale»y posªu»y¢ si¦ konstruktorem. Konstruktor to metoda, która jest
wywoªywana w momencie tworzenia obiektu, czyli instancji klasy. W naszym
przypadku przyjmie on nast¦puj¡c¡ posta¢:

def __init__ ( self ) :


self . przedmioty = []
Warto odnie±¢ si¦ do poj¦cia tworzenia obiektu klasy, bez którego nie mo»na
4
z danej klasy skorzysta¢ . Utworzenie instancji klasy wygl¡da nast¦puj¡co:

instancja_pudelko = Pudelko ()
Kompletny kod zostaª zamieszczony poni»ej.

4 Jest to mo»liwe w przypadku klas statycznych.

23
class Pudelko :
przedmioty = []

def __init__ ( self ) :


self . przedmioty = []

instancja_pudelko = Pudelko ()

7.1 Metody

Metoda to odpowiednik funkcji w ciele klasy. Podstawowe ró»nice to zakres jej


zasi¦gu ograniczony do struktur i metod zdeniowanych w danej klasie oraz
operator self, który stanowi uchwyt do instancji tej klasy. Uogólniaj¡c, me-
tod¦ mo»na potraktowa¢ jak klasyczn¡ funkcj¦, powi¡zan¡ tylko z jedn¡ klas¡
lub hierarchi¡ klas. Za przykªad metody mo»e posªu»y¢ konstruktor, omówiony
w poprzedniej sekcji dokumentu.
Na potrzeby laboratorium zdeniowane zostan¡ dwie podstawowe metody:

ˆ pozwalaj¡ca na dodanie przedmiotu do pudeªka,

ˆ pozwalaj¡ca na sprawdzenie zawarto±ci pudeªka.

Pierwsza z nich b¦dzie dodawaªa do listy (przedmioty) przedmioty:

def dodaj_przedmiot ( self , przedmiot ) :


self . przedmioty . append ( przedmiot )
druga natomiast b¦dzie zwracaªa zawarto±¢ listy:

def sprawdz_przedmioty ( self ) :


return self . przedmioty
Obie te metody musz¡ znale¹¢ si¦ w ciele klasy  nale»y tutaj pami¦ta¢ o od-
powiedniej gª¦boko±ci wci¦¢.

Zadanie: Przygotuj klas¦ Pudelko, zgodnie z opisem zawartym w sekcji


"Klasy". Utwórz jej instancj¦ i przetestuj dziaªanie metod.

Zadanie: Zmodykuj klas¦ w taki sposób, aby lista przedmioty przechowy-


waªa elementy typu wyliczeniowego (jak w sekcji 6.3).

Zadanie: Zdeniuj metod¦ zabierz_przedmiot, która pozwoli na usuni¦cie


wybranego przedmiotu z pudeªka.

Zadanie: Zmodykuj metod¦ dodaj_przedmiot, w taki sposób, aby mo»liwe


byªo dodanie tylko czterech przedmiotów danego typu.

8 Zadania

Zadania musz¡ zosta¢ wykonane zgodnie z zadan¡ kolejno±ci¡. Po wykonaniu


ka»dego z nich, nale»y sprawdzi¢ poprawno±¢ dziaªania nowej funkcjonalno±ci.

1. Zdeniuj klas¦ Kalkulator i utwórz jej instancj¦. Klasa powinna zawiera¢


nast¦puj¡ce zmienne:

ˆ wynik  przechowuj¡c¡ ostatni wynik operacji (liczba rzeczywista),

24
ˆ wyniki  list¦ przechowuj¡c¡ wyniki wszystkich wykonanych dotych-
czas operacji.

Utwórz konstruktor, który nada odpowiednie warto±ci pocz¡tkowe zmien-


nym.

2. Utwórz metod¦ suma, która przyjmie dwa argumenty wej±ciowe (a, b)


i zwróci wynik operacji sumowania. Wynik ten powinien ponadto zosta¢
zapisany w zmiennej wynik oraz dopisany do listy wyniki.
3. Utwórz metody analogiczne do suma, które pozwol¡ na odejmowanie, mno-
»enie i dzielenie dwóch warto±ci.

4. Zdeniuj metod¦, która pozwoli na pobranie i wy±wietlenie ostatniego wy-


niku.

5. Zdeniuj metod¦, która pozwoli na pobranie i wy±wietlenie listy ze wszyst-


kimi dotychczasowymi wynikami.

6. Utwórz metod¦, która pozwoli na wyczyszczenie zawarto±ci zmiennych


wynik oraz wyniki.
7. Utwórz metod¦, która pozwoli na zapisanie zawarto±ci zmiennej wyniki
do pliku. Argumentami metody powinny by¢ nazwa pliku oraz format
wynikowy (csv, json). Wybór formatu nale»y zrealizowa¢ w oparciu o typ
wyliczeniowy (Enum).

8. Zdeniuj zbiór metod, które pozwol¡ na:

ˆ wyznaczenie ±redniej arytmetycznej,

ˆ wyznaczenie ±redniej geometrycznej,

ˆ wyznaczenie mediany elementów,

ˆ odwracanie kolejno±ci elementów listy,

ˆ cykliczne przesuni¦cie warto±ci listy w prawo (element na pozycji


0 jest przesuwany na pozycj¦ 1, element na pozycji 1 jest przesuwany
na pozycj¦ numer 2, itd. Ostatni element jest wstawiany na pozycj¦
0),
ˆ cykliczne przesuni¦cie warto±ci listy w lewo,

ˆ sortowanie listy (uporz¡dkowanie elementów rosn¡co lub malej¡co).

Argumentem wej±ciowym metod powinna by¢ lista warto±ci. W przypadku


trzech pierwszych metod, wynik operacji powinien ponadto zosta¢ zapi-
sany do zmiennej wynik oraz dopisany do listy wyniki.
9. Zdeniuj metod¦ pozwalaj¡c¡ na wygenerowanie wykresu w oparciu o za-
warto±¢ zmiennej wyniki. O± x powinna zawiera¢ kolejne warto±ci licz-
bowe (1-n), natomiast na osi y powinny znajdowa¢ si¦ warto±ci kolejnych
wyników.

25

You might also like