Professional Documents
Culture Documents
Python 3. Kompletne Wprowadzenie Do Programowania. Wydanie II
Python 3. Kompletne Wprowadzenie Do Programowania. Wydanie II
Kompletne
wprowadzenie do
programowania. Wydanie II
Autor: Mark Summerfield
Tumaczenie: Robert Grczyski
ISBN: 978-83-246-2642-7
Tytu oryginau: Programming in Python 3: A Complete
Introduction to the Python Language (2nd Edition)
Format: 170230, stron: 640
Poznaj wspaniae moliwoci jzyka Python 3 i twrz dowolne programy
Python 3 uznany zosta za najlepsz dotychczasow wersj tego jzyka, poniewa
jego moliwoci s dzi znacznie wiksze ni dawniej. Python 3 jest wygodny, spjny
i ekspresyjny, a take niezaleny od platformy sprztowej i co najwaniejsze
dostarczany z pen bibliotek standardow. Mona go wykorzysta do programowania
proceduralnego, zorientowanego obiektowo oraz (w mniejszym stopniu) do programowania
w stylu funkcjonalnym. Autor ksiki, Mark Summerfield, ekspert w dziedzinie programowania,
przedstawia szczegowe informacje dotyczce tego jzyka w bardzo przyjazny sposb,
co sprawia, e czytelnik szybko i sprawnie moe napisa dowolny program.
Ksika Python 3. Kompletne wprowadzenie do programowania. Wydanie II zostaa
zaprojektowana tak, aby mg z niej korzysta zarwno kto o niewielkim dowiadczeniu
w programowaniu, jak i profesjonalici, naukowcy, inynierowie oraz studenci. Dziki
niej szybko nauczysz si m.in. wykorzystywa zaawansowane rodzaje danych, kolekcje
oraz struktury kontrolne. Poznasz techniki analizy skadniowej, obejmujce uywanie
moduw PyParsing i PLY. Dowiesz si, na czym polega rozkadanie obcienia programu
midzy wiele procesw i wtkw, a take zaczniesz uywa techniki Test Driven
Development, aby unikn popeniania bdw. Znajdziesz tu wszelkie niezbdne
informacje, dziki ktrym bdziesz mg stworzy solidne i wydajne programy.
Tworzenie i uruchamianie programw Pythona
Polecenia kontroli przepywu
Rodzaje danych
Funkcje i struktury kontrolne
Moduy i pakiety
Programowanie zorientowane obiektowo
Obsuga plikw
Zaawansowane techniki programowania
Kontrola dostpu do atrybutw
Usuwanie bdw, testowanie i profilowanie
Wyraenia regularne
Ten podrcznik jest jak Python 3 spjny, praktyczny i wygodny
Mark Summerfield jest informatykiem z wieloletnim dowiadczeniem w dziedzinie
programowania. Jest take wspautorem ksiki C++ GUI Programming with Qt 4
oraz autorem ksiki Rapid GUI Programming with Python and Qt: The Definitive Guide
to PyQt Programming. Mark zaoy firm Qtrac Ltd., http://www.qtrac.eu, w ktrej
pracuje jako niezaleny publicysta, redaktor, trener i konsultant specjalizujcy si
w C++, Qt, Pythonie i PyQt.
Spis treci
O autorze ...........................................................................13
Wprowadzenie ...................................................................15
Rozdzia 1. Szybkie wprowadzenie do programowania proceduralnego ......23
Tworzenie i uruchamianie programw Pythona .................................24
Pikne serce Pythona .................................................................29
Koncepcja 1. rodzaje danych ................................................29
Koncepcja 2. odniesienia do obiektw ..................................31
Koncepcja 3. kolekcje rodzajw danych .................................33
Koncepcja 4. operatory logiczne ...........................................36
Koncepcja 5. polecenia kontroli przepywu programu ..............40
Koncepcja 6. operatory arytmetyczne ....................................45
Koncepcja 7. operacje wejcia-wyjcia ...................................48
Koncepcja 8. tworzenie i wywoywanie funkcji ........................51
Przykady ......................................................................................53
bigdigits.py ..............................................................................53
generate_grid.py ......................................................................56
Podsumowanie .............................................................................58
wiczenia .....................................................................................61
Spis treci
10
Spis treci
11
12
Epilog ..............................................................................611
Wybrana bibliografia ........................................................613
Skorowidz ........................................................................615
1
Szybkie wprowadzenie
do programowania
proceduralnego
W rozdziale:
Tworzenie i uruchamianie programw Pythona
Pikne serce Pythona
tym rozdziale zostanie omwiona taka ilo materiau, e jej lektura pozwoli czytelnikowi
na rozpoczcie tworzenia programw w jzyku Python. Jeeli czytelnik jeszcze nie
zainstalowa Pythona, gorco zachcamy do przeprowadzenia instalacji. Pozwoli to na
zdobywanie dowiadczenia i utrwalanie poznawanego materiau. (Instalacja Pythona na
gwnych platformach sprztowych zostaa omwiona we wczeniejszym rozdziale
Wprowadzenie, g 19).
Pierwszy podrozdzia zaprezentuje sposb tworzenia i uruchamiania programw
Pythona. Kod Pythona mona tworzy w dowolnym edytorze tekstowym. Omwione
w rozdziale rodowisko programistyczne IDLE oferuje nie tylko sam edytor kodu
rdowego, ale take funkcje dodatkowe pozwalajce na midzy innymi eksperymentowanie
z kodem Pythona oraz usuwanie bdw z kodu.
Drugi podrozdzia zosta powicony omiu kluczowym koncepcjom Pythona,
ktrych poznanie wystarczy do tworzenia uytecznych programw. Wszystkie wymienione
tutaj konstrukcje bd dokadnie omwione w dalszych rozdziaach ksiki. W miar
przedstawiania kolejnego materiau koncepcje te zostan uzupenione informacjami
obejmujcymi szerszy zakres jzyka Python. W ten sposb po przeczytaniu ksiki czytelnik
bdzie zna cay jzyk i podczas pracy nad wasnymi programami bdzie w stanie
wykorzystywa wszystkie moliwoci jzyka.
24
Ostatni podrozdzia zawiera dwa krtkie programy, w ktrych uyto niektrych funkcji
Pythona omwionych w podrozdziale drugim. Dziki temu czytelnik natychmiast bdzie
mg wyprbowa Pythona.
Kodowanie
znakw
h 107.
25
Mamy wic program, ktry mona uruchomi. Programy w jzyku Python s wykonywane
przez interpreter Pythona, zazwyczaj w oknie konsoli. W systemie Windows konsola nosi
nazw konsola, wiersz polecenia DOS, wiersz polecenia MS-DOS lub podobnie i zwykle
znajduje si w menu Start/Wszystkie programy/Akcesoria. W systemie Mac OS X konsola
jest dostarczana przez narzdzie Terminal.app (domylnie znajduje si w katalogu
Programy/Narzdzia) dostpne poprzez Findera. W pozostaych systemach Unix mona
uy xterm bd konsoli oferowanej przez menedera okien, na przykad konsole bd
gnome-terminal.
Uruchom konsol, nastpnie w systemie Windows wprowad ponisze polecenia
(przyjmujemy zaoenie, e Python zosta zainstalowany w lokalizacji domylnej). Dane
wyjciowe konsoli s przedstawione czcionk o staej szerokoci, natomiast wprowadzane
polecenia zostay pogrubione:
C:\>cd c:\py3eg
C:\py3eg\>c:\python31\python.exe hello.py
Poniewa polecenie cd (change directory, czyli zmie katalog) uywa bezwzgldnej cieki
dostpu, katalog, z poziomu ktrego zostanie uruchomiony program, nie ma adnego
znaczenia.
Uytkownicy systemu Unix wydaj polecenia pokazane poniej (przyjmujemy zaoenie,
e odniesienie do Pythona 3 znajduje si w systemowej ciece PATH)1:
$ cd $HOME/py3eg
$ python3 hello.py
Warto pamita, e jeli nie napisano inaczej, zachowanie jzyka Python w systemie
Mac OS X jest takie samo, jak w kadym innym systemie z rodziny Unix. Moemy wic
przyj, e kiedy uywamy okrelenia Unix, oznacza to system Linux, BSD, Mac OS X
oraz wikszo pozostaych systemw Unix i wywodzcych si z rodziny Unix.
Chocia pierwszy program skada si tylko z jednego polecenia wykonywalnego, po
jego uruchomieniu moemy wycign pewne wnioski dotyczce funkcji print(). Przede
wszystkim funkcja print() jest elementem wbudowanym w jzyk Python w celu jej uycia
nie musimy jej importowa ani docza z biblioteki. Ponadto kady element wywietlany
przez funkcj jest oddzielony pojedyncz spacj, a po wywietleniu ostatniego wstawiany jest
znak nowego wiersza. To jest zachowanie domylne funkcji i jak przekonamy si nieco pniej,
moemy je zmieni. Inn wan informacj dotyczc funkcji print() jest to, e moe
pobiera dowoln ilo argumentw.
Wprowadzanie przedstawionych powyej polece w celu uruchamiania tworzonych
programw w Pythonie bardzo szybko moe okaza si uciliwe. Na szczcie w systemach
zarwno Windows, jak i Unix mona zastosowa znacznie wygodniejsze podejcie.
1
Znak zachty systemu Unix moe by odmienny ni przedstawiony w powyszym przykadzie znak
dolara ($), to nie ma adnego znaczenia.
Funkcja
print()
h 198
26
lub
#!/usr/bin/env python3
Pobieranie
i instalacja
Pythona
19 g
Interakcja midzy uytkownikiem i konsol jest obsugiwana przez program powoka. Rozrnienie midzy
programami konsoli i powoki nie ma tutaj najmniejszego znaczenia, wic oba pojcia s tu uywane zamiennie.
27
28
Nawiasem mwic, druga liczba to 2217 wielko liczb cakowitych w Pythonie jest
ograniczona jedynie przez ilo pamici zainstalowanej w komputerze, a nie przez odgrnie
ustalon liczb bajtw. Cigi tekstowe mog by ujte w cudzysw bd apostrofy, o ile
na obu kocach cigu tekstowego znajduje si ten sam ogranicznik (znak cudzysowu lub
29
30
apostrof). Poniewa Python uywa kodowania znakw Unicode, cigi tekstowe nie s
ograniczone jedynie do zbioru znakw ASCII, co wida wyranie w przedostatnim cigu
tekstowym. Pusty cig tekstowy skada si po prostu z ogranicznikw cigu tekstowego.
W celu uzyskania dostpu do elementu w sekwencji, na przykad w cigu tekstowym,
w Pythonie uywa si nawiasw kwadratowych ([]). Przykadowo: pracujc w powoce
Pythona (albo w interpreterze interaktywnym lub rodowisku IDLE), moemy wprowadzi
ponisze polecenia. Dane wyjciowe powoki Pythona s przedstawione czcionk o staej
szerokoci, natomiast wprowadzane polecenia zostay pogrubione:
>>> "Trudne Czasy"[7]
'C'
>>> "yrafa"[0]
''
Tradycyjnie powoka Pythona jako znaku zachty uywa >>>, cho mona to zmieni.
Skadnia wykorzystujca nawiasy kwadratowe moe by stosowana z elementami danych
bdcymi dowolnego typu sekwencjami, czyli na przykad z cigami tekstowymi bd
listami. Konsekwencja w skadni to jeden z powodw, dla ktrych jzyk Python jest tak pikny.
Warto zwrci uwag, e wszystkie pozycje indeksu w Pythonie rozpoczynaj si od zera.
W Pythonie zarwno str, jak i podstawowe typy liczbowe, na przykad int,
s niemodyfikowalne to znaczy, e raz ustalona warto nie moe by zmieniona.
W pierwszej chwili wydaje si, e to dziwne ograniczenie, ale skadnia Pythona powoduje,
e w praktyce nie stanowi ono adnego problemu. Jedynym powodem, dla ktrego
wspominamy o nim tutaj, jest to, e chocia skadni nawiasw kwadratowych mona uy
do pobrania znaku z pozycji o wskazanym indeksie w cigu tekstowym, to nie mona jej
wykorzysta do ustawienia nowego znaku. (Warto zwrci uwag, e w Pythonie znak
jest po prostu cigiem tekstowym o dugoci 1).
Aby przekonwertowa element danych z jednego typu na inny, mona uy skadni
w postaci typ_danych(element), na przykad:
>>> int("45")
45
>>> str(912)
'912'
Typ konwersji int() jest tolerancyjny, jeli chodzi o znaki odstpu umieszczone
przed lub po elemencie, tak wic polecenie int(" 45 ") rwnie dziaa doskonale. Typ
konwersji str() moe by zastosowany wobec niemal dowolnego elementu danych. Jak si
przekonamy w rozdziale 6., bardzo atwo moemy utworzy wasny typ danych obsugujcy
konwersj str(), jak rwnie konwersj int() i kad inn, o ile ma to sens. Jeeli konwersja
zakoczy si niepowodzeniem, wtedy zostanie zgoszony wyjtek obsuga bdw bdzie
pokrtce omwiona w koncepcji 5. Pene omwienie wyjtkw znajduje si w rozdziale 4.
Cigi tekstowe i liczby cakowite zostay szczegowo omwione w rozdziale 2.
wraz z innymi wbudowanymi typami danych oraz wybranymi typami danych
dostpnymi w bibliotece standardowej Pythona. W rozdziale 2. przedstawiono take operacje,
ktre mona wykona wzgldem niemodyfikowalnych sekwencji, takich jak cigi tekstowe.
31
Kopiowanie
pytkie
i gbokie
h 164
x = "niebieski"
y = "zielony"
z = x
Identyfikatory i sowa
kluczowe
h 65
32
przez Unicode. Zawieraj wic zestaw ASCII, cho nie musz by ograniczone jedynie
do liter i cyfr ASCII (a, b, , z, A, B, , Z, 0, 1, , 9). Identyfikatory
Pythona rozrniaj wielko liter, wic LIMIT, Limit i limit to trzy rne identyfikatory.
Szczegowe omwienie identyfikatorw oraz pewne nieco egzotyczne przykady zostay
przedstawione w rozdziale 2.
Python stosuje dynamiczn kontrol typu, co oznacza, e w dowolnej chwili
odniesienie do obiektu moe by doczone do innego obiektu, ktry z kolei moe by
obiektem innego typu danych. Jzyki stosujce cis kontrol typu (na przykad C++
i Java) pozwalaj na wykonanie jedynie tych operacji, ktre zostay zdefiniowane
w uywanym typie danych. Python take stosuje wymienione ograniczenie, ale w przypadku
Pythona nie nazywamy tego cis kontrol typu, poniewa dopuszczalne operacje mog
ulega zmianie na przykad jeli odniesienie do obiektu zostanie ponownie utworzone
i doczone do obiektu innego typu danych. Przykadowo:
droga = 866
print(droga, type(droga)) # dane wyjciowe: 866 <class 'int'>
droga = "Pnoc"
print(droga, type(droga)) # dane wyjciowe: Pnoc <class 'str'>
Funkcja
insin
stance()
h 260
33
>>> x = "niebieski"
>>> y = "zielony"
>>> z = x
>>> x
'niebieski'
>>> x, y, z
('niebieski', 'zielony', 'niebieski')
Typ
danych
tuple
h 124
Tworzenie
i wywoywanie funkcji
h 51
34
Jednym ze sposobw utworzenia listy jest uycie nawiasw kwadratowych ([]) jak
pokazano na powyszym przykadzie. W dalszej czci ksiki zostan przedstawione
inne sposoby. Wiersz czwarty pokazuje pust list.
Wewntrznie listy i krotki w ogle nie przechowuj elementw danych, a raczej
odniesienia do obiektw. W trakcie tworzenia listy bd krotki (oraz podczas wstawiania
elementw w przypadku listy) kopiuj one odniesienia do podanych obiektw. W przypadku
dosownych elementw, na przykad liczb cakowitych i cigw tekstowych, w pamici
tworzony jest obiekt odpowiedniego typu danych i pniej jest on inicjalizowany.
Nastpnie tworzone jest odniesienie do tego obiektu i to utworzone odniesienie zostaje
umieszczone w krotce bd na licie.
Podobnie jak w przypadku pozostaych konstrukcji Pythona, rwnie kolekcje typw
danych s obiektami. Istnieje wic moliwo zagniedania jednej kolekcji typu danych w
innej, na przykad w celu utworzenia listy zawierajcej inne listy. W pewnych sytuacjach fakt,
e listy, krotki i wikszo pozostaych kolekcji typw danych Pythona przechowuje
odniesienia do obiektw zamiast obiektw, powoduje rnic zostanie to omwione
w rozdziale 3.
W programowaniu proceduralnym wywoujemy funkcje i czsto przekazujemy elementy
danych jako argumenty. Przykadowo widzielimy ju w dziaaniu funkcj print(). Inna
czsto uywana funkcja Pythona to len(), ktra jako argument pobiera pojedynczy element
danych. Wartoci zwrotn funkcji jest dugo elementu podana jako obiekt int. Poniej
przedstawiono kilka wywoa funkcji len():
Typ
danych list
h 129
Kopiowanie
pytkie
i gbokie
h 164
>>> len(("jeden",))
1
>>> len([3, 5, 1, 2, "pauza", 5])
6
>>> len("automatycznie")
13
Krotki, listy oraz cigi tekstowe maj ustalon wielko, to znaczy s typami danych,
ktre musz mie podan wielko. Elementy takiego typu danych mog by bez
problemw przekazane funkcji len(). (W przypadku przekazania funkcji len() elementu
danych bez ustalonej wielkoci nastpuje zgoszenie wyjtku).
Wszystkie elementy danych Pythona s obiektami (nazywane s rwnie egzemplarzami)
okrelonego typu danych (nazywanego take klas). Poj typ danych i klasa bdziemy
uywa zamiennie. Jedn z istotnych rnic midzy obiektem i zwykym elementem danych
dostarczanym przez niektre jzyki (na przykad C++ lub wbudowane typy liczbowe
Javy) pozostaje to, e obiekt moe mie metody. Oglnie rzecz biorc, metoda to po prostu
funkcja, ktra jest wywoywana dla okrelonego obiektu. Przykadowo typ list ma
metod append(), ktra umoliwia doczenie obiektu do listy w nastpujcy sposb:
>>> x = ['zebra', 49, -879, 'mrwnik', 200]
>>> x.append("wicej")
>>> x
['zebra', 49, -879, 'mrwnik', 200, 'wicej']
Klasa
Sized
h 397
Obiekt x wie, e jest typu list (w Pythonie wszystkie obiekty znaj swj typ
danych), tak wic nie ma potrzeby wyranego wskazywania typu danych. W implementacji
metody append() pierwszym argumentem jest sam obiekt x przekazanie tego obiektu
jest przeprowadzane automatycznie przez Pythona jako cz syntaktycznej obsugi metod.
Metoda append() mutuje, czyli zmienia pocztkow list. Jest to moliwe, poniewa
listy s elementami zmiennymi. Zwaszcza w przypadku bardzo dugich list jest to take
potencjalnie znacznie efektywniejsze rozwizanie ni tworzenie nowej listy zawierajcej
pocztkowe elementy, dodanie nowych elementw, ponowne doczenie nowej listy do
odniesienia do obiektu.
W jzyku proceduralnym ten sam efekt mona uzyska, stosujc metod append()
listy, jak przedstawiono poniej (to zupenie prawidowa skadnia Pythona):
>>> list.append(x, "ekstra")
>>> x
['zebra', 49, -879, 'mrwnik', 200, 'wicej', 'ekstra']
Tutaj podajemy typ danych oraz metod typu danych. Ponadto jako pierwszy
argument przekazujemy element danych tego typu danych, ktrego chcemy uy w metodzie,
a nastpnie dowoln liczb argumentw dodatkowych. (W przypadku dziedziczenia
istnieje subtelna rnica semantyczna midzy dwiema przedstawionymi skadniami.
W praktyce najczciej spotykana jest pierwsza forma. Dziedziczenie zostanie omwione
w rozdziale 6.).
Jeeli czytelnik nie zna programowania zorientowanego obiektowo, w pierwszej chwili
powysze informacje mog mu wydawa si nieco dziwne. Na chwil obecn naley
zaakceptowa fakt, e Python ma funkcje konwencjonalne wywoywane w postaci
nazwa_funkcji(argumenty) oraz metody wywoywane w postaci nazwa_obiektu.nazwa_
metody(argumenty). (Programowanie zorientowane obiektowo zostanie omwione
w rozdziale 6.).
Operator kropki (atrybut dostpu) jest uywany w celu uzyskania dostpu do
atrybutw obiektu. Wspomniany atrybut moe by dowolnego typu obiektem, chocia jak
dotd widzielimy jedynie atrybuty metod. Poniewa atrybut moe by obiektem
posiadajcym atrybuty, ktre z kolei mog mie swoje atrybuty itd., istnieje moliwo uycia
tylu operatorw kropki, ilu potrzeba w celu uzyskania dostpu do danego atrybutu.
Typ list posiada wiele innych metod, midzy innymi insert(), ktra jest uywana
w celu wstawiania elementu we wskazanej pozycji indeksu. Z kolei metoda remove() usuwa
element znajdujcy si we wskazanej pozycji indeksu. Jak ju wczeniej wspomniano,
indeksy Pythona zawsze rozpoczynaj si od zera.
Wczeniej widzielimy, e istnieje moliwo pobierania znakw z cigu tekstowego
za pomoc operatora w postaci nawiasw kwadratowych. Wspomniano take, e wymieniony
operator moe by uywany w dowolnej sekwencji. Poniewa listy s sekwencjami, wic
bez problemu moemy wykona przedstawione poniej polecenia:
>>> x
['zebra', 49, -879, 'mrwnik', 200, 'wicej', 'ekstra']
>>> x[0]
35
36
'zebra'
>>> x[4]
200
Krotki rwnie s sekwencjami, jeli wic zmienna x byaby krotk, moglibymy pobra
jej elementy, uywajc skadni nawiasw kwadratowych w dokadnie taki sam sposb,
jak w przypadku listy x. Jednak poniewa listy mona zmienia (w przeciwiestwie
do niezmiennych cigw tekstowych i krotek), w celu ustawienia elementw listy te
moemy uy operatora nawiasw kwadratowych. Przykadowo:
>>> x[1] = "czterdzieci dziewi"
>>> x
['zebra', czterdzieci dziewi, -879, 'mrwnik', 200, 'wicej', 'ekstra']
Operator tosamoci
Poniewa wszystkie zmienne Pythona tak naprawd s odniesieniami do obiektw,
czasami sensowne jest sprawdzenie, czy dwa bd wiksza liczba odniesie odwouje si
do tego samego obiektu. Operator is to operator dwuargumentowy zwracajcy warto
True, jeli odniesienie do obiektu znajdujce si po lewej stronie operatora odwouje si
do tego samego obiektu, do ktrego odwouje si odniesienie po prawej stronie operatora.
Poniej przedstawiono kilka przykadw:
>>> a
>>> b
>>> a
False
>>> b
>>> a
True
= ["Retencja", 3, None]
= ["Retencja", 3, None]
is b
= a
is b
Operatory porwnania
Python oferuje standardowy zestaw binarnych operatorw porwnania charakteryzujcych
si oczekiwan semantyk: < mniejszy ni, <= mniejszy ni lub rwny, == rwny, != nierwny,
>= wikszy ni lub rwny oraz > wikszy ni. Wymienione operatory porwnuj wartoci
obiektw, to znaczy obiektw, do ktrych odniesienia zostay wskazane w operatorze.
Poniej przedstawiono kilka przykadw wprowadzonych w powoce Pythona:
>>> a = 2
>>> b = 6
>>> a == b
False
>>> a < b
True
>>> a <= b, a != b, a >= b, a > b
(True, True, False, False)
37
38
False
>>> a == b
True
Chocia a i b to rne obiekty (maj odmienne tosamoci), to posiadaj takie same wartoci,
wic w trakcie porwnywania s uznawane za takie same. Trzeba jednak zachowa ostrono,
poniewa w celu przedstawienia cigu tekstowego Python uywa kodowania znakw Unicode.
Dlatego te porwnywanie cigw tekstowych zawierajcych znaki wykraczajce poza
zbir znakw ASCII moe by nieco odmienne i bardziej skomplikowane, ni si wydaje
w pierwszej chwili to zagadnienie zostanie dokadnie omwione w rozdziale 2.
W pewnych sytuacjach porwnywanie tosamoci dwch cigw tekstowych bd
liczb na przykad uycie polecenia a is b spowoduje wygenerowanie wartoci zwrotnej
True, nawet jeli kady element zosta przypisany oddzielnie jak w omawianym przypadku.
Wynika to z faktu, e pewne implementacje Pythona bd ponownie uyway tego samego
obiektu (poniewa warto pozostaje taka sama, a obiekt jest niezmienny) w celu zwikszenia
wydajnoci. Mora jest taki, aby podczas porwnywania wartoci stosowa operatory == i !=.
Z kolei operatory is i is not stosowa jedynie w trakcie porwnywania z obiektem None,
ewentualnie jeli naprawd zachodzi potrzeba sprawdzenia, czy dwa odniesienia do
obiektw a nie ich wartoci s takie same.
Jedn ze szczeglnie uytecznych cech operatorw porwnania w Pythonie jest moliwo
ich czenia, na przykad:
Porwnywanie
cigw
tekstowych
h 83
>>> a = 9
>>> 0 <= a <= 10
True
Kiedy nastpuje zgoszenie wyjtku, ktry nie jest obsuony, Python wywietla
komunikaty dotyczce ostatnich wywoa (traceback) wraz z komunikatem bdu wyjtku.
W celu zachowania przejrzystoci w powyszym przykadzie usunito komunikaty dotyczce
ostatnich wywoa, zastpujc je wielokropkiem3. Ten sam wyjtek TypeError wystpi,
3
Komunikat dotyczcy ostatnich wywoa traceback (czasem nazywany backtrace) to lista wszystkich
wywoa wykonanych od pocztku wywoania stosu a do chwili wystpienia nieobsuonego wyjtku.
Obsuga
bdw
powstaych
w trakcie
dziaania
programu
h 430
jeli wydamy polecenie "3" < 4, gdy Python nie prbuje odgadn naszych intencji.
Odpowiednim podejciem jest albo przeprowadzenie wyraniej konwersji na przykad
int("3") < 4, albo uycie moliwych do porwnania typw danych, to znaczy dwch
liczb cakowitych lub dwch cigw tekstowych.
Jzyk Python znacznie uatwia tworzenie wasnych typw danych, ktre bd
doskonale si integroway z istniejcymi. Przykadowo: moemy utworzy wasny liczbowy
typ danych, ktry nastpnie bdzie mona stosowa w operacji porwnania z wbudowanym
typem int, a take innymi wbudowanymi bd utworzonymi liczbowymi typami
danych. Nie bdzie jednak moliwe porwnywanie go z cigami tekstowymi lub innymi
nieliczbowymi typami danych.
Operator przynalenoci
W przypadku typw danych bdcych sekwencjami bd kolekcjami, takimi jak cigi
tekstowe, listy i krotki, przynaleno elementu mona sprawdzi za pomoc operatora in,
natomiast brak przynalenoci za pomoc operatora not in. Przykadowo:
>>> p = (4, "aba", 9, -33, 9, 2)
>>> 2 in p
True
>>> "pies" not in p
True
Operatory logiczne
Jzyk Python oferuje trzy operatory logiczne: and, or i not. Zarwno and, jak i or uywaj
logiki warunkowej i zwracaj w wyniku operand, ktry determinuje wynik nie zwracaj
wartoci boolowskiej (o ile operand faktycznie nie bdzie typu boolowskiego). Zobaczmy,
co to oznacza w praktyce:
>>>
>>>
>>>
>>>
pi = 5
dwa = 2
zero = 0
pi and dwa
39
Alternatywa
w postaci
typu
danych
FuzzyBool
h 268
40
2
>>> dwa and pi
5
>>> pi and zero
0
nic = 0
pi or dwa
dwa or pi
zero or pi
zero or nic
Koncepcja 5.
polecenia kontroli przepywu programu
Wczeniej wspomniano, e polecenia napotkane w pliku .py zostaj wykonane po kolei,
poczwszy od pierwszego wiersza i dalej wiersz po wierszu. Kontrola nad przepywem
programu moe by zmieniona przez wywoanie funkcji bd metody lub struktur
kontroln, tak jak polecenie warunkowe lub ptla. Kontrola nad przepywem programu
jest zmieniana take po zgoszeniu wyjtku.
W tej sekcji skoncentrujemy si na poleceniu if Pythona, podczas gdy ptle while i for
oraz funkcje zostan omwione w koncepcji 8., natomiast metody w rozdziale 6. Przedstawimy
take bardzo prost obsug wyjtkw. Szczegowe omwienie tego zagadnienia znajduje
si w rozdziale 4. Jednak w pierwszej kolejnoci naley wyjani kilka poj.
Wyraenie boolowskie to dowolne wyraenie, ktrego obliczenie daje w wyniku
warto boolowsk (czyli True lub False). W jzyku Python takie wyraenie przyjmuje
warto False, jeli jest predefiniowan sta False, obiektem specjalnym None, pust
sekwencj bd kolekcj (na przykad pusty cig tekstowy, lista lub krotka) lub liczbowym
typem danych o wartoci 0. Wszystko pozostae jest uznawane za True. Kiedy tworzymy
wasny typ danych (na przykad jak w rozdziale 6.), istnieje moliwo samodzielnego
ustalenia, jaka ma by warto zwrotna danego typu w kontekcie boolowskim.
W jzyku Python blok kodu, to znaczy sekwencja jednego bd wikszej liczby polece,
nosi nazw pakietu. Poniewa pewne elementy skadni Pythona wymagaj obecnoci
pakietu, Python dostarcza sowo kluczowe pass, ktre jest poleceniem niewykonujcym
adnego dziaania. Dlatego te moe by uyte wszdzie tam, gdzie wymagany bdzie pakiet
(ewentualnie jeli chcemy wskaza, e rozwaamy dany przypadek), ale nie zachodzi potrzeba
przeprowadzania jakiegokolwiek przetwarzania.
Polecenie if
Oglna skadnia polecenia if w Pythonie jest nastpujca4:
if wyraenie_boolean1:
pakiet1
elif wyraenie_boolean2:
pakiet2
...
elif wyraenie_booleanN:
pakietN
else:
pakiet_else
W bloku instrukcji if moe by zero lub wiksza liczba klauzul elif, natomiast ostatnia
klauzula else jest opcjonalna. Jeeli chcemy uwzgldni okrelon sytuacj, ale nie trzeba
wykonywa adnych dziaa w przypadku jej wystpienia, wtedy mona uy sowa
kluczowego pass jako pakietu dla tej sytuacji.
Pierwsz rzecz rzucajc si w oczy programistom C++ lub Javy jest brak nawiasw
okrgych i klamrowych. Kolejn jest obecno dwukropka (:). Na pocztku bardzo atwo
zapomnie o tej czci skadni. Dwukropki s uywane wraz z klauzulami else i elif oraz
w kadym innym miejscu, do ktrego przechodzi pakiet.
W przeciwiestwie do wikszoci innych jzykw programowania, do wskazania
struktury bloku Python stosuje wcicia. Niektrzy programici nie lubi takiego rozwizania,
zwaszcza jeli wczeniej nie prbowali go stosowa, i podchodz do sprawy do
emocjonalnie. Jednak przywyknicie do tego rozwizania zabiera kilka dni, a po upywie
kilku tygodni bd miesicy kod pozbawiony nawiasw klamrowych wydaje si
przyjemniejszy i atwiejszy w odczycie ni kod stosujcy takie nawiasy.
Poniewa pakiety s wskazywane za pomoc wci, oczywiste jest, e rodzi si pytanie
w stylu jakiego rodzaju wcicia?. Dokumentacja Pythona zaleca stosowanie czterech spacji
(tylko spacji, adnych tabulatorw) na kady poziom wcicia. Wikszo nowoczesnych
edytorw tekstowych pozwala na ustawienie automatycznej obsugi wci. (Edytor rodowiska
IDLE oczywicie posiada tak funkcj, podobnie jak wikszo innych edytorw przeznaczonych
do tworzenia kodu w jzyku Python). Python bdzie dziaa bez problemu z dowoln liczb
spacji, tabulatorw lub pocze obu, zakadajc, e uyte wcicia zachowaj spjno.
W niniejszej ksice stosujemy oficjalne zalecenie dla jzyka Python.
41
42
W tym przypadku, jeeli warto wyraenia (x) bdzie wynosia True, nastpi wykonanie
pakietu (wywoanie funkcji print()).
if wiersze < 1000:
print("may")
elif wiersze < 10000:
print("redni")
else:
print("duy")
Powyej przedstawiono nieco bardziej zoone polecenie if, ktre wywietla sowo
opisujce warto zmiennej wiersze.
Polecenie while
Polecenie while jest uywane w celu wykonania pakietu dowoln liczb razy, cho moe
wystpi sytuacja, w ktrej pakiet w ogle nie zostanie wykonany. Ilo powtrze zaley
od stanu wyraenia boolowskiego w ptli while. Poniej przedstawiono skadni polecenia
while:
while wyraenie_boolean:
pakiet
43
Polecenie for in
Ptla for w Pythonie ponownie uywa sowa kluczowego in (ktre w innym kontekcie
jest operatorem przynalenoci) i posiada nastpujc skadni:
for zmienna in iteracja:
pakiet
Ptla for podobnie jak ptla while obsuguje polecenia break i continue, a take
opcjonaln klauzul else. Czci zmienna zostaje po kolei przypisane odniesienie do kadego
obiektu w czci iteracja. Wymieniona iteracja to dowolny typ danych, przez ktry
mona przej obejmuje midzy innymi cigi tekstowe (tutaj iteracja nastpuje znak
po znaku), listy, krotki oraz inne kolekcje typw danych Pythona.
for kraj in ["Dania", "Finlandia", "Norwegia", "Szwecja"]:
print(kraj)
Listy
skadane
h 135
44
pakiet1_exception
...
except wyjtekN as zmiennaN:
pakiet_exceptionN
Obsuga
bdw
powstaych
w trakcie
dziaania
programu
h 430
45
a = 5
a
a += 8
a
Operatory
liczbowe
oraz funkcje
h 70
46
Podobnie jak liczby cakowite, tak i cigi tekstowe s niezmienne, wic w trakcie
uywania operatora += nastpuje utworzenie nowego cigu tekstowego i ponownie doczenie
do niego obiektu znajdujcego si po lewej stronie operatora. Przebiega to dokadnie w taki
sam sposb, jaki wczeniej omwiono dla obiektw int. Listy s obsugiwane przez tak
sam skadni, ale w tle zachowuj si nieco inaczej:
>>> ziarna = ["sezam", "sonecznik"]
>>> ziarna += ["dynia"]
>>> ziarna
['sezam', 'sonecznik', 'dynia']
47
Obsuga
bdw
powstaych
w trakcie
dziaania
programu
h 430
48
liczba cakowita: 7
liczba cakowita: 1x
invalid literal for int() with base 10: '1x'
liczba cakowita: 15
liczba cakowita: 5
liczba cakowita:
ilo = 4 suma = 39 rednia = 9.75
Chocia program jest bardzo krtki, to pozostaje cakiem solidny. Jeeli uytkownik
wprowadzi cig tekstowy, ktry nie moe by skonwertowany na liczb cakowit, problem
zostanie wychwycony przez procedur obsugi bdw. Wspomniana procedura wywietli
odpowiedni komunikat bdu, a kontrola nad programem bdzie przekazana na pocztek
ptli (kontynuacja wykonywania ptli). W ostatnim poleceniu if upewniamy si,
e uytkownik w ogle nie poda adnej liczby wtedy nie zostan wywietlone adne
dane wyjciowe w tym kroku i unikniemy operacji dzielenia przez zero.
Pene omwienie tematu obsugi plikw zostanie przedstawione w rozdziale 7. W tej chwili
bdziemy tworzy pliki poprzez przekierowanie danych wyjciowych funkcji print()
z konsoli, na przykad:
C:\test.py > wynik.txt
Bd
dotyczcy
powiza
plikw
w Windows
26 g
49
50
number = int(line)
total += number
count += 1
except ValueError as err:
print(err)
continue
except EOFError:
break
if count:
print("ilo =", licznik, "suma =", suma, "rednia =", suma / licznik)
Po wydaniu polecenia sum2.py < data\sum2.dat (gdzie sum2.dat oznacza plik znajdujcy
si w podkatalogu data i zawierajcy liczby, po jednej liczbie w kadym wierszu) dane
wyjciowe wywietlone w konsoli przedstawiaj si nastpujco:
Podaj liczby cakowite, po kadej nacinij klawisz Enter. Aby zakoczy dziaanie programu,
nacinij klawisze ^D lub ^Z.
ilo = 37 suma = 1839 rednia = 49.7027027027
W programie wprowadzono wiele drobnych zmian, tak aby dziaa prawidowo zarwno
w trybie interaktywnym, jak i podczas przekierowania. Przede wszystkim zmieniono
sposb przerwania z pustego wiersza na znak EOF (Ctrl+D w systemie Unix, Ctrl+Z,
Enter w Windows). Dziki tej zmianie program dziaa solidniej podczas obsugi plikw
z danymi wejciowymi, ktre zawieraj puste wiersze. Zaniechalimy take wywietlania
znaku zachty do wprowadzenia kadej liczby, poniewa nie ma to sensu podczas stosowania
przekierowania. Ponadto uylimy pojedynczego bloku try wraz z dwiema procedurami
obsugi bdw.
Warto zwrci uwag, e jeli zostanie wprowadzona nieprawidowa liczba cakowita
(za porednictwem klawiatury albo w wyniku wystpienia zego wiersza danych w pliku
dostarczajcym danych wejciowych), konwersja int() zgosi wyjtek ValueError. Oznacza to,
e w takim przypadku nie nastpi zwikszenie wartoci ani zmiennej suma, ani zmiennej
licznik. Takiego zachowania programu oczekujemy.
W powyszym kodzie moglibymy zastosowa take dwa oddzielne bloki try suce
do obsugi wyjtkw:
while True:
try:
line = input()
if line:
try:
number = int(line)
except ValueError as err:
print(err)
continue
total += number
count += 1
except EOFError:
break
51
Powysza funkcja pobiera tylko jeden argument o nazwie liczba. Wewntrz ptli while
uytkownik jest proszony o podanie liczby cakowitej. Jeeli wprowadzi inne dane, wwczas
zostanie zgoszony wyjtek ValueError, nastpi wywietlenie komunikatu bdu i ponowne
wykonanie ptli. Po wprowadzeniu liczby cakowitej zostanie ona zwrcona wywoujcemu
funkcj. Poniej pokazano przykad wywoania tej funkcji:
wiek = pobierz_liczbe("Podaj swj wiek: ")
Polecenie
return
h 191.
52
Chocia tworzenie wasnych funkcji moe przynosi wiele satysfakcji, w wielu przypadkach
nie jest konieczne. Wynika to z faktu, e Python dostarcza wielu wbudowanych funkcji,
a jeszcze wiksza liczba funkcji w moduach znajduje si w bibliotece standardowej jzyka.
Dlatego te wymagana przez programist funkcja moe ju istnie.
Modu w jzyku Python to po prostu plik .py zawierajcy kod Pythona, na przykad
definicj wasnej funkcji lub klasy (wasny typ danych) oraz czasami zmienne. W celu
uzyskania dostpu do funkcjonalnoci zawartej w module naley go zaimportowa,
na przykad:
import sys
W celu zaimportowania moduu uywamy polecenia import wraz z nazw pliku .py,
ale pomijamy rozszerzenie pliku5. Po zaimportowaniu moduu mona uzyska dostp
do dowolnej funkcji, klasy lub zmiennej zawartej w tym module, na przykad:
print(sys.argv)
Operator
kropki (.)
35 g
Modu sys zawiera zmienn argv lista, gdzie pierwszy element to nazwa, pod jak
zostaje wywoany program, natomiast element drugi i kolejne to argumenty programu
uruchamianego z poziomu wiersza polece. Dwa powysze wiersze kodu skadaj si
na cay program echoargs.py. Jeeli program zostanie uruchomiony z poziomu wiersza
polece echoargs.py -v, wwczas w konsoli wywietli ['echoargs.py', '-v']. (W systemie
z rodziny Unix pierwszy wpis moe mie posta './echoargs.py').
Oglnie rzecz biorc, skadnia uywania funkcji pochodzcej z moduu jest nastpujca:
nazwa_moduu.nazwa_funkcji(argumenty). Wymieniona skadnia wykorzystuje operator
kropki (atrybut dostpu) przedstawiony w koncepcji 3. Biblioteka standardowa zawiera
du ilo moduw, wiele z nich bdzie wykorzystanych w niniejszej ksice. Nazwy
wszystkich moduw standardowych s zapisane maymi literami, wic niektrzy programici
stosuj nazwy, w ktrych pierwsza litera kadego sowa jest wielka (na przykad Moj_Modul),
w celu odrnienia moduw wasnych od wbudowanych.
Spjrzmy na jeszcze jeden przykad modu random (w bibliotece standardowej plik
random.py), ktry dostarcza wielu uytecznych funkcji:
import random
x = random.randint(1, 6)
y = random.choice(["jabko", "banan", "winia", "durian"])
Wiersz
shebang
(#!)
27 g
Moduy sys, podobnie jak inne moduy wbudowane oraz moduy zaimplementowane w jzyku C, niekoniecznie
maj odpowiadajce im pliki .py. S jednak uywane w taki sam sposb, jak moduy posiadajce pliki .py.
Przykady
Przykady
W poprzednim podrozdziale czytelnicy mogli pozna jzyk Python wystarczajco, aby zacz
tworzy rzeczywiste programy. W tym podrozdziale mona si bdzie zapozna z dwoma
penymi programami wykorzystujcymi jedynie te konstrukcje Pythona, ktre omwiono do
tej chwili. Bdzie to zarwno pomocne w utrwaleniu zdobytej dotd wiedzy, jak rwnie
pokae moliwoci jzyka.
W kolejnych podrozdziaach czytelnicy bd mogli poznawa coraz bardziej jzyk
Python i jego bibliotek. Pozwoli to na tworzenie bardziej treciwych i solidniejszych
programw ni przedstawione w tym podrozdziale. Najpierw naley jednak pozna podstawy,
na bazie ktrych pniej bdziemy tworzy programy.
bigdigits.py
Pierwszy z omawianych programw jest do krtki, ale zawiera pewne ciekawe aspekty,
midzy innymi list list. Oto sposb dziaania programu: na podstawie liczby podanej
w wierszu polecenia program wywietla w konsoli t sam liczb, uywajc do tego
duych cyfr.
W miejscach, gdzie dua liczba uytkownikw korzysta z tej samej drukarki o ogromnej
szybkoci dziaania, czsto spotykan praktyk jest to, e kady wydruk danego uytkownika
jest poprzedzony stron tytuow zawierajc nazw danego uytkownika oraz pewne
inne informacje wydrukowane za pomoc omawianej tu techniki.
Kod programu bdzie omwiony w trzech czciach: polecenie import, tworzenie
list przechowujcych dane uywane przez program oraz waciwe przetwarzanie
danych. Jednak w pierwszej kolejnoci zobaczmy, jak wyglda przykadowe uruchomienie
programu:
bigdigits.py
*
*
**
**
* *
*
* *
*
******
*
*
*
*
***
41072819
***
*****
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
***
*
***
*
*
* *
*
*
*
*****
***
*
*
***
*
*
*
*
***
*
*
*
****
**
*
*
* * *
*
****
*
*
*
*
***
*
53
54
Szczegem, na ktry warto zwrci uwag, jest to, e lista cigw tekstowych Zero
zostaa rozcignita w wielu wierszach. Polecenia Pythona zazwyczaj stanowi pojedynczy
wiersz, ale mog rozciga si na wiele wierszy, jeli s wyraeniem umieszczonym
w nawiasach, list, zestawem, dosownym sownikiem, list argumentw wywoania funkcji
bd wielowierszowym poleceniem, w ktrym kady znak koczcy wiersz poza ostatnim
jest poprzedzony lewym ukonikiem (\). We wszystkich wymienionych przypadkach
liczba wierszy nie ma znaczenia, podobnie jak wcicia dla drugiego i kolejnego wiersza.
Kada lista przedstawiajca cyfr ma siedem cigw tekstowych, wszystkie o staej
szerokoci, cho ta szeroko jest rna dla kadej z cyfr. Listy pozostaych cyfr stosuj
ten sam wzorzec, ktrego uyto dla cyfry 0. Zostay jednak zapisane w sposb zajmujcy
jak najmniej miejsca, a nie w sposb gwarantujcy najwiksz czytelno dla programisty:
One = [" * ", "** ", " * ", " * ", " * ", " * ", "***"]
Two = [" *** ", "*
*", "* * ", " * ", " * ", "*
# ...
Nime = [" ****", "*
*", "*
*", " ****", "
*", "
", "*****"]
*", "
*"]
Istnieje take moliwo bezporedniego utworzenia listy Digits i dziki temu uniknicia
potrzeby tworzenia dodatkowych zmiennych, na przykad:
Digits = [
["
***
", " * * ", "* *", "* *", "* *",
" * * "," *** "],# Zero
[" * ", "** ", " * ", " * ", " * ", " * ", "***"], # One
# ...
[" ****", "*
*", "*
*", " ****", "
*", "
"
*"] # Nine
]
*",
Preferujemy jednak uycie oddzielnej zmiennej dla kadej cyfry zarwno w celu
uatwienia zrozumienia programu, jak rwnie dlatego, e zastosowanie zmiennych jest
bardziej eleganckie.
Pozostaa cz kodu zostaje przedstawiona w pojedynczym bloku, aby czytelnik mg
sprbowa okreli sposb jego dziaania, zanim przejdziemy do omwienia tego kodu.
try:
digits = sys.argv[1]
row = 0
while row < 7:
line = ""
column = 0
Typ
danych set
h 138
Typ
danych dict
h 143
Przykady
55
Funkcja
range()
h 158
56
generate_grid.py
Jedna z czsto wystpujcych potrzeb to wygenerowanie danych testowych. Nie ma jednego,
oglnego programu sucego do tego celu, poniewa dane testowe kolosalnie si midzy
sob rni. Jzyk Python jest czsto uywany do generowania danych testowych, poniewa
tworzenie i modyfikowanie programw w Pythonie jest bardzo proste. W tej sekcji omwimy
program sucy do generowania siatki losowych liczb cakowitych. Uytkownik podaje
liczb wierszy i kolumn, ktre chce otrzyma, oraz zakres, w jakim maj znajdowa si
wygenerowane liczby. Prac nad programem rozpoczniemy od spojrzenia na wynik
przykadowego uruchomienia programu:
generate_grid.py
wiersze: 4x
invalid literal for int() with base 10: '4x'
wiersze: 4
kolumny: 7
minimum (lub nacinij Enter dla 0): -100
maximum (lub nacinij Enter dla 1000):
643
-45
923
252
625
342
543
128
35
954
540
691
361
941
233
347
520
302
676
408
-92
461
1000
319
372
134
940
-7
52 g
Przykady
Funkcja get_int() bardzo uatwia pobranie liczby wierszy, kolumn oraz wartoci
minimalnej oczekiwanej przez uytkownika. W przypadku wierszy i kolumn warto
domylna wynosi None, co oznacza, e uytkownik musi poda liczb cakowit. W przypadku
minimum ustalon wartoci domyln jest 0, natomiast dla maksimum ustalon wartoci
domyln jest 1000 lub dwukrotna warto minimum, jeli minimum jest wiksze bd
rwne 1000.
Jak ju wspomniano w poprzednim przykadzie, lista argumentw wywoania funkcji
moe rozciga si na dowoln liczb wierszy, a wcicia s nieistotne w przypadku drugiego
i kolejnych wierszy.
Gdy znana jest ju liczba wierszy i kolumn wymaganych przez uytkownika oraz wartoci
minimalna i maksymalna generowanych liczb, mona przystpi do waciwego przetwarzania
danych.
row = 0
while row < rows:
line = ""
57
58
column = 0
while column < columns:
i = random.randint(minimum, maximum)
s = str(i)
while len(s) < 10:
s = " " + s
line += s
column += 1
print(line)
row += 1
Podsumowanie
Czytajc rozdzia, mona si byo dowiedzie, jak edytowa i uruchamia programy
w jzyku Python. Przeanalizowalimy kilka maych, cho kompletnych programw. Jednak
wikszo miejsca w rozdziale powicono na omwienie omiu kluczowych koncepcji
Piknego serca Pythona wystarczajcej liczby konstrukcji jzyka, ktre pozwalaj
na tworzenie rzeczywistych programw.
Zaczlimy od przedstawienia dwch podstawowych typw danych, czyli int i str.
Dosowne liczby cakowite s zapisywane w dokadnie taki sam sposb, jak w wikszoci
innych jzykw programowania. Natomiast dosowne cigi tekstowe s ujmowane albo
w apostrofy, albo w cudzysw. Nie ma to adnego znaczenia, o ile po obu stronach cigu
tekstowego zastosowano te same znaki ograniczenia (tzn. apostrofy lub cudzysw). Istnieje
moliwo przeprowadzenia konwersji midzy liczbami cakowitymi i cigami tekstowymi,
na przykad int("250") i str(125). Jeeli konwersja liczby cakowitej koczy si
niepowodzeniem, nastpuje zgoszenie wyjtku ValueError. Z drugiej strony, warto pamita,
e niemal wszystko mona przekonwertowa na posta cigu tekstowego.
Metoda
str.format()
h 95
Podsumowanie
Cig tekstowy jest sekwencj, wic funkcje i operacje, ktre mona wykonywa
na sekwencjach, mog take by przeprowadzane na cigu tekstowym. Przykadowo dostp
do okrelonego znaku mona uzyska za pomoc operatora dostpu ([]), czenie cigw
tekstowych umoliwia operator +, natomiast doczanie jednego cigu tekstowego do innego
operator +=. Poniewa cigi tekstowe s niezmienne, to w tle operacja doczania powoduje
utworzenie nowego cigu tekstowego czcego podane cigi tekstowe, a nastpnie ponowne
doczenie obiektu cigu znajdujcego si po lewej stronie operatora do nowo utworzonego
cigu tekstowego. Za pomoc ptli for...in mona przej przez cig tekstowy znak po znaku.
Z kolei wbudowana funkcja len() informuje o iloci znakw tworzcych cig tekstowy.
W przypadku obiektw niezmiennych, takich jak cigi tekstowe, liczby cakowite i krotki,
moemy tworzy kod, jakby odniesienie do obiektu byo zmienn, czyli jakby odniesienie
byo obiektem, do ktrego nastpuje odwoanie w tworzonym kodzie. T sam technik
mona zastosowa take w przypadku obiektw pozwalajcych na modyfikacje, cho wszelkie
zmiany takiego obiektu s wprowadzane we wszystkich egzemplarzach tego obiektu
(na przykad we wszystkich odniesieniach do obiektu). To zagadnienie bdzie omwione
w rozdziale 3.
Jzyk Python oferuje wiele wbudowanych kolekcji typw danych, kolejne s dostpne
w bibliotece standardowej. W rozdziale omwilimy typy list i tuple, w szczeglnoci
sposb tworzenia list i krotek, na przykad parzyste = [2, 4, 6, 8]. Listy podobnie
jak wszystkie pozostae elementy w Pythonie s obiektami, wic mona wywoywa
wzgldem nich metody, na przykad polecenie parzyste.append(10) spowoduje dodanie
kolejnego elementu do listy parzyste. Podobnie jak cigi tekstowe, tak i listy oraz krotki
s sekwencjami. Dziki temu moemy przej przez nie element po elemencie, uywajc
do tego ptli for...in, a take ustali liczb elementw za pomoc funkcji len(). Istnieje
take moliwo pobrania okrelonego elementu listy bd krotki przy uyciu operatora
dostpu ([]), poczenia dwch list lub krotek za pomoc operatora + oraz doczenia
jednej do drugiej za pomoc operatora +=. Jeeli wystpi potrzeba doczenia pojedynczego
elementu do listy, naley uy funkcji lista.append() lub operatora += wraz z nazw
doczanego elementu na przykad parzyste += [12]. Poniewa listy mona modyfikowa,
zmian danego elementu mona przeprowadzi za pomoc operatora [], na przykad
parzyste[1] = 16.
Szybki operator tosamoci is i is not suy do sprawdzenia, czy dwa odniesienia do
obiektu odwouj si do tego samego obiektu. Taka moliwo jest szczeglnie uyteczna
podczas przeprowadzenia sprawdzenia wzgldem wbudowanego obiektu None. Dostpne
s wszystkie zwyke operatory porwnania (<, <=, ==, !=, >=, >), ale mog by uywane jedynie
z porwnywalnymi typami danych i tylko wtedy, gdy operatory s obsugiwane. Wszystkie
przedstawione dotd typy danych int, str, list i tuple w peni obsuguj wymieniony
zestaw operatorw porwnania. Prba porwnania niezgodnych typw danych, na przykad
porwnanie wartoci int z list, spowoduje zgoszenie wyjtku TypeError.
Python obsuguje standardowe operatory logiczne and, or i not. Zarwno and, jak i or
s operatorami zwracajcymi operand, ktry zdominowa wyniki to nie moe by warto
boolowska (cho mona j skonwertowa na posta wartoci boolowskiej). Natomiast not
zawsze zwraca warto True lub False.
59
60
wiczenia
wiczenia
Przykady
doczone
do ksiki
17 g
222
2
2
2 2
2
2
2
22222
888
333
000
8 3
3
0
0
8
3 0
0
888
33
0
0
8
8
3 0
0
8
8 3 3 0 0
888
333
000
8
8
666
6
6
6666
6
6
6 6
666
aby
aby
aby
aby
aby
aby
aby
zakoczy:
zakoczy:
zakoczy:
zakoczy:
zakoczy:
zakoczy:
zakoczy:
5
4
1
8
5
2
61
62
Metody
random.int()
i random.
choice()
52 g
wiczenia
63