PYTHON - OSNOVE Snježana Radan Franjevačka klasična gimnazija u Sinju s pravom javnosti Informatika – jedna godina učenja
1
1. Početak rada_Python Računalni programi sastoje se od naredbi , a svaka naredba naređuje računalu da poduzme neku akciju. Računalo izvršava ove naredbe jednu po jednu. Između ostalog, naredbe se mogu koristiti za izvođenje izračuna, usporedbu podataka u memoriji računala, izazivanje promjena u načinu na koji program funkcionira, prosljeđivanje poruka ili traženje informacija od korisnika programa. Započnimo programiranje upoznavanjem s naredbom print koja ispisuje tekst. U ovom kontekstu ispis u biti znači da će program prikazati neki tekst na ekranu. 2
Ukratko, ako želite ispisati tekst, sav tekst mora biti u navodnicima ili ga Python neće ispravno protumačiti. 3
Program s više naredbi print Višestruke naredbe napisane u nizu bit će izvršene od prve do posljednje. Na primjer ovaj program ispisuje sljedeće retke na ekranu: Napišite program koji ispisuje sljedeće retke točno onako kako su ovdje napisani: Veslajte, veslajte, veslajte svojim čamcem, Lagano niz potok. Veselo, veselo, veselo, veselo, Život je samo san. 4
Aritmetičke operacije Također možete staviti aritmetičke operacije unutar print naredbe. Njegovim pokretanjem ispisat će se rezultat operacije. Na primjer, sljedeći program: print(2 + 5) print(3 * 3) print(2 + 2 * 10) Primijetite nedostatak navodnika oko aritmetičkih operacija iznad. Navodnici se koriste za označavanje nizova . U kontekstu programiranja, nizovi su nizovi znakova. Mogu se sastojati od slova, brojeva i bilo koje druge vrste znakova, poput interpunkcijskih znakova. Nizovi nisu samo riječi kako ih obično shvaćamo, već umjesto toga jedan niz može biti dugačak koliko i više cijelih rečenica. Nizovi se obično ispisuju točno onako kako su napisani. Dakle, sljedeće dvije naredbe daju dva sasvim različita rezultata: print(2 + 2 * 10) print("2 + 2 * 10") Ovaj program ispisuje: 22 2 + 2 * 10 S drugom linijom koda, Python ne izračunava rezultat operacije, već umjesto toga ispisuje samu operaciju, kao niz. Dakle, nizovi se ispisuju upravo onako kako su napisani, bez ikakve reference na njihov sadržaj. Komentar Svaki redak koji počinje znakom #, također poznatim kao hash je komentar. To znači da bilo koji tekst u tom retku nakon #simbola neće ni na koji način utjecati na funkcioniranje programa. Python će to jednostavno ignorirati. Komentari se koriste za objašnjenje kako program radi, kako samom programeru, tako i drugima koji čitaju programski kod. 5 Uzorak izlaza
print("Sati u godini:") # ima 365 dana u godini i 24 sata u svakom danu print(365*24) Kada se program pokrene, komentar neće biti vidljiv korisniku: Uzoíak izlaza Sati u godini: 8760 Napišite program koji ispisuje broj minuta u godini. Koristite Python kod za izvođenje izračuna, kao u prethodnom primjeru koda. Do sada ste vjerojatno koristili dvostruke navodnike "za ispis nizova. Osim dvostrukih navodnika, Python prihvaća i jednostruke navodnike '. Ovo je zgodno ako ikada poželite ispisati same navodnike: print('"Odmah se vrati!", povikao je policajac.') “Odmah se vrati!”, povikao je policajac. Napišite program koji ispisuje sljedeće: print("Zdravo!") 6 Uzorak izlaza Uzorak izlaza
Izgled 0_Prvi.py 7
2. Python_input_print Unos se odnosi na sve informacije koje korisnik daje programu. Konkretno, Python naredba input čita u retku unos koji upisuje korisnik. Također se može koristiti za prikaz poruke korisniku, za traženje određenog unosa. Sljedeći program čita ime korisnika s naredbom input. Zatim ga ispisuje naredbom print: ime = input("Kako se zoveš? ") print("Pozdrav, " + ime) Ono što ovaj program ispisuje djelomično ovisi o unosu korisnika. 8
Riječ ime u ovom programu je varijabla. U kontekstu programiranja, varijabla je mjesto za pohranu neke vrijednosti, kao što je niz ili broj. Imenovanje varijabli U principu, varijable se mogu imenovati sasvim slobodno, unutar određenih granica navedenih u jeziku Python. Uobičajena je međunarodna programska praksa da se varijable imenuju na engleskom, ali možete naići na kod u kojem su varijable imenovane na drugim jezicima, kao što je materinji jezik programera. Naziv varijable nema izravan utjecaj na njezin sadržaj, pa naziv, u tom smislu, nije bitan. Međutim, često može biti od pomoći u razumijevanju funkcioniranja koda ako su varijable imenovane logično. Jedna se varijabla može pozivati mnogo puta u programu: ime = input("Kako se zoveš? ") print("Pozdrav, " + ime + "!") print(ime + " je prilično lijepo ime.") 9
Pogledajmo pobliže način na koji print naredba koristi. Unutar zagrada naredbe nalazi se tekst pod navodnicima kao i nazivi varijabli koji se odnose na unos od korisnika. Oni su kombinirani s +operatorom koji spaja dva niza u jedan niz. Stringovi i varijable mogu se slobodno kombinirati: ime = input("Kako se zoveš? ") print("Hej "+ ime +"! Dopustite mi da se uvjerim: vaše ime je " + ime + "?") Napišite program koji traži ime korisnika i zatim ga ispisuje dva puta u jednom retku tako da na početku retka bude jedan uskličnik, drugi između dva imena i treći na kraju retka. Program bi trebao funkcionirati na sljedeći način: Kako se zoveš? Snježana ! Snježana! Snježana! input naredba Više od jednog unosa Program može tražiti više od jednog unosa. Primijetite kako ispod svaka sprema primljenu vrijednost u drugu varijablu. ime = input("Kako se zoveš? ") email = input("Koja je vaša adresa e-pošte? ") nadimak = input("Koji je tvoj nadimak? ") print("Pobrinimo se da bude ispravno.") print("Tvoje ime: " + ime) print("Tvoja email adresa: " + email) print("Tvoj nadimak: " + nadimak) 10
Ako se ista varijabla koristi za pohranu više od jednog unosa, svaka nova vrijednost će zamijeniti prethodnu. Na primjer: adresa = input("Koja je vaša adresa? ") print("Dakle, živite na adresi " + adresa) adresa = input("Upišite novu adresu: ") print("Vaša adresa je sada " + adresa) Ako se ista varijabla koristi za pohranjivanje dva ulaza uzastopno, ne postoji način za pristup prvoj ulaznoj vrijednosti nakon što je zamijenjena drugom: adresa = input("Koja je vaša adresa? ") adresa = input("Upišite novu adresu: ") print("Vaša adresa je sada " + adresa) Primjer kako izlaz programa može izgledati: Koja je vaša adresa? Python 10 Upišite novu adresu: Programer 23 Vaša adresa je sada Programer 23 Napišite program koji traži ime i adresu korisnika. Program također treba ispisati dane podatke, kako slijedi: Ime: Xxxxxx (unesi svoje ime) Prezime: Yyyyyy (unesi svoje prezime) Adresa ulice: Zzzzzz 10 (unesi svoju adresu) Grad i poštanski broj: Sinj 21230 (unesi svoj grad i poštanski broj) Xxxxxx Yyyyyy Zzzzzz 10 Sinj 21230 11
Evo programa koji bi trebao tražiti tri ulaza i ispisati ih, ovako: 1_dio: kamen 2_dio: škare 3_dio: papir kamen-škare-papir! Uzorak izlaza Međutim, nešto nije u redu s donjim kodom. Molim te popravi (copy kod). Napišite program koji ispisuje sljedeću priču. Korisnik daje ime i godinu, koje treba unijeti u ispis. Molim upišite ime: Xxxxx Upišite godinu: yyyy Xxxxx je hrabri vitez, rođen yyyy. godine. Jednog jutra Xxxxx je probudila užasna buka: zmaj se približavao selu. Samo je Xxxxx mogao spasiti stanovnike sela. # Write your code here :-) ime=input("Molimo upišite ime:") godina=input("Upišite godinu: ") print (ime + " je hrabri vitez, rođen " + godina + ". godine. Jednog jutra " + ime +" je probudila užasna buka: zmaj se približavao selu. Samo je " + ime + " mogao spasiti stanovnike sela.") 12
3. Više o varijablama Varijable su potrebne za različite svrhe u programiranju. Možete koristiti varijable za pohranu bilo koje informacije koja će biti potrebna kasnije u izvršavanju programa. U programiranju Python varijable se kreiraju ovako: variable_name = ... Ovdje ...znači vrijednost pohranjenu u varijabli. Promjena vrijednosti varijable Kao što implicira naziv varijabla , vrijednost pohranjena u varijabli može se promijeniti. Tijekom izvođenja sljedećeg programa, varijabla word će imati tri različite vrijednosti: word = input("Upišite riječ: ") print(word) word = input("I još jednu riječ: ") print(word) word = "treća" print(word) Odabir dobrog imena za varijablu • Često je korisno imenovati varijable prema tome za što se koriste. Na primjer, ako varijabla sadrži riječ, ime word je bolji izbor od, recimo, a. • Ne postoji postavljeno ograničenje duljine naziva varijable u Pythonu, ali postoje neka druga ograničenja. Naziv varijable treba započeti slovom, a može sadržavati samo slova, brojke i podvlake _. 13
• Mala i velika slova su različiti znakovi. Varijable ime, Imei IME sve su različite varijable. Iako ovo pravilo ima nekoliko iznimaka, za sada ćemo ih zanemariti. • U Pythonu je uobičajena programska praksa da se u imenima varijabli koriste samo mala slova. Ako se naziv varijable sastoji od više riječi, upotrijebite podvlaku između riječi. Iako ovo pravilo također ima nekoliko iznimaka, za sada ćemo ih zanemariti. Cijeli brojevi Cijeli brojevi su brojevi koji nemaju decimalni ili razlomački dio, kao što su -15, 0 i 1 . Sljedeći program stvara varijablu godine koja sadrži cjelobrojnu vrijednost. godine = 24 print(godine) Program ispisuje samo ovo: 24 Primijetite nedostatak navodnika ovdje. Zapravo, ako bismo dodali navodnike oko broja, to bi značilo da naša varijabla više ne bi bila cijeli broj, već niz. Vrste varijabli su važne jer različite operacije utječu na različite vrste varijabli na različite načine. Pogledajmo primjer: broj1 = 100 broj2 = "100" print(broj1 + broj1) print(broj2 + broj2) Time se ispisuje sljedeće: 200 100100 Za cjelobrojne vrijednosti +operator znači zbrajanje, ali za vrijednosti niza znači ulančavanje ili "nizanje zajedno". Nisu svi operatori dostupni za sve vrste varijabli. Dok se brojevi mogu dijeliti pomoću operatora dijeljenja /, pokušaj dijeljenja niza brojem uzrokuje pogrešku: 14
15 broj = "100" print(broj / 2) TypeError: unsupported operand type(s) for /: 'str' and 'int' Kombiniranje vrijednosti pri ispisu Ako želimo ispisati niz i cijeli broj u jednoj naredbi, cijeli se broj može pretvoriti u niz s funkcijom str, a ta se dva niza mogu normalno kombinirati. Na primjer, ovo bi funkcioniralo: rezultat = 10 * 25 print("Rezultat je " + str(rezultat)) Rezultat je 250 Naredba print također ima ugrađene funkcije koje podržavaju kombiniranje različitih vrsta vrijednosti. Najjednostavniji način je dodavanje zareza između vrijednosti. Ispisat će se sve vrijednosti neovisno o vrsti: rezultat = 10 * 25 print("Rezultat je", rezultat) Rezultat je 250 Primijetite da se ovdje između vrijednosti odvojenih zarezom automatski dodaje razmak. Što ako želimo imati veću fleksibilnost i kontrolu nad onim što ispisujemo? Takozvani fnizovi su još jedan način formatiranja ispisa u Pythonu. Sintaksa u početku može izgledati pomalo zbunjujuće, ali na kraju su f-nizovi često najjednostavniji način oblikovanja teksta. S f-stringovima prethodni primjer bi izgledao ovako: rezultat = 10 * 25 print(f"Rezultat je {rezultat}") Razmotrimo. Na samom početku niza koji ispisujemo nalazi se znak f . Ovo govori Pythonu da je ono što slijedi f-string. Unutar niza, u vitičastim zagradama, nalazi se naziv
varijable rezultat. Vrijednost koju sadrži postaje dio ispisanog niza. Ispis je potpuno isti kao u prethodnim primjerima. Jedan f-string može sadržavati više varijabli. Na primjer ovaj kod: ime = "Marko" starost = 17 grad = "Sinju" print(f"Pozdrav {ime}, vi imate {starost} godina. Živite u {grad}.") Ispisuje ovo: Bok Marko, vi imate 17 godina. Živite u Sinju. Usporedi: ime = "Marko" starost = 17 grad = "Sinju" print("Pozdrav", ime, ", vi imate", starost, "godina. Živite u", grad, ".") Vaš prijatelj radi na aplikaciji za tražitelje posla. Ona vam šalje ovaj dio koda: ime = "Tim Tester" starost = 20 vještina1 = "python" level1 = "beginner" vještina2 = "java" level2 = "veteran" vještina3 = "programming" level3 = "semiprofessional" donja = 2000 gornja = 3000 print("Zovem se ", ime, " , imam ", starost, "godina") 16
17 print("moje vještine su") print("- ", vještina1, " (", level1, ")") print("- ", vještina2, " (", level2, ")") print("- ", vještina3, " (", level3, " )") print("Tražim posao s plaćom od", donja, "-", gornja, "eura mjesečno") Program bi trebao ispisati točno sljedeće: moje ime je Tim Tester, imam 20 godina moje vještine su - python (početnik) - java (veteran) - programiranje (poluprofesionalno) Tražim posao s plaćom od 2000-3000 eura mjesečno Molimo popravite kôd tako da ispis izgleda ispravno. Osobito primijetite kako zapis zarezom u zarezom. print naredbi automatski umeće razmak oko različitih dijelova odvojenih Najlakši način za transformaciju koda tako da ispunjava zahtjeve je korištenje f-string. Savjet: možete ispisati prazan redak dodavanjem prazne print naredbe ili dodavanjem znaka novog retka \n u niz. Pomoć: print(f"zovem se {ime}, imam {starost} godina\n") print("moje vještine su") print(f"- {vještina1} ({level1})") print(f"- {vještina2} ({level2})") print(f"- {vještina3} ({level3})\n") print(f"Tražim posao s plaćom od {donja}-{gornja} eura mjesečno")
Brojevi s decimalnom točkom Floating point numberili float je pojam s kojim ćete se često susresti u programiranju. Odnosi se na brojeve s decimalnom točkom. Mogu se koristiti uglavnom na isti način kao i cjelobrojne vrijednosti. Ovaj program izračunava aritmetičku sredinu tri broja s pomičnim zarezom: broj1 = 2.5 broj2 = -1.25 broj3 = 3.62 arit_sr = (broj1 + broj2 + broj3) / 3 print(f"Aritmetička sredina: {arit_sr}") Aritmetička sredina: 1,6233333333333333 Ovaj program već sadrži dvije cjelobrojne varijable xi y: x = 27 y = 15 Dovršite program tako da ispisuje sljedeće (upotrijebi f-string): 27 + 15 = 42 27 - 15 = 12 27 * 15 = 405 27 / 15 = 1.8 Program bi trebao raditi ispravno i ako se promijene vrijednosti varijabli. Rješenje: a = 27 b = 15 18
print(f"{a} + {b} = {a + b}") print(f"{a} - {b} = {a - b}") print(f"{a} * {b} = {a * b}") print(f"{a} / {b} = {a / b}") Molim popravite ovaj program tako da se cijeli izračun, zajedno s rezultatom, ispisuje u jednom retku. Sastaviti u jedan ispis pomoću f-stringa i matematičkih operatora. print(5) print(" + ") print(8) print(" - ") print(4) print(" = ") print(5 + 8 - 4) Izlaz bi trebao biti: 5 + 8 - 4 = 9 19
20 4. Aritmetičke operacije Redoslijed operacija je poznat iz matematike: prvo izračunajte eksponente, zatim množenje i dijeljenje, a na kraju zbrajanje i oduzimanje. Redoslijed se može promijeniti pomoću zagrada. U sljedećoj tablici možete vidjeti najčešće aritmetičke operatore u Pythonu, s primjerima: Operator Svrha Primjer Rezultat + Zbrajanje 2 + 4 6 - Oduzimanje 10 - 2.5 7.5 * Množenje -2 * 123 -246 / Dijeljenje (rezultat s pomičnom točkom) 9 / 2 4.5 // Dijeljenje (cjelobrojni rezultat) 9 // 2 4 % Modulo (ostatak od dijeljenja) 9 % 2 1 ** Potenciranje 2 ** 3 8
Primjer: visina = 172.5 masa = 68.55 # indeks tjelesne mase ili BMI izračunava se dijeljenjem tjelesne mase s kvadratom visine # visina se pretvara u metre u formuli bmi = masa / (visina / 100) ** 2 print(f"BMI je {bmi}") Ovaj program ispisuje sljedeće: BMI je 23,037177063642087 Brojevi kao unos Već smo koristili input naredbu za čitanje nizova od korisnika. Ista se funkcija može koristiti za čitanje brojeva, ali se niz koji proizvodi funkcija zatim mora pretvoriti u numerički tip podataka u programskom kodu. Niz se može pretvoriti u cijeli broj pomoću funkcije int. godina = int(input("Koje ste godine rođeni? ")) print(f"Vaše godine na kraju godine 2022: {2022 - godina}" ) Slično, niz se može pretvoriti u broj s pomičnom točkom pomoću funkcije float. Ovaj program pita korisnika za njihovu visinu i težinu i koristi ih za izračun njihovog BMI-a: visina = float(input("Koja je vaša visina? ")) masa = float(input("Kolika je vaša masa? ")) visina = visina / 100 bmi = masa / visina ** 2 print(f"BMI je {bmi}") 21
Primjer ispisa iz programa: Koja je tvoja visina? 163 Kolika je vaša masa? 74,45 BMI je 28,02137829801649 Napišite program koji od korisnika traži ime i godinu rođenja. Program zatim ispisuje sljedeću poruku: Kako se zoveš? Ime Prezime Koje ste godine rođeni? XXXX Bok Ime Prezime, imat ćeš XX godina na kraju 2022. Rješenje: ime = input("Kako se zoveš? ") god_ro = int(input("Koje ste godine rođeni? ")) starost = 2022 - god_ro print(f"Bok {ime}, imat ćeš {starost} godina na kraju 2022.") 22 Uzorak izlaza
Korištenje varijabli Pogledajmo program koji izračunava zbroj triju brojeva koje je zadao korisnik: Primjer izvođenja programa: Ili Povećanje vrijednosti varijable vrlo je uobičajena operacija. Kao takva, postoji često korištena skraćena notacija sum = sum + broj Sada se svi unosi korisnika čitaju u jednu te istu varijablu broj. Vrijednost varijable sum povećava se za vrijednost varijable broj svaki put kada korisnik unese novi broj. 23
Ili sum += broj Zapravo, varijabla nam brojuopće nije potrebna. Unosi korisnika također se mogu obraditi ovako: 24
Ovaj program od korisnika traži tri broja. Program zatim ispisuje njihov umnožak, odnosno brojeve međusobno pomnožene. Međutim, nešto nije u redu s programom - ne radi baš kako treba, što možete vidjeti ako ga pokrenete. Molim te popravi to. Primjer očekivanog izvršenja programa: Uzorak izlaza Molimo upišite prvi broj: 2 Molimo upišite drugi broj: 3 Molimo upišite treći broj: 5 Umnožak je 30 Umnožak 25
Napišite program koji od korisnika traži četiri broja. Program zatim ispisuje zbroj i srednju vrijednost brojeva (aritmetička sredina). Program bi trebao funkcionirati na sljedeći način: Uzorak izlaza Broj 1: 2 Broj 2: 1 Broj 3: 6 Broj 4: 7 Zbroj brojeva je 16, a srednja vrijednost je 4,0 26
Molim vas da napišete program koji procjenjuje tipičnu korisničku potrošnju hrane. Program pita korisnika koliko puta tjedno jede u studentskoj menzi. Zatim pita za cijenu tipičnog studentskog ručka i za novac potrošen na namirnice tijekom tjedna. Na temelju ovih informacija program izračunava korisnikovu potrošnju za hranu i tjedno i dnevno. Program bi trebao funkcionirati na sljedeći način: Uzorak izlaza Koliko puta tjedno jedete u studentskoj menzi? 4 Cijena tipičnog studentskog ručka? 2.5 Koliko novaca potrošite na namirnice u tjednu? 28.5 27
5. Uvjetne izjave Do sada je svaki program koji smo napisali izvršavan red po red. Umjesto izvršavanja svake linije koda svaki put kada se program pokrene, često je korisno stvoriti dijelove programa koji se izvršavaju samo u određenim situacijama. Na primjer, sljedeći kod provjerava je li korisnik punoljetan: starost = int(input("Koliko imaš godina? ")) if starost > 17: print("Punoljetan si!") print("Evo kopije GTA6 za vas.") print("Sljedeći kupac, molim vas!") Kada je korisnik stariji od 17 godina, izvršavanje programa bi trebalo izgledati ovako: Uzorak izlaza Koliko imaš godina? 18 Punoljetan si! Evo kopije GTA6 za vas. Sljedeći kupac, molim! Ako korisnik ima 17 ili manje, ispisuje se samo ovo: Uzorak izlaza Koliko imaš godina? 16 Sljedeći kupac, molim! 28
Ovi nam primjeri pokazuju da vrijednost dana kao input utječe na to koji će se dijelovi programa izvršavati. Program sadrži uvjetnu naredbu s blokom koda koji se izvršava samo ako je uvjet u naredbi istinit. U uvjetnoj izjavi iza ključne riječi if slijedi uvjet , kao što je usporedba dviju vrijednosti. Blok koda koji slijedi nakon ove linije izvršava se samo ako je uvjet istinit. Primijetite dvotočku iza if linije (koda). 29
30 Operatori usporedbe Vrlo tipični uvjeti sastoje se od usporedbe dviju vrijednosti. Evo tablice s najčešćim operatorima usporedbe koji se koriste u Pythonu: Pogledajmo program koji ispisuje različite stvari ovisno o tome je li broj koji korisnik unese negativan, pozitivan ili jednak nuli: broj = int(input("Upišite broj: ")) if broj < 0: print("Broj je negativan.") if broj > 0: print("Broj je pozitivan.") if broj == 0: print("Broj je nula.") Operater Svrha Primjer == Jednak a == b != Nije jednako a != b > Veći od a > b >= Veće ili jednako a >= b < Manje od a < b <= Manje od ili jednako a <= b
Primjeri kako program funkcionira s tri različita ulaza: Uzorak izlaza Molimo upišite broj: 15 Broj je pozitivan. Uzorak izlaza Molimo upišite broj: -18 Broj je negativan. Uzorak izlaza Molimo unesite broj: 0 Broj je nula. Uvlačenje Python prepoznaje da je blok koda dio uvjetne izjave ako je svaki redak koda u bloku jednako uvučen . Odnosno, na početku svakog retka koda unutar bloka koda treba biti malo razmaka. Svaki red treba imati istu količinu razmaka. Možete koristiti tipku Tab, skraćenicu od tipka tabulator , za umetanje određene količine razmaka. Mnogi uređivači teksta automatski će uvući sljedeći redak kada se nakon dvotočke pritisne tipka Enter. 31
Kada želite završiti uvučeni blok koda, možete koristiti Backspacetipku za povratak na početak retka. Izvor slika tipkovnice: Clker-Free-Vector-Images s Pixabaya Napišite program koji od korisnika traži cijeli broj. Program bi trebao ispisati "Orwell" ako je broj 1984, a u protivnom ne učini ništa. Uzorak izlaza Molimo upišite broj: 2020 Molimo upišite broj: 1984 Orwell Zašto Orwell? https://www.hocuknjigu.hr/proizvodi/knjige/knjizevnost/drama/1984 32
33 Booleove vrijednosti i Booleovi izrazi Svaki uvjet koji se koristi u uvjetnoj izjavi rezultirat će vrijednošću istinitosti, to jest, istinito ili lažno. Na primjer, uvjet a < 5 je istinit ako a je manji od 5, a lažan ako a je jednak ili veći od 5. Ove vrste vrijednosti često se nazivaju Booleove vrijednosti, nazvane po engleskom matematičaru Georgeu Booleu. U Pythonu njima rukuje bool vrsta podataka. Varijable tipa bool mogu imati samo dvije vrijednosti: True ili False. Svaki dio koda koji rezultira Booleovom vrijednošću naziva se Booleov izraz . Na primjer, uvjet u uvjetnoj izjavi uvijek je Booleov izraz, a riječi uvjet i Booleov izraz često se mogu koristiti kao sinonimi. Rezultat Booleovog izraza može se pohraniti u varijablu baš kao i rezultat bilo kojeg numeričkog izračuna. Napišite program koji od korisnika traži temperaturu u stupnjevima Fahrenheita, a zatim istu ispisuje u stupnjevima Celzija. Ako preračunata temperatura padne ispod nula Celzijevih stupnjeva, program bi također trebao ispisati "Brr! Ovdje je hladno!". Formulu za pretvaranje Fahrenheitovih stupnjeva u Celzijeve stupnjeve može se lako pronaći bilo kojom tražilicom po vašem izboru. Dva primjera očekivanog ponašanja: Uzorak izlaza Molimo unesite temperaturu (F): 101 101 stupanj Fahrenheita jednako je 38,333333333333336 stupnjeva Celzija
34 Molimo unesite temperaturu (F): 21 21 stupanj Fahrenheita jednako je -6,111111111111111 stupnjeva Celzija Brr! Ovdje je hladno! Pogledajmo program koji od korisnika traži da unese broj, a zatim ispisuje različite poruke ovisno o tome je li broj negativan, pozitivan ili jednak nuli: broj = int(input("Upišite broj: ")) if broj < 0: print("Broj je negativan") if broj >= 0: print("Broj je pozitivan ili nula") Ovo izgleda pomalo nespretno i ponavljajuće. Odnosno, istina je ili broj < 0 ili broj >= 0, ali nikad oboje u isto vrijeme. Dakle, prvi uvjetni iskaz zapravo sadrži sve što nam ovdje treba. Ako je istina, broj je negativan. Ako je lažan, broj je jednak nuli ili je pozitivan.
35 Umjesto stvaranja cijele još jedne uvjetne izjave, kao u gornjem primjeru, moguće je stvoriti još jednu granu iste uvjetne izjave kako bi se pokrili svi slučajevi gdje je uvjet netočan . To se zove else izjava. Prethodni primjer: broj = int(input("Upišite broj: ")) if broj < 0: print("Broj je negativan") else: print("Broj je pozitivan ili nula") Kada koristite if-else konstrukciju, uvijek će se izvršiti jedna i točno jedna od grana. Napomena: nikada ne može postojati else grana bez if grane prije nje. If-else konstrukcija kao cjelina tvori jednu uvjetnu naredbu . Ovaj program izračunava bonus na kraju godine koji korisnik dobiva na svojoj kartici vjernosti. Bonus se izračunava sljedećom formulom: • Ako na kartici ima manje od sto bodova, bonus je 10% • U svakom drugom slučaju bonus je 15% Program bi trebao raditi ovako: Uzorak izlaza Koliko bodova imate na kartici? 55 Vaš bonus je 10 % Sada imate 60,5 bodova
Ali postoji problem s programom, pa s nekim unosima ne radi baš kako treba: Uzorak izlaza Koliko bodova imate na kartici? 95 Vaš bonus je 10 % Vaš bonus je 15 % Sada imate 120.175 bodova Molim popravite program tako da uvijek postoji ili 10% ili 15% bonusa, ali nikad oboje. # Fix the program bodova = int(input("Koliko bodova ima na vašoj kartici? ")) if bodova < 100: bodova *= 1.1 print("Vaš bonus je 10 %") if bodova >= 100: bodova *= 1.15 print("Vaš bonus je 15 %") print("Sada imate", bodova, "bodova") Uoči grešku! 36
Napišite program koji traži ime korisnika. Ako je ime bilo koje drugo osim "Ante", program tada traži broj porcija i ispisuje ukupnu cijenu. Cijena jedne porcije je 2,90 €. Dva primjera izvođenja programa: Uzorak izlaza Molim te reci mi svoje ime: Jure Koliko porcija juhe? 2 Ukupna cijena je 5,8 eura. Sljedeći molim! Uzorak izlaza Molim te reci mi svoje ime: Ante Sljedeći molim! 37
Napišite program koji od korisnika traži cijeli broj. Program bi zatim trebao ispisati veličinu broja prema sljedećim primjerima. Uzorak izlaza Molimo upišite broj: 950 Ovaj broj je manji od 1000. Hvala! Uzorak izlaza Molimo upišite broj: 59 Ovaj broj je manji od 1000. Ovaj broj je manji od 100. Hvala! Uzorak izlaza Molimo upišite broj: 2 Ovaj broj je manji od 1000. Ovaj broj je manji od 100. Ovaj broj je manji od 10. Hvala! Uzorak izlaza Molimo upišite broj: 1123 Hvala! 38
Napišite program koji traži satnicu, odrađene sate i dan u tjednu. Program zatim treba ispisati dnevne plaće, koje su jednake satnici pomnoženoj s odrađenim satima, osim nedjeljom kada se satnica udvostručuje. Uzorak izlaza Satnica: 8,5 Radni sati: 3 Dan u tjednu: ponedjeljak Dnevnice: 25,5 eura Uzorak izlaza Satnica: 12,5 Radni sati: 10 Dan u tjednu: nedjelja Dnevnice: 250,0 eura 39
Napišite program koji će od korisnika tražiti njihovu dob. Program bi zatim trebao ispisati poruku na temelju toga je li korisnik punoljetan ili ne, koristeći 18 kao dob zrelosti. Neki primjeri očekivanog ponašanja: Uzorak izlaza Koliko si star? 12 Niste punoljetni! Uzorak izlaza Koliko si star? 32 Punoljetan si! Alternativne grane koje koriste naredbu elif Često postoji više od dvije opcije koje program treba uzeti u obzir. Na primjer, rezultat nogometne utakmice mogao bi ići na tri načina: domaće pobjede, gostujuće pobjede ili je neriješeno. Uvjetnoj izjavi može se dodati grananje elif. To je skraćenica za riječi "else if", što znači da će grana sadržavati alternativu izvornom stanju. Važno je da elif se naredba izvršava samo ako se ne izvrši niti jedna od prethodnih grana. 40
Pogledajmo program koji određuje pobjednika meča: domaći = int(input("Postignuti golovi domaćina: ")) gosti = int(input("Postignuti golovi gosti: ")) if domaći > gosti: print("Domaća momčad je pobijedila!") elif gosti > domaći: print("Gostujuća momčad je pobijedila.!") else: print("Nerješeno!") Napišite program koji traži dva cijela broja. Program bi tada trebao ispisati ono što je veće. Ako su brojevi jednaki, program bi trebao ispisati drugu poruku. Neki primjeri očekivanog ponašanja: Uzorak izlaza Molimo upišite prvi broj: 5 Molimo upišite drugi broj: 3 Veći broj je bio: 5 Uzorak izlaza Molimo upišite prvi broj: 5 Molimo upišite drugi broj: 8 Veći broj je bio: 8 Uzorak izlaza Molimo upišite prvi broj: 5 Molimo upišite drugi broj: 5 Brojevi su jednaki! 41
Napišite program koji od korisnika traži dva broja i operaciju. Ako je operacija zbrajanje , množenje ili oduzimanje , program treba izračunati i ispisati rezultat operacije sa zadanim brojevima. Neki primjeri očekivanog ponašanja: Uzorak izlaza Broj 1: 10 Broj 2: 17 Operacija: zbrajanje 10 + 17 = 27 Uzorak izlaza Broj 1: 4 Broj 2: 6 Operacija: množenje 4 * 6 = 24 42
Broj 1: 4 Uzorak izlaza Broj 2: 6 Operacija: oduzimanje 4 - 6 = -2 Napišite program koji traži imena i godine dviju osoba. Program bi zatim trebao ispisati ime starijeg. Neki primjeri očekivanog ponašanja: Uzorak izlaza Osoba 1: Ime: Ante Dob: 26 Osoba 2: Ime: Ivan Dob: 27 Stariji je Ivan 43
Uzorak izlaza Osoba 1: Ime: Jure Dob: 1 Osoba 2: Ime: Stipe Dob: 1 Jure i Stipe su istih godina 44
Napišite program koji od korisnika traži dvije riječi. Program bi tada trebao ispisati koji od ta dva abecednim redom dolazi zadnji. Možete pretpostaviti da će sve riječi biti ispisane malim slovima. Neki primjeri očekivanog ponašanja: Uzorak izlaza Molim upišite prvu riječ: auto Molim upišite druguriječ: skuter skuter dolazi zadnji po abecedi. Uzorak izlaza Molim upišite prvu riječ: zorro Molim upišite drugu riječ: batman zorro dolazi zadnji po abecedi. Uzorak izlaza Molim upišite prvu riječ: python Molim upišite drugu riječ: python Dvaput ste napisali istu riječ. 45
6. Uvjeti kombiniranja Logički operatori Uvjete možete kombinirati s logičkim operatorima and i or. Operator and specificira da svi zadani uvjeti moraju biti istiniti u isto vrijeme. Operator or specificira da barem jedan od zadanih uvjeta mora biti istinit. Na primjer, uvjet broj >= 5 and broj <= 8određuje da broj istovremeno mora biti najmanje 5 i najviše 8. To jest, mora biti između 5 i 8. broj = int(input("Upišite broj: ")) if broj >= 5 and broj <= 8: print("Broj je između 5 i 8") U međuvremenu, uvjet broj < 5 or broj > 8 određuje da broj mora biti manji od 5 ili veći od 8. To jest, ne smije biti unutar raspona od 5 do 8. broj = int(input("Upišite broj: ")) if broj < 5 or broj > 8: print("Broj nije u rasponu od 5 do 8") ili broj = int(input("Upišite broj: ")) if not (broj >= 5 and broj <= 8): print("Broj nije u rasponu od 5 do 8") 46
Osobito u programiranju, logički se operatori često nazivaju Booleovim operatorima. Uvjeti kombiniranja i ulančavanja Sljedeći program traži od korisnika da upiše četiri broja. Zatim se utvrđuje koji je od njih četiri najveći, uz pomoć nekih uvjeta: n1 = int(input("Broj 1: ")) n2 = int(input("Broj 2: ")) n3 = int(input("Broj 3: ")) n4 = int(input("Broj 4: ")) if n1 > n2 and n1 > n3 and n1 najveći = n1 elif n2 > n3 and n2 > n4: najveći = n2 elif n3 > n4: najveći = n3 else: najveći = n4 > n4: print(f" {najveći} je najveći od brojeva.") Uzorak izlaza Broj 1: 2 Broj 2: 4 Broj 3: 1 Broj 4: 1 4 je najveći od svih brojeva. U primjeru prvi uvjet n1 > n2 and n1 > n3 and n1 > n4 je istinit samo ako su sva tri unutarnja uvjeta istinita. 47
Napišite program koji će pitati za godine korisnika. Ako dob nije uvjerljiva, odnosno, ispod je 5 ili nešto što ne može biti stvarna ljudska dob, program bi trebao ispisati komentar. U nastavku pogledajte primjere očekivanog ponašanja kako biste shvatili koji je komentar primjenjiv u svakom slučaju. Uzorak izlaza Koliko imaš godina? 13 Ok, imaš 13 godina Uzorak izlaza Koliko imaš godina? 2 Pretpostavljam da još ne znaš sasvim pisati... Uzorak izlaza Koliko imaš godina? -4 Mora da je greška 48
Napišite program koji traži ime korisnika. Ako je ime Huey, Dewey ili Louie, program bi trebao prepoznati korisnika kao jednog od nećaka Donalda Ducka. Na sličan način, ako je ime Morty ili Ferdie, program bi trebao prepoznati korisnika kao jednog od nećaka Mickeya Mousea. Neki primjeri: Uzorak izlaza Molim upišite svoje ime: Morty, mislim da biste mogli biti jedan od nećaka Mickeya Mousea. Uzorak izlaza Molim upišite svoje ime: Huey, mislim da ste možda jedan od nećaka Donalda Ducka. Uzorak izlaza Molim upišite svoje ime: Ken Ti nisi nećak nijednog lika za kojeg znam. 49