Kroz cijelu ovu knjigu, imajte cijelo vrijeme na umu sljedeću stvar: Sve
što koristimo u Pythonu je objekt!!!
Python programski jezik posjeduje razne vrste objekata, neki od njih su
sljedeći: niz znakova (string), brojčane vrijednosti (integer), Boolean
operatori (True i False), podatkovni nizovi (tupleovi, liste, rječnici),
funkcije i klase,. O svim tim vrstama objekata raspravljat ćemo i
objasniti njihovu uporabu kroz ovu knjigu.
Manipuliranje stringovima u Pythonu
Prva vrsta Python objekta s kojom ćemo se upoznati jesu stringovi.
String je niz znakova, a možemo ga objasniti i kao hrpu riječi.
Stringovi su vrlo važni, budući da ćemo ih upotrebljavati u skoro svim
programima koje ikad budemo pisali u životu. Stringove ćemo
upotrebljavati ne samo kao vrijednosti varijable, nego ćemo ih trebati i
kada pozivamo funkciju koja traži neki string kao argument. O
varijablama i funkcijama ćemo nešto kasnije. Dok smo koristili funkciju
print, trebali smo unijeti string koji će se ispisati na ekranu. Kada
budemo učili kako pohraniti podatke u datoteku, vidjet ćemo da se i tamo
koriste stringovi, budući da funkcija koja ispisuje zadane podatke u
datoteku koristi string kao jedan od svojih parametara. Zato je važno da
dobro savladate ovaj dio.
String u Pythonu možemo navesti unutar jednostrukih navodnika odnosno
apostrofa ('), ili dvostrukih navodnika ("). Jednostruki navodnik na
hrvatskoj tipkovnici nalazi se iznad slova š. Dvostruki navodnik
dobijemo tako da držimo tipku shift i pritisnemo broj 2 iznad slova w.
Napomena: string se mora obavezno upisivati unutar navodnika, čak i ako
se radi o samo jednom slovu, jer u protivnom će doći do pogreške!
String za koji želimo da se ispisuje u više redova, a ne samo u jednom
redu, pišemo unutar trostrukih navodnika koristeći tri apostrofa (''')
ili tri dvostruka navodnika ("""). Primjeri:
"""Ja sam prvi red.
Ja sam drugi red.
Ja sam zadnji red teksta i tu je kraj."""
ili
'''Ja sam prvi red.
Ja sam drugi red.
Ja sam zadnji red.'''
Pažnja! Ukoliko pokušate pisati string u više redova, a da pritom niste
otvorili string trostrukim navodnicima nego samo jednim apostrofom ili
jednim dvostrukim navodnikom, tada prelazak u novi red ne važi i tu
dolazi do pogreške da je string nezavršen! Sve što je napisano između
trostrukih navodnika smatra se kao string, te stoga čak ako unutar
takvog stringa napišete programski kod, taj dio koda se neće izvršiti
nego će se smatrati stringom. Stoga budite ovdje pažljivi, jer ako
zaboravite zatvoriti trostruki navodnik poslje završavanja stringa i
nastavite pisati kod, taj kod se neće izvršiti nego će biti dio stringa
i naravno tada ćete se čuditi zašto program ne radi kako treba. Upravo
ovime možete natjerati Python da ignorira dio koda koji ste napisali u
programu tako da stavite trostruke navodnike na početku reda gdje
počinje ignoriranje koda i još jedne trostruke navodnike na kraju reda
gdje ignoriranje treba prestati.
Stringovi unutar jednostrukih i dvostrukih navodnika funkcioniraju
podjednako. Primjeri:
print 'Tko si ti?'
print "Tko si ti?"
Vidimo da su rezultati potpuno isti, dakle tu je svejedno hoćemo li
koristiti jednostruki ili dvostruki navodnik. Međutim, pogledajmo ovaj
slućaj.
print "Ja se zovem "Mirko""
Napišemo li to tako u našem programu, to će zbuniti Python jer on tada
neće znati da li string počinje ili završava, i prilikom izvršenja javit
će se pogreška. Ukoliko pišemo stringove gdje je potrebno koristiti
navodne znakove, onda moramo na neki način reći da taj navodnik ne
označava kraj stringa. To možemo učiniti tako da string napišemo unutar
jednostrukih navodnika, dakle ovako:
print 'Ja se zovem "Mirko"'
Isto tako pogledajmo ovaj slućaj. Pišemo rečenicu na engleskom jeziku i
tamo često dolazi do uporabe apostrofa. Ne možemo tada napisati
print 'What's your name?'
jer ćemo tako izazvati pogrešku! U ovom slućaju gdje su nam u stringu
potrebni znakovi apostrofa, string moramo tada staviti u dvostruke
navodnike, dakle ovako:
print "What's your name?"
i tada će biti sve u redu. Drugi način da izbjegnemo ovakve probleme je
taj da koristimo izlazne sekvence.
Izlazne sekvence (izlazni slijedovi) u stringovima
Sve izlazne sekvence u Pythonu počinju znakom beksleš (desni alt i Q na
hrvatskoj tipkovnici). Pomoću izlaznih sekvenci, primjere pisanja
navodnih znakova u stringu pokazan iznad možemo napisati ovako:
print "Ja se zovem \"Mirko\""
ili u slućaju apostrofa
print 'What\'s your name.'
U slućaju kada koristimo ove izlazne sekvence, opet je sasvim svejedno
hoćemo li string staviti u jednostruke ili dvostruke navodnike, jer
zahvaljujući njihovoj pomoći Python će znati da se ne radi o kraju
stringa, nego o pravom navodniku odnosno apostrofu.
Izlazne sekvence također pomažu u slućaju kada želimo navesti string
koji će se ispisivati u dva ili više redova. Koristeći sekvencu \n, reći
ćemo Pythonu da želimo nastaviti ispis stringa u sljedećem redu, a ne u
istom. Napomena: string sa više redova se također može navesti unutar
trostrukih navodnika kao što smo naveli iznad, dakle imate opet dva
načina kako ćete to napraviti. Recimo:
"Ja sam prvi red.\nJa sam drugi red.\nJa sam zadnji red.\n"
i
"""Ja sam prvi red.
Ja sam drugi red.
Ja sam zadnji red.
"""
će proizvesti potpuno iste rezultate. Sekvenca \n je recimo korisna ako
želimo pisati string koji se prikazuje u više redova prilikom
izvršavanja programa, ali isto tako želimo da se u programskom kodu taj
string ipak vidi samo na jednom redu.
Od ostalih korisnih sekvenci ću još navesti sekvencu \t koja ispisuje u
stringu znak tabulatora, koji nam također ponekad može biti od koristi,
recimo kada pišemo string koji sadrži informacije o autorskim pravima.
Naravno tu ima još puno drugih izlaznih sekvenci, no ovo su naj važnije
i najčešće korištene.
Ono što tu još treba napomenuti je da u stringu jednostruki beksleš (\)
na kraju reda znači da se string nastavlja u sljedećem redu, ali da se
stringu ne dodaje znak za novi red. Primjerice, string:
"Ja sam dobro.\
Kako si ti?"
je ekvivalentan stringu
"Ja sam dobro. Kako si ti?"
Ovo je korisno ako pišemo dulji string koji se ispisuje u samo jednom
redu, ali ipak želimo napraviti neki prijelom u kodu da bismo programski
kod učinili preglednijim.
No, što ako želimo napisati u stringu znak beksleš (\). To ćemo onda
napisati ovako:
"ja\\ti\\on\\mi"
A na ekranu će to onda pisati ovako:
ja\ti\on\mi\vi\oni
Dakle, za dobivanje znaka beksleš unutar stringa potrebno je upisati
znak beksleš dvaput za redom (\\). Ovaj znak možda nećete upotrebljavati
previše unutar običnih stringova, ali ćete ih zato sigurno
upotrebljavati kada u stringu navodite putanju do recimo foldera koji
želite izbrisati. Ako napišete "C:\program files", Python će misliti da
ste htjeli napisati sekvencu \P koja ne postoji, stoga morate to
napisati kao "C:\\program files". Pisanje duplih beksleš znakova možete
izbjeći na dva načina. Jedan od njih je da prilikom definiranja putanje
do nekog fajla/foldera ili ključa u Windows registru koristite umjesto
toga znak sleš (shift i broj 7 na hrvatskoj tipkovnici) ili korištenjem
raw stringa.
Raw Stringovi
Raw string se upotrebljava kada želimo da Python u stringu ignorira
izlazne sekvence i ispisuje ih kao i sve ostalo na ekranu. Raw string se
dobije tako da napišemo malo slovo r ispred stringa, ali prije nego što
otvorimo navodne znakove. Evo primjera:
print r"Moji dokumenti se nalaze pod d:\dokumenti\posao\liste."
Ukoliko ne stavite slovo r ispred nego to napišete ovako:
print "Moji dokumenti se nalaze pod d:\dokumenti\posao\liste."
Python će predpostaviti da pokušavamo napisati izlazne sekvence \d, \p i
\l, a to je ono što naravno ne želimo dobiti kao krajnji rezultat.
Raw Stringovi su najkorisniji i najupotrebljiviji ukoliko često pišete
regularne izraze, gdje je potrebno pisanja puno beksleš znakova.
Unicode stringovi
Unicode je standardni način pisanja međunarodnih tekstova. Ukoliko u
tekstu želite koristiti hrvatske dijakritičke znakove, ćirilicu i sl.,
ili želite pisati na stranim jezicima kao što su japanski ili kineski,
tada morate u Pythonu koristiti unicode stringove. Unicode string se
navodi tako da se ispred stringa (naravno prije znaka za navodnike)
upiše prefiks u ili U (dakle malo ili veliko slovo u). Primjer:
print u"Ovaj tekst sadrži puno naših dijakritičkih znakova, pa ćemo
stoga upotrijebiti prefiks za Unicode string. Hvala i doviđenja!"
Upozorenje, kod mene ovaj primjer javlja grešku, tako da iz nekog
razloga navođenje unicode stringa izgleda ne rješava problem pisanja
dijakritičkih znakova u hrvatskom jeziku.
Unicode stringove je pogotovo potrebno koristiti kada radimo program
koji ispisuje u datoteku tekst na nekom stranom jeziku, a da nije engleski.