Serijal tekstova: Zajedno naučimo Python (3. dio) – Načini ispisa i operatori
Pozdrav! Dobro došli u još jedan tutorial iz Pythona. Ovo su stvari koje trebate znati: varijabla je imenovani dio memorije u koji možemo spremiti podatak, a tipovi podataka koje koristimo su integer, float i string, dok za provjeru tipa podatka koristimo funkciju type(). Također, funkcija za unos od strane korisnika je input().
U ovom tutorialu bavit ćemo se aritmetičkim operatorima, a “one druge” (logičke operatore, operatore uspoređivanja i sve ostale) ostavit ćemo za kasnije tutoriale ili ih rješavati u “hodu”. Također, obradit ćemo i neke od načina ispisa kako biste ga naučili kvalitetnije oblikovati i tako ga učiniti čitljivijim.
Za početak, predstavimo aritmetičke operatore:
+ zbrajanje
– oduzimanje
* množenje
** potenciranje
/ dijeljenje
// cjelobrojno dijeljenje
% modularno dijeljenje
Iskreno, mislim da tu nema ništa posebno za reći kad ih većinu znate, no svakako vrijedi pojasniti razliku između dijeljenja i cjelobrojnog dijeljenja, te što je modularno dijeljenje.
Razlika između “običnog” i cjelobrojnog dijeljenja (može se vidjeti na slici) je u tome što cjelobrojno za razliku od “običnog” dijeljenja vraća rezultat kao cijeli broj (vrijedi i za float, ali u tom slučaju brojevi nakon decimalne točke postanu 0), dok modularno dijeljenje vraća ostatak od dijeljenja.
Ono što također vrijedi pojasniti je kako ispisati rezultat aritmetičkih operacija. Zapravo, sve je u potpunosti isto kao i kod varijabli, pa tako možemo rezultat ispisati na najjednostavniji način, što možete vidjeti na sljedećoj slici:
Ipak, ono što ćemo danas obraditi su načini ispisa. Naime, radi se o tome da smo dosad ispisivali jednu varijablu ili string kao konstantu. Međutim, što se dogodi ako želimo pomoću jedne print() funkcije ispisati više varijabli ili varijable unutar rečenice? Do sada o tome nismo ništa rekli, ali došlo je vrijeme da i to pojasnimo.
Na primjer, želimo ispisati rečenicu: “Zbroj brojeva 4 i 5 je 9”, ali da su 4 i 5 posebne varijable, a 9 je rezultat zbrajanja ta dva broja. Na koji način to napraviti?
Za početak, napravit ćemo dvije varijable te u jednu spremiti broj 4, a u drugu broj 5. Nakon toga nam je dovoljna funkcija print() unutar koje ćemo ispisati ostatak. Najjednostavniji način ispisa podataka unutar funkcije print() je pomoću zareza, ali ujedno i najnezgodniji jer svaki zarez ispred sebe dodaje razmak. Za ovakvu rečenicu ovaj način ispisa je sasvim dovoljan, međutim, ako želimo ispisati bilo kakve znakove, rečenice ili brojke bez razmaka, taj način nam predstavlja problem.
Ipak, da ne bi bili toliko opterećeni svim tim razmacima, moguće je i više podataka povezati pomoću znaka +. Međutim, ovdje je jako važno napomenuti da svi podaci trebaju biti stringovi ili pretvoreni u string pomoću funkcije str(). Još jedna dobra stvar je što se ovim načinom može više podataka povezati i spojiti u jednu varijablu tipa string.
No, kako se ne bi previše brinuli oko toga da li je sve pretvoreno u string, postoje još neki načini ispisa. Prikazat ću vam dva načina, po mom mišljenju puno fleksibilnija. Prvi način prikazan je na slici:
Ovdje se unutar teksta (navodnika) postavljaju oznake; znak %, te nakon toga slovo koje nam govori o kojem se tipu radi. Nakon toga, unutar zagrada print() funkcije nalazi se nova zagrada ispred koje se opet stavlja znak %, dok se unutar te druge zagrade nalaze podaci koji se koriste pri ispisu. Važno je napomenuti da poredak i tip mora odgovarati kako unutar rečenice, tako i unutar zagrada otkud se uzimaju podaci.
Slova predstavljaju tipove na sljedeći način:
i, d = integer (koristite jedan ili drugi ili oba)
f = float
s = string
Također, kao što je vidljivo na slici, kada se koristi samo jedan podatak, on se može nalaziti nakon znaka % bez zagrade, dok se kod više podataka obvezno mora staviti zagrada.
Nakon toga, postoji još jedan način ispisa za koji bi se moglo reći da je univerzalan i doista je pomoću njega moguće ispisati sve, kako god nam odgovara. Takav ispis omogućava nam funkcija .format(). Ovo je jedna od jako važnih funkcija i pokušajte ju zapamtiti, jer ćete ju pri ispisu, pogotovo kod tablica i sličnih stvari, često koristiti.
Možda će vam ispisivanje pomoću .format() funkcije u početku izgledati komplicirano, ali kada jednom shvatite princip više neće biti problema. Primjer ove funkcije možete vidjeti na sljedećoj slici:
Unutar rečenice se postavljaju vitičaste zagrade koje predstavljaju mjesto gdje će se prikazati određeni podatak. Do verzije Pythona 3.1, unutar zagrade morao se nalaziti broj koji je predstavljao koji će se podatak nalaziti na tom mjestu, ali ako koristite noviju verziju, niste obvezni stavljati brojke. Nakon rečenice stavlja se točka uz format(). Unutar ove zagrade nalaze se podaci koji će biti prikazani. Važno je naglasiti da će izostankom brojeva unutar vitičastih zagrada podaci biti prikazivati po redu u kojem su napisani unutar zagrada funkcije .format(), dok ih pomoću brojeva u vitičastim zagradama možete pozivati po kojem god redosljedu želite.
Još jedna važna stvar kod ove funkcije je dužina određenog podatka. Ova stvar je vrlo korisna ako želimo svakom podatku odrediti koliko će se znakova odvojiti za njegovo prikazivanje. U tom slučaju, nakon broja unutar vitičaste zagrade stavljamo dvotočku i broj koji će označavati koliko će znakova zauzimati prikazani podatak. Slobodno eksperimentirajte s veličinom, vidjet ćete razlike pri prikazivanju pri raznim veličinama, jer ulogu igra i veličina ostalih podataka unutar funkcije print().
Da to ne bi bilo sve, pobrinule su se još neke funkcije. Uzeo sam ih u obzir čisto iz razloga ako ćete trebati dodatno formatirati neki tekst:
.lower() – pretvaranje u mala slova
.upper() – pretvaranje u velika slova
.capitalize() – pretvaranje prvog slova u veliko
.swapcase() – mala slova pretvara u velika, a velika u mala
.title() – prvo slovo svake riječi pretvara u veliko
U nastavku su prikazane ove funkcije na djelu:
Razmišljao sam da li krenuti dalje ili da ovdje završim tutorial, no nešto me vuklo da napišem još neke stvari; čisto da se do sljedećeg tutoriala možete igrati sa stringovima. Ove stvari se inače ne rade na početku jer možda malo i zbune ljude, ali mislim da ćete uz malo truda vrlo brzo shvatiti o čemu se radi, a kasnije ćete to lakše moći povezati s drugim stvarima.
Kao što znate, stringovi su skup znakova koje spremamo u neku varijablu. To može biti jedan ili više znakova. Međutim, jeli moguće dodatno manipulirati stringom, mijenjati ga, pa čak i izmjeriti točan broj znakova? Moguće je! Kako bi vidjeli duljinu stringa, koristimo funkciju len().
Važno je spomenuti da se kod stringova prvi znak nalazi na nultom mjestu. Da, dobro ste pročitali, jer u većini programskih jezika, gotovo sve počinje od nule, pa tako i znakovi unutar stringa. Zato ako, primjerice, string ima veličinu od 10 znakova, prvi se nalazi na nultom, a deseti na devetom mjestu. To uvijek imajte na umu, jer će vam kasnije trebati i kod drugih stvari. Ovo ne spominjem kako bih vas zbunio, već kako bi mogli točno ispisati pojedino slovo ili više njih iz nekog stringa, ali i pravilno koristili slicing. Slicing nam omogućava “sjeckanje” dijelova stringa, a koristimo ih za ispis ili za stvaranje nekih novih varijabli i slično.
Kako bi ispisali znak nekog stringa, dovoljno je kraj imena varijable napisati uglate zagrade i u njima broj koji predstavlja redni broj znaka u stringu.
Ako bi koristili slicing, stavit ćemo prvo ime varijable, potom uglate zagrade i unutar njih određene vrijednosti koje su prikazane u nastavku:
[d:g] – ispisuju se znakovi od d do g
[d:] – ispisuje se sve od donje granice do kraja stringa
[:g] – ispisuje se sve od početka stringa do gornje granice
[d:g:k] – ispisuju se znakovi od d do g, ali samo određenim korakom
d – donja granica, g – gornja granica, k – korak
NAPOMENA: kod slicinga donja granica je uključena, a gornja nije. To uvijek imajte na umu!
Slicing je moguć i s negativnim indeksima, a može se koristiti i inverzni slicing, ali to će oni koje zanima sami proučiti.
Evo, došli smo do kraja ovog tutoriala koji je kraći nego dosadašnji, ali s daleko više stvari za pohvatati. Zato sam vam pripremio zadatke koje možete pokušati riješiti do idućeg tutorijala:
- Napišite program koji od korisnika traži unos dva broja, a kao rezultat se ispisuju rečenice s rezultatom zbrajanja, dijeljenja i potenciranja ta dva broja.
- Napišite program koji od korisnika traži unos dviju riječi. Te dvije riječi povežite u jednu varijablu te ju ispišite velikim slovima.
- Napišite program koji od korisnika traži unos rečenice. Kao rezultat neka se ispiše dužina rečenice (stringa) i prva polovica rečenice (podijelite dužinu rečenice s 2, a zatim koristite slicing).
Lijep pozdrav do sljedećeg tutorijala!
Nikola
Ja se izvinjavam što ću izneti svoje viđenje koje se neće dopasti mnogima.
Tekst kao tekst je ok. I lepo opisuje, ali ja ne vidim suštinu. Ne vidim neki veći potencijal. Deluje mi tekst i primeri, kao da su na razini za decu od 9 ili 10 godina u osnovnij školi i uče računarstvo. Iz primera, koji su tolko jednostavni, ne može da se zaključi ništa konkretnije. Jeste sve lepo opisano, ali … Jednostavno, ne navode čoveka na razmišljanje a ti me i na samo učenje.
Mislim da bi bilo bolje, da se za primer postavila izrada nekog programa, i da se objašnjenja kreću u tom smeru, i da svaki deo obrađuje jedan deo tog programa.
Da prekratim, trebalo je na samom početku tekstova dati šta je to što je krajnji cilj, kako će izgledati program kad se završi. Mislim da bi na taj način bilo daleko lakše za učenje, a najverovatnije i autoru bi bilo lakše da približi sam tekst i primere, samom čitaocu (učeniku).
Zlatko, gle, meni upravo takav način pisanja odgovara jer sam po znanju programiranja upravo na razini onih klinaca iz osnovne škole.
Onim većim znalcima ionako nije potreban početnički tečaj programiranja, a mislim da je taj početak upravo najteži (pogotovo nama koji nismo iz te struke). Zato je ovo pravi način za usvajanje prvih koraka. Jednostavno i prilagođeno baš svakome tko želi naučiti nešto više izvan svoje struke.
@Nikola, samo nastavi u istom tonu, nadam se da ću poloviti što više od svega toga.
Iskreno, ne vjerujem da netko može ovako naučiti python. Ovi tutorijali su previše spori i “suhi”. Spori su jer je prva lekcija bila prije mjesec dana, a tek je sad obrađena aritmetika. U manje od sat vremena se može naučiti više nego što je ovaj tutorijal pružio u mjesec dana. “suhi” su jer nema nikakvog cilja, baš kao što je Zlatko rekao. Bilo bi bolje da tutorijal vodi čitatelja kroz pravljenje jednostavnih i **korisnih** programa (primjer: križić kružić za početak).
Ovako nešto recimo? 🙂 http://bit.ly/15ze749
Izgleda zanimljivo.
@Zlatko
I ja se slažem sa Vladom, mi neki smo na tom nivou. Ne planiram o jednog dana pisati kompleksne programe pa da moramo da nešto brzo i kompleksno učimo. Ovo nam je sasvim zadovoljavajuće.
@Mislav
A ti ako misliš da možeš bolje ti uradi bolji tutorijal, niko te ne sprečava. Tebi ako ne odgovara nemoj čitati, nama ostalima odgovara.
@blast beat
Očekivao sam takvu reakciju. Znam da me nitko ne sprečava da napravim bolji tutorijal; ali bez obzira na to nemam namjeru ga napraviti jer smatram da tutorijala već ima i previše.
Nisam ni namjeravao čitati nastavke. Drago mi je da ti odgovara, sretno učenje! 🙂
@Zlatko i Mislav
Meni je ovakav tempo odličan. Dosad nisam programirao, a počeo sam raditi s linuxom i zanimam se za programiranje. Većina tutoriala na netu su “prebrzo” objašnjeni i za nas koji s tim nismo radili ima puno nepoznanica, pogotovo pri shvaćaju što neki elementi rade i omogučavaju..
Treba znati da on ne piše tutoriale za programere koji žele naučiti python, nego za sve, koji su imali dosad veze s programiranjem i onima koji nisu i zato mu svaka čast.
a joj … što ne volim kad ostanem neshvaćen.
nemam ništa protiv teksta, ako niste primetili pohvalio sam ga. Ali mislim da je trebao pristupiti objasnjavanju na drukčiji način. da maksimalno zainteresuje. Da da krajnji rezultat, pa da posle objašnjava kako je do toga došao kroz tekstove. Tako se daleko brže nauči, nego kad se daju pojedinačni primeri. Nadam se da sad shvatate šta sam hteo reći. Ako ne, onda da se ne nastavljamo. Mislim glupo je da se prepucavamo na nečemu, gde je čovek želeo da pomogne. Ovakvi tekstovi su jako korisni i zaista svaka čast čoveku.
Pozdravljam ovaj tutorijal. Komentari da ovakav tutorijal nije dobar ne stoje jer je, ako se ne varam, tako počeo i tutorijal u Full Circle Magazine i lijepo se razvija. Dobro je da imamo tutorijal na hrvatskom jeziku jer nisu svi na ti s engleskim.
Tutorijal ide presporo i na kraju nikome nece ni sluziti i zavrsit ce gasenjem, jer ce se jednostavno rasprsiti u moru pojmova, komandi i ostalog. Pogotovo u fazi kada dodu neke komplikovanije teme koje ce biti sigurno nezanimljive pocetnicima, a bez kojih nece moci razvijati ozbiljne aplikacije. Po meni sve ove osnovne stvari tipa “Hello world!” su mogle biti napisane u prvom izdanju. Dobro bi bilo posvetiti se rjesavanju nekog konkretnog problema iz stvarnog zivota, napisati programsko rjesenje i detaljno ga objasniti. Onaj ko zeli da se bavi programiranjem i sam mora doci na neki nivo sa kojeg bi nadogradjivao svoje zanje. U programiranju je znanje engleskog pod stavkom “obavezno”, svako ko misli biti na ti sa eng. nema sta da trazi u programerskom svijetu, a pisanje/prevodjenje postojecih tutoriala i nije nesto pretjerano originalno jer ako cemo posteno na net-u ce te naci 100x bolje uradjene tutoriale ovog tipa kojima ne vrijedi konkurirati sa ovakvim tekstovima ili bolje receno nema smisla.
A ja mislim da treba razoriti Kartagu.
Margaritas ante porcos…
Samo da kažem par riječi: ” Par riječi… ;-)”
“Tekst kao tekst je ok. I lepo opisuje, ali ja ne vidim suštinu. Ne vidim neki veći potencijal.”
Slušaj bato, odnosno čitaj: “Još ne viđoh knjige ni tutoriala koji me bez krvi, znoja i suza naučio programirat.” Nađi mi samo jednu knjigu, samo jednu, koja te lijepo, laaaagaaano vodi kroz neki programski jezik i da onako easy going naučiš programirat.” Zaboravi bato!
Nema toga! Ne na ovom svijetu, a ni na drugom. Ok, “Demistificirani C++” je meni osobno najzabavnija knjiga o programiranju a opet se svede na isto: “Krv, znoj i suze.” Jesi možda prošao “C++ Primer” od Lippman i Lajoiea?! Ako nisi, budi sretan da je Bayer odavno prestao imat’ isključiva prava na Aspirin kao patent. Bato, sreća da su mi zidovi napravljeni od knaufa… To je učenje programiranja! Krv, znoj i suze…, i lupanje glavom o zid. Nema tu suštine ni potencijala. Sjedi i kljucaj, to je jedino rješenje.
Zato molim sve džabalebaroše da ušute. Čovjek se potrudio da nam predstavi python i lijepo kaže: “Uvod u python!” Meni je nepoznata sintaksa pythona i već sam naučio neke stvari. Hvala autoru! Ako znate bolje, izvolite! Ako znate samo trokeljat, nemojte?! Pustite čovjeka da odradi posao do kraja pa onda pričajte.
Stari, molim te nastavi s ovim tutorialom.
P.S.
Jednom je jedan gospodin rekao: “Kad bi se okrenuo za svakim psom koji zalaje na mene, gdje bi stigao.”
Pozz svima, ja sam pocetnik u programiranju i imam jedan problem ne mogu da napravim ID liste (ili redni broj) koji treba da se cuva .txt format. Inace to sto se treba da cuva mora se uneti sa tastature(tipa a=input(“unesi nesto: “), i to se unosi sve dok zelim, i da svaki put sacuva u novom redu sa dodjelom ID-a). Ja sam uspijo da uradim ovo ali nece da mi cuva ID u .txt fajl, a kad ne cuvam ID u .txt fajl onda sacuva ono sto sam unjeo sa tastature. Pa kada bi mi neko ovo spojio bio bi mu zahvalan.