You are on page 1of 57

Sadržaj:

Osnove
Grananje
Ciklusi, nizovi
Ugrađene funkcije
Niska-String
Lista
Skup / Rečnik
Torke
Crtanje
Preslikavanja
Fajlovi
Animacije
Osnove: (Nazad na sadržaj-početak)
Python je FLOSS (Free/Libre and Open Source Software) softver. Jednostavnije rečeno, možete slobodno distribuirati kopije ovog
softvera, čitati izvorni kod, napraviti promene na njemu, i koristiti njegove delove u novim slobodnim programima. FLOSS se
zasniva na konceptu zajednice koja deli znanje. Ovo je jedan od razloga zašto je Python tako dobar - jer je stvaran i stalno
poboljšavan od strane zajednice koja samo želi da stvori bolji Python.
help(‘for’) – za pomoć...
Pokrenuti iz Start-a Python(Crn ekran, kao CMD) ili IDLE Python-Shell, to je konzola, ako želimo program koristiti za trenutno
izvršavanje naredbi (po jednu, u oba slučaja).
Nije svejedno da li je ime promenljive zbir ili Zbir (Malo ili veliko slovo: True ili true). To su dve promenljive.
Za imena promenljivih se koriste slova engleske abecede, brojevi 0-9 i podvlaka (donji_minus).
U imenima promenljivih se ne smeju koristiti znakovi (+,.), prazna mesta, niti sme da počne brojem.
Promenljiva mora pre upotrebe u nekoj operaciji da dobije početnu vrednost, ili sa tastature unosom, ili određivanjem njegove
početne vrednosti.
Ako je red programa predugačak, može se nastaviti-povezati u sledećem redu znakom backslasha (\). Primer malo niže.
Na početku reda ne sme da se nađe prazno mesto, osim ako naredba nije povezana sa prethodnim redom:
zbir=8+5
razlika=8-5
proizvod=zbir*razlika
print(proizvod)
godine=int(input("Koliko imaš godina?"))
if godine<15:
print("Bravo, počeli ste programiranje u pravo vreme!")
else:
print("Vreme je da počnete učiti programiranje!")
Online upotreba:
http://www.edusoft.matf.bg.ac.rs/python/
https://petlja.org/skola

Online help/tutorial:
https://docs.python.org/3/tutorial/index.html
https://docs.python.org/3/

Izdavanje numeričkih vrednosti:


- 8 / print(8)
- print (8+5)
- a=6
print(a)
- print (8*5+a)
- print( (8+5)*(8-5) )
- print (3**2) # =** je za stepenovanje, 3 na 2
- a=6
a*=3 # može i ovako a=a*3
print(a)
Izdavanje tekstualne vrednosti i njihova kombinacija:
Nema potrebe kod print naredbe, unutar oznaka teksta ' ' ili " " pisati prazna mesta, jer se automatski ubacuju: može ovako 'a=',
ne mora ' a= '.
Kod input naredbe se prazna mesta ne ubacuju.
Za novi red unutar oznaka teksta ' ' ili " " upisati \n.
- print ('a=',a)
- print ('a'*3) # =aaa
- print('a \n b')
- s = '''Ovo je tekst u vise linija.
Ovo je druga linija.'''
print(s) # Spajanje teksta iz više redova, u jednu promenljivu, i ispis teksta u više redova, kao što je napisano (između ''' ''').
Tekst u promenljivi će biti smešten u više redova.
- s = 'Ovo je tekst. \
Ovo je nastavak teksta u istom redu.'
print(s) #Spajanje teksta iz više redova, u jednu promenljivu (nastavak sa \ na kraju reda za povezivanje sa sledećim
redom). Tekst u promenljivi će biti smešten u jednom redu. Bez \ ne može.
Celi program se piše u nekom editoru.
U konzoli IDLE Python-Shell klik na File / New file daje novi prazan Python editor-modul.
Pre pokretanja se program mora snimiti.
Podrazumevano mesto snimanja je: C:\Users\Korisničko ime\AppData\Local\Programs\Python\Python36-32. (Podvukao sam ono
što se može razlikovati ovde i kod vas.)
AppData mesto je podrazumevano sakriveno, mora se podesiti prikaz skrivenih fajlova.
A može se snimiti i na drugo mesto, koje korisnik odabere.
Ekstenzija snimljenog Python fajla je: ime.py.
Pokreće se sa: Run / Run Module (F5).
Izvršavanje ovog program se pokreće u glavnom programu IDLE Python-Shell, gde se dešava ponovno pokretanje glavnog
programa. Tada se prethodno upisane naredbe vide, ali se prethodno korišćene vrednosti u glavnom programu izgube.
01. Zadatak:
Napisati poslednji primer kao poseban program (modul) sa upotrebom promenljivih za rezultate (8+5)*(8-5) :
File / New File:
zbir=8+5
razlika=8-5
proizvod=zbir*razlika
print(proizvod)
02. Zadatak:
Pera je zasadio 380 stabala jabuke. Đura je zasadio 142 stabla jabuka više od Pere, a Mika je zasadio dva puta više od Pere. Koliko
su stabala zasadili zajedno?
pera = 380
djura = pera + 142
mika = pera * 2
zajedno = pera + djura + mika
print(zajedno)

03. Zadatak:
Milica ima 4 godine, njena mama ima 7 puta više godina nego ona, a njen tata ima 8 puta više godina nego ona. Koliko je godina
Miličin tata stariji od njene mame?
milica = 4
mama = 7 * milica
tata = 8 * milica
razlika = tata – mama
print(razlika)

04. Zadatak:
Velika Morava je dugačka 185km i nastaje od Južne Morave koja je 90km duža, i Zapadne Morave koja je 123km duža od nje.
Kolika je ukupna dužina ove tri reke?
05. Zadatak:
Mirjana i Lidija pevaju u istom horu i pripremaju se za koncert. Mirjana ima 245 prijatelja na jednoj društvenoj mreži, dok ih Lidija
ima 218. Kada je Mirjana pogledala Lidijin profil, videla je da imaju 114 zajedničkih prijatelja. Ako bi i jedna i druga pozvale sve
svoje prijatelje sa te društvene mreže na koncert, koliko različtih ljudi bi dobilo taj poziv?
Realne vrednosti:
06. Zadatak:
Bajkalsko jezero u Rusiji je najdublje jezero na svetu. Ono je kriptodepresija jer se njegovo dno (najniža tačka) nalazi na 1,181
kilometara ispod nivoa mora, a površina mu se nalazi na 456 metara nadmorske visine. Izračunaj njegovu najveću dubinu u
metrima.
vis_pors=456
vis_dna=-1.181*1000
dub= vis_pors- vis_dna
print(dub)

07. Zadatak:
Marko je kupio 0,45 kg salame, 0,25 kg sira i dva pakovanja od po 0,3 kg šunke. Koliko je teška kesa koju nosi kući?
Deljenjem (/) i celih i decimalnih vrednosti dobija se realna vrednost:
print(5/3) #bez zaokruživanja
print(round(5/3,2)) #sa zaokruživanjem: round(a,d), a je vrednost, d je broj decimalnih mesta
08. Zadatak:
Skakač u dalj je u kvalifikacijama u prvoj seriji skočio 8,12, u drugoj 8,23, a u trećoj 8,17
metara. Koliko je iznosio njegov prosečni skok?
s1=8,12
s2=8.23
s3=8.17
ps=(s1+s2+s3)/3
print(ps)

09. Zadatak:
Na prvoj polici ima 150 knjiga. Na drugoj ima duplo manje nego na prvoj, a na trećoj tri
puta manje nego na prvoj. Koliko je ukupno knjiga na policama?
p1=150
p2=p1/2
p3=p2/3
uk=p1+p2+p3
print(uk)

10. Zadatak:
Knjiga ima 282 strane. Marko je prvog dana pročitao trećinu, drugog dana polovinu ostatka,
a trećeg knjigu pročitao do kraja. Koliko strana je pročitao trećeg dana?
Celobrojno deljenje: Za dobijanje celog broja rezultata se koristi znak //, a za dobijanje ostatka %.
13//5=2 29 % 10=
13%5=3 29 // 10=
5//6=0 29 / 10=
5%6=5
15//3=3 53 % 8=
15%3=0 53 // 8=
53 / 8=
Unos podataka sa tastature: int(input("Unesi jedan ceo broj")) float(input("Unesi jedan realan broj"))
11. Zadatak:
U školi se organizuje novogodišnja priredba za decu. Od para koje su zaradili tako što su organizovali sajam svojih rukotvorina
kupili su nekoliko krem bananica koje žele da ravnomerno podele svoj deci (tako da svako dete dobije isti broj bananica). Ako se
zna koliko će dece doći na priredbu, koliko će svako dete dobiti bananica, a koliko će bananica ostati neraspodeljeno?
broj_dece= int(input("Broj dece na priredbi: "))
broj_ban= int(input("Broj bananica na priredbi: "))
ban_po_det= broj_ban // broj_dece
ban_ost= broj_ban % broj_dece (ili: ban_ost= broj_ban - (broj_dece * ban_po_det))
print("Svako dete ce dobiti ", ban_po_det, " bananica. ")
print("Ostace ", ban_ost, " bananica. ")

12. Zadatak:
Napiši program koji na osnovu date dužine u centimetrima izračunava istu dužinu u metrima i centimetrima. Na primer, ako je
dužina 178 centimetara, program izračunava da je to 1 metar i 78 centimetara.
uk_centim= int(input("Unesi duzinu u cm: "))
metar= uk_centim // 100
centim= uk_centim % 100
print("Duzina je ", metar, " m. ", centim. " cm. ")

13. Zadatak:
Upisati jednu riječ i umnožiti je 5 puta.
rec=input('Upisati neku reč:')
tekst=(rec+' ')*5
print(tekst)

14. Zadatak:
Upisati dvije riječi i spojiti ih u niz.
rec1=input('Upisati prvu reč:')
rec2=input('Upisati drugu reč:')
tekst=rec1+' '+ rec2
print(tekst)

15. Zadatak: b=bin(a) =pretvara broj u binarni broj, hex(a) = u 16, oct(a) = u 8.
Unesite broj, kod ispisa ispisati broj koji unosite i broj u binarnom brojevnom sustavu (baza 2).
a=int(input('Upisati broj:'))
b=bin(a)
print(b)

16. Zadatak: b=ord(a) = ispisuje ASCII broj tog karaktera b=chr(a) = ispisuje karakter na osnovu upisanog ASCII broja
Unesite znak, (slovo, broj, specijani znak) i ispišite ASCII kod tog znaka.
a=input('Upisati karakter:')
b=ord(a)
print('Vas upisan karakter',a, 'ima ASCII vrednost:',b)

17. Zadatak: id(a) = ispisuje adresu tog podatka u memoriji


Unesite vrijednost varijable i ispišite memorijsku adresu te varijable
a=int(input('Upisati broj:'))
print('Adresa u memoriji:',id(a))
Grananje (Uslovna naredba): (Nazad na sadržaj-početak)
Naredbe koje se izvršavaju u zavisnosti od uslova, moraju biti uvučene u odnosu na if naredbu. Operacije su: >, <, >=. <=, ==, !=.
Kombinovanje više uslova: and, or, not
if uslov:
n1
nk
(elif uslov:
n1
np)
else:
n1
nr
21. Zadatak:
Napiši program koji korisnicima mlađim od 15 godina(unosi se) ispisuje pohvalu jer su krenuli da programiraju rano, a ostalima
drugi tekst:
godine=int(input("Koliko imaš godina?"))
if godine<15:
print("Bravo, počeli ste programiranje u pravo vreme!")
else:
print("Vreme je da počnete učiti programiranje!")

22. Zadatak:
Napiši program koji nakon učitavanja jednog broja ispisuje komentar da li je uneti broj pozitivan ili ne.
broj=int(input("Uneti broj: "))
if broj>0:
print("Broj je pozitivan!")
else:
print("Broj je negativan!")

23. Zadatak:
Napiši program koji ispituje da li je uneti broj paran ili neparan.
broj=int(input("Uneti broj: "))
if broj%2==0:
print("Broj je paran!")
else:
print("Broj je neparan!")

24. Zadatak:
U bajci braće Grim, patuljak se zvao Cvilidreta i treba pogoditi(unosom) njegovo ime. Ako promašite, potrebno je ispisati poruku
da niste pogodili, inače neki ok tekst.
ime=input("Uneti ime patuljka: ")
if ime!= "Cvilidreta":
print("Niste pogodili!")
else:
print("Tako je!")

25. Zadatak:
Napiši program koji proverava da li je korisnik naučio koliko bajtova postoji u jednom kilobajtu, inače neki ok tekst.
broj=int(input("Uneti koliko bajta ima u jednom KiloBajtu: "))
if broj!= 1024:
print("Niste pogodili!")
else:
print("Tako je!")

26. Zadatak:
Napiši program u koji za uneti broj godina ispisuje komentar da je osoba sa datim brojem godina tinejedžer ili ne, pri čemu se
smatra da je osoba tinejdžer ukoliko ima bar 12 i ne više od 19 godina.
broj=int(input("Uneti broj godina: "))
if broj>= 12 and broj <=19:
print("Tinejdžer!")
else:
print("Nije tinejdžer!")

27. Zadatak:
Kućni red zabranjuje pravljenje buke pre 6 časova i između 13 i 17 časova, i nakon 22 časa. Napiši program koji radnicima govori da
li u nekom datom trenutku mogu da izvode bučnije radove.
vreme=int(input("Uneti vreme posla: "))
if vreme<6 or (vreme>=13 and vreme=<17) or vreme>=22:
print("U ",vreme, " sati ne možete raditi!")
else:
print("Možete raditi tada!")

28. Zadatak:
Program za pogađanje zadatog broja, sa jednim pokušajom.
broj = 23
pogadjanje = int(input('Pogodi broj: '))
if pogadjanje == broj:
print('Cestitamo, pogodio si ga.')
print('(Ali nisi osvojio nikakvu nagradu!)')
elif pogadjanje < broj:
print('Ne, on je malko veci nego taj.')
else:
print('Ne, on je malko manji nego taj') # Da bi se izvrsio ovaj blok moralo je biti pogadjanje > broj.
print('''Gotovo :)''') # Ovaj red ce se uvek izvrsavati posle if provere, jer je u "glavnom" bloku
Ono što smo ovde koristili je elif, koja zapravo kombinuje dve vezane if else-if else naredbe u jednu kombinovanu if-elif-else .To
nam čini program lakšim i smanjuje količinu nepotrebnog uvlačenja. elif i else naredbe moraju imati i dvotačku na kraju logičke
linije praćenu odgovarajućim blokom naredbi (uz pravilno uvlačenje, naravno).
Možete imati još if komandi unutar if-bloka, sačinjenu od if naredbe, i tako dalje - to se zove ugnježđenje if komandi.
Zapamtite da su elif i else delovi koda opcioni.
Nema switch komande u Python-u.
29. Zadatak: if a in b: (Ne može sa numeričkim vrednostima)
Upisati neku reč, proveriti ima li traženo slovo u toj reči, i to ispisati.
rec =input('Upisati reč: ')
if 'a' in rec:
print('slovo se nalazi u reci')
else:
print('slovo se ne nalazi u reci')

rec =input('Upisati reč: ')


slovo =input('Upisati slovo za pretragu: ')
if slovo in rec:
print('slovo se nalazi u reci')
else:
print('slovo se ne nalazi u reci')

broj =input('Upisati broj: ')


deo =input('Upisati cifru: ')
if deo in broj:
print('Cifra se nalazi u broju')
else:
print('Cifra se ne nalazi u broju')

29-1a. Zadatak:
Učitati 2 broja (0 ili 1), ako su isti, ispisati to.
a=int(input("Uneti prvi broj(0 ili 1): "))
b=int(input("Uneti drugi broj(0 ili 1): "))
if a==b:
print("Isti su.")
else:
print("Nisu isti.")

29-1b. Zadatak:
Učitati 2 broja (0 ili 1), sa logičkom operacijom And proveriti njihov rezultat(Tačno je ako su oba 1).
a=int(input("Uneti prvi broj(0 ili 1): "))
b=int(input("Uneti drugi broj(0 ili 1): "))
if a and b==True:
print("Rezultat je True.")
else:
print("Rezultat je False.")

29-2. Zadatak:
Učitati 2 broja, sa logičkom operacijom And proveriti uslove a>0 i b<a.
a=int(input("Uneti prvi broj: "))
b=int(input("Uneti drugi broj: "))
if (a>0 and a>b) == True:
print("Rezultat je True.")
else:
print("Rezultat je False.")

29-3. Zadatak:
Učitati 2 broja, sa logičkom operacijom And proveriti uslove a>0 i b<a, ako je tačno, proveriti da li je b između 10 i 20(AND), i
ispisati poruku.
a=int(input("Uneti prvi broj: "))
b=int(input("Uneti drugi broj: "))
if (a>0 and a>b) == True:
print("Prvi rezultat je True: a>0 i a>b.")
if (b>=10 and b<=20) == True:
print("Drugi rezultat je True: b je izmedju 10 i 20")
else:
print("Drugi rezultat je False: b nije izmedju 10 i 20")
else:
print("Prvi rezultat je False: a nije veci od 0 i od b")

29-4. Zadatak:
Pitati korisnika za pokretanje programa, odgovore: d,da/Da/DA povezati(OR), učitati 2 broja, jedan za drugim, ali nijedan ne sme
biti veći od 10, izračunati njihov proizvod.Ispisati odgovarajuće poruke za svaku situaciju.
#input("Uneti brojeve(da/ne)? ")
#if "da" or "Da" or "DA" or "d"==True:
odg=input("Uneti brojeve(da/ne)? ")
if odg in "da" or "Da" or "DA" or "d"==True:
a=int(input("Uneti prvi broj: "))
if a<=10:
b=int(input("Uneti drugi broj: "))
if b<=10:
c=a*b
print("Proizvod je:",c)
else:
print("Drugi broj je veći od 10.")
else:
print("Prvi broj je veći od 10.")
else:
print("Odabrali ste izlaz.")

29-5a. Zadatak:
Učitati 3 stranice trougla, ispisati ih po imenima stranica. Prvo proveriti da li čine trougao, ako da, proveriti kakav trougao čine(
jednakostraničan je ako su iste 3 stranice, jednakokračan je ako su dve stranice iste, inače je raznostraničan), i to ispisati, inače
izdati poruku da nije trougao.
a=int(input("Uneti prvu stranicu: "))
b=int(input("Uneti drugu stranicu: "))
c=int(input("Uneti treću stranicu: "))
print("Prva a stranica:",a)
print("Druga a stranica:",b)
print("Treća a stranica:",c)
if a+b>c and a+c>b and b+c>a:
print("Stranice čine trougao.")
if a==b and b!=c:
print("Trougao je jednakokračni.")
if a==c and a!=b:
print("Trougao je jednakokračni.")
if b==c and b!=a:
print("Trougao je jednakokračni.")
if a==b and b==c:
print("Trougao je jednakostranični.")
if a!=b and a!=c and b!=c:
print("Trougao je raznostranični.")
else:
print("Stranice ne čine trougao.")

29-5b. Zadatak:
Učitati 3 stranice trougla, ispisati ih po imenima stranica. Prvo proveriti da li čine trougao, ako da, proveriti kakav trougao čine, i to
ispisati, inače izdati poruku da nije trougao. Kraći program. (Napomena: Redosled uslova je bitan, zbog isključivanja sledečeg rešenja. Probati zameniti redosled jednakokračnog i
jednakostraničnog.)
a=int(input("Uneti prvu stranicu: "))
b=int(input("Uneti drugu stranicu: "))
c=int(input("Uneti treću stranicu: "))
print("Prva a stranica:",a)
print("Druga a stranica:",b)
print("Treća a stranica:",c)
if a+b>c and a+c>b and b+c>a:
print("Stranice čine trougao.")
if a==b and b==c:
print("Trougao je jednakostraničan.")
elif a==b or a==c or b==c:
print("Trougao je jednakokračan.")
else:
print("Trougao je raznostraničan.")
else:
print("Stranice ne čine trougao.")

29-6. Zadatak:
Napišite program koji će za unet realan broj ispisati da li je broj pozitivan, nula ili negativan, koristeći elif.
a=float(input("Uneti broj: "))
if a>0:
print("Broj je pozitivan.")
elif a<0:
print("Broj je negativan.")
else:
print("Broj je nula.")

29-7. Zadatak:
Napravite program-Digitron, koji će za unos dva broja vršiti jednu od sledećih operacija: zbir, oduzimanje, množenje ili deljenje.
Na početku je potrebno korisniku omogućiti unos dva broja, zatim odabrati operaciju odabirom znaka te operacije (+,-,*,/).
a=float(input("Uneti 1. broj:"))
b=float(input("Uneti 2. broj:"))
o=input("Uneti znak operacije:")
if o=="+":
print("Zbir brojeva:",a+b)
if o=="-":
print("Razlika brojeva:",a-b)
if o=="*":
print("Proizvod brojeva:",a*b)
if o=="/":
print("Rez. delj. brojeva:", round(a/b, 2))

29-8. Zadatak:
Program treba korisniku omogućiti unos broja bodova od 1-100. Zatim program treba prema bodovnoj skali za svaki broj bodova
ispisati o kojoj se ocjeni radi. Bodovne pragove je potrebno odrediti kao uvjete u elif uvjetovanju prema tablici: Nedovoljan 0-50,
Dovoljan 51-63, Dobar 64-76, Vrlo dobar 77-89, Odličan 90-100.
a=int(input("Uneti broj bodova:"))
if a<=50:
print("Nedovoljan.")
elif a<=63:
print("Dovoljan.")
elif a<=76:
print("Dobar.")
elif a<=89:
print("Vrlo dobar.")
else:
print("Odličan.")
Ciklusi, nizovi: for _ in range(n): (Nazad na sadržaj-početak)
for i in range(n):
for i in range(m,n,k):
Ciklus se ponavlja n puta (kada je samo n zadat).
m je početna vrednost, n je krajnja vrednost, k je korak.
Naredbe koje se ponavljaju, moraju biti uvučene u odnosu na for naredbu.
Brojanje počinje od 0, ako nije definisano drugačije. Krajnja vrednost se ne računa u ponavljanje (ide od početne do n-1).
Primeri za for:
for _ in range(5):
print("Zdravo")

for i in range(5):
print("Zdravo")
for i in range(2, 5):
print(i)
for i in range( 5):
print(i)
for i in [2, 5, "Zdravo"]: #Redom ispisuje u svakom ponavljanju po jedan sadržaj iz [] zagrada. Index i uzima redom njihove vrednosti.
print(i)
for i in [2, 5, "Zdravo"]:
print(i)
else:
print("Kraj ciklusa")
31. Zadatak:
Napiši program koji učitava nekoliko imena učenika i svakog pojedinačno pozdravlja.
n=int(input("Broj ucenika:"))
for i in range (n):
ime=input("Upisi ime: ")
print("Zdravo",ime)
print("Kraj")

31b. Zadatak:
Napiši program koji učitava nekoliko imena učenika i svakog pojedinačno pozdravlja. Niz.
n=int(input("Broj ucenika:"))
ime=[0]*n
for i in range (n):
ime[i]=input("Upisi ime: ")
for i in range (n):
print("Zdravo",ime[i])
print("Kraj")

32. Zadatak:
Napiši program koji ispisuje sve brojeve počevši od vrednosti prvog učitanog broja do vrednosti drugog učitanog broja.
a=int(input("Pocetna vrednost:"))
b=int(input("Poslednja vrednost:"))
for i in range(a,b+1):
print(i)
print("Kraj")

33. Zadatak:
Unos n brojeva, računanje i izdavanje zbira.
zbir=0
n = int(input("Broj brojeva: "))
print("Unos brojeva")
for i in range(n):
x = int(input("Broj: "))
zbir=zbir+x
print("Zbir je: ",zbir)

33b. Zadatak:
Unos i ispis posebno n elemenata, računanje i izdavanje zbira. Niz.
zbir=0
n = int(input("Broj brojeva: "))
x=[0]*n
print("Unos brojeva")
for i in range(n):
x[i] = int(input("Broj: "))
zbir=zbir+x[i]
print("Spisak elemenata u redu: ")
for i in range(n):
print(x[i],end=' ')
print("\nZbir je: ",zbir)

34. Zadatak:
Napiši program koji će za date visine u centimetrima za n osoba ispisati komentar da li se svako od njih pojedinačno može spuštati
niz veliki tobogan, pri čemu je uslov za spuštanje niz veliki tobogan visina koja je najmanje 140 centimentara.
n = int(input("Broj osoba: "))
print("Unos visina")
for i in range(n):
print("Visina ",i+1,". osobe: ")
visina = int(input())
if visina>=140:
print(i+1,". osoba moze na tobogan: ")
else:
print(i+1,". osoba ne moze na tobogan: ")

35-1. Zadatak:
Unos n brojeva, računanje proizvoda parnih i broja negativnih.
proiz=1
bn=0
n = int(input("Broj brojeva: "))
print("Unos brojeva")
for i in range(n):
x = int(input("Broj: "))
if x%2==0:
proiz=proiz*x
if x<0:
bn=bn+1
print("Proizvod parnih je: ", proiz)
print("Broj negativnih je: ", bn)

35-1b. Zadatak:
Unos n brojeva, računanje proizvoda parnih i broja negativnih. Niz.
proiz=1
bn=0
n = int(input("Broj brojeva: "))
print("Unos brojeva")
for i in range(n):
x = int(input("Broj: "))
if x%2==0:
proiz=proiz*x
if x<0:
bn=bn+1
print("Proizvod parnih je: ", proiz)
print("Broj negativnih je: ", bn)

35-2. Zadatak:
Ispisati svaki drugi(paran) broj od 0 do 9.
for i in range(0,9,2):
print(i)

35-3. Zadatak:
Ispisati svaki broj od 9 do 1(unazad).
for i in range(9,0,-1):
print(i)

35-4. Zadatak:
Ispisati aktuelne zbirove svih parnih brojeva od 0 do 10.
zbir=0
for i in range(0,11,2):
zbir=zbir+i
print("Nakon broja:",i, "zbir parnih je:",zbir)

35-5. Zadatak:
Ispisati svaki broj od 1 do n.
n = int(input("Broj brojeva: "))
for i in range(1,n+1):
print(i)

35-6. Zadatak:
Za učitan broj odrediti njegove delioce.
n = int(input("Broj: "))
for i in range(1,n+1):
if n%i==0:
print(i)

from random import randint


a=randint(a1,a2,...)
35-7. Zadatak: random
Napisati program koji simulira bacanje novčića n puta te ispisati koliko puta se pojavljuje pismo i glava.
from random import randint
n = int(input("Broj bacanja:"))
pismo=0
glava=0
for i in range(1,n+1):
bacanje=randint(0,1)
if bacanje==0:
pismo+=1
else:
glava+=1
print("U",n,"bacanja je bilo",pismo, "*pismo, i",glava, "*glava")
print("Verovatnoća za pismo je:",round(pismo/n*100,2), "%")
print("Verovatnoća za glavu je:",round(glava/n*100,2), "%")

print("Tekst...",end='') #Za povezivanje dva reda u jedan, npr: tekst i unos vrednosti(print i input), koristiti u print(...,end='')
v=int(input())
35-8. Zadatak: print(...,end='')
Za n učenika uneti njihovu visinu, ispisati redni broj učenika kod unosa, i naći najnižeg i najvišeg.
n = int(input("Broj učenika: "))
nizi=0
visi=0
for i in range(0,n):
print("Za",i+1,". učenika uneti visinu: ",end='') #Za povezivanje dva reda u jedan, npr: tekst i unos vrednosti, koristiti u print(...,end='')
v=int(input())
if i==0:
nizi=visi=v
if v<nizi:
nizi=v
if v>visi:
visi=v
print("Najviši ima:",visi, "cm")
print("Najniži ima:",nizi, "cm")

35-9. Zadatak:
Ispisati svaki broj od 1 do n, u jednom redu, razdvojene praznim mestom.
n = int(input("Broj brojeva: "))
for i in range(1,n+1):
print(i,end=' ')

35-10. Zadatak:
Napisati program za učitavanje temperature u prethodnih n dana, (sa indexima dani), te ispisati srednju temperaturu iznad nule i
srednju temperaturu ispod nule.
veci=0
manji=0
brojv=0
brojm=0
n = int(input("Broj dana: "))
for i in range(0,n):
print("Za",i+1,". dan uneti temeraturu: ",end='')
t=int(input())
if t>0:
veci=veci+t
brojv+=1
if t<0:
manji= manji +t
brojm+=1
print('Prosečna temperatura iznad 0:',round(veci/brojv,2))
print('Prosečna temperatura ispod 0:', round(manji /brojm,2))

.format:
- print("Prvi broj je {0}, a drugi broj je {1}".format(15,32)) #U {} broj na prvom mestu pokazuje redni broj podatka iz () grupe
- print("Prvi broj je {}, a drugi broj je {}".format(15,32)) #Ispisuje vrednosti kako su navedene
- print("Prvi broj je {1}, a drugi broj je {0}".format(15,32)) #Obrnuti podaci iz () grupe
- print("Prvi broj je {0:5}, a drugi broj je {1:9}".format(15,32)) #U {} broj na drugom mestu pokazuje broj pozicija koji će zauzeti taj
podatak.
- print("Prvi broj je {0:5.2f}, a drugi broj je {1:9.4f}".format(15.635,32.14587)) #U {} broj na trećem mestu pokazuje broj pozicija
iza decimalnog zareza.
35-11. Zadatak:
Ispisati tablicu množenja 1-10.
for i in range(1,11):
for j in range(1,11):
print("{0:5}".format(i*j),end='')
print()
if i==1:
print()

Ciklusi: while uslov:


Ciklus se ponavlja dok je uslov tačan.
Naredbe koje se ponavljaju, moraju biti uvučene u odnosu na while naredbu.
36. Zadatak:
Unos brojeva do unosa 0.
print("Unos brojeva")
x = int(input())
while x != 0:
print(x, "nije nula")
x = int(input())
print("Kraj")

37. Zadatak:
Unos brojeva, sa ispisom rednog broja i računanje njihovog zbira, do unosa 0. Na kraju izdati zbir.
zbir=0
i=1
print(i,". broj: ",end="")
x = int(input())
zbir=zbir+x
while x != 0:
i=i+1
print(i,". broj: ",end="")
x = int(input())
zbir=zbir+x
print("Zbir je: ", zbir)

38. Zadatak:
Unos brojeva dok je njihov zbir manji od 100.
print("Unos brojeva")
zbir = 0
while zbir <= 100:
x = int(input())
zbir = zbir + x
print(zbir)

39. Zadatak:
Unos brojeva dok je njihov zbir manji od 100. Na kraju izdati za koliko je zbir veći od 100.
print("Unos brojeva")
zbir = 0
while zbir <= 100:
x = int(input())
zbir = zbir + x
else:
print(zbir - 100)

39-1. Zadatak:
Program za pogađanje zadatog broja, dok se on ne pogodi. Za uslov koristiti logičku vrednost.
broj = 23
radim = True
while radim:
pogodi = int(input('Pogodi broj: '))
if pogodi == broj:
print('Cestitam, pogodio si.')
radim = False # Ovo ce prekinuti while petlju
elif pogodi < broj:
print('Ne, broj je malo veci od tvog.')
else:
print('Ne, broj je malo manji od tvog.')
else:
print('While petlja je gotova.')
print('Kraj.')

39-2. Zadatak:
Program za unos nekog teksta, i ispis broja karaktera u tom tekstu (len). Za izlaz ukucati “izlaz”, i koristiti naredbu break. Za uslov
koristiti logičku vrednost true.
while True:
s = input('Ukucaj bilo sta: ')
if s == 'izlaz':
break
print('Duzina stringa je', len(s))
print('Kraj')

39-3. Zadatak:
Program za unos nekog teksta, i prebrojavanje broja karaktera u tom tekstu (len). Ako je tekst kraci od tri karaktera, to ispisati,
inače ispisati da je tekst dobar. Koristiti continue umesto else. Za izlaz ukucati “izlaz”, i koristiti naredbu break. Za uslov koristiti
logičku vrednost true.
while True:
s = input('Ukucaj nesto: ')
if s == 'izlaz':
break
if len(s) < 3:
print('Previse je kratko.')
continue
print('Input je zadovoljavajuce duzine.')

39-4a. Zadatak:
Napisati program koji će korisniku dati mogućnost pogađanja lozinke. Mogućnost pogađanja lozinke ponavljat će se dok korisnik
ne pogodi lozinku. Kada korisnik pogodi lozinku, ispisati „Tačna lozinka“ u suprotnom javiti vijest o pogrešno upisanoj lozinci i
ponoviti unos.
psw=''
while psw != 'python':
psw=input('Uneti lozinku:')
if psw== 'python':
print('Tačna lozinka')
else:
print('Netačna lozinka, pokušati ponovo')

39-4b. Zadatak:
Napisati program koji će korisniku dati mogućnost pogađanja lozinke. Mogućnost pogađanja lozinke ponavljat će se dok korisnik
ne pogodi lozinku. Kada korisnik pogodi lozinku, ispisati „Tačna lozinka“ u suprotnom javiti vijest o pogrešno upisanoj lozinci i
ponoviti unos. Sve sa brojačima.
psw=''
i=1
while psw != 'python':
psw=input('Uneti lozinku:')
#print('Uneti lozinku',i, 'put:',end='')
#psw=input()
if psw== 'python':
print('Tačna lozinka iz',i, 'pokušaja.')
else:
print('Netačna lozinka',i,'put, pokušati ponovo!')
i+=1

39-5. Zadatak:
Program traži od korisnika unos broja u intervalu od 10-20.
Ako korisnik pogodi interval, ispisati: Čestitamo, uneli ste broj u intervalu i ispisati taj broj.
Ako korisnik ne pogodi broj, ispisati: Broj nije u intervalu od 10-20. Pokušajte ponovno.
Petlja se ponavlja dok je uslov TRUE, odnosno dok korisnik unosi brojeve veće od nula.
Ako korisnik unese 0 odnosno FALSE, prekida se izvođenje programa.
while True:
broj=int(input('Uneti broj u intervalu 10-20'))
if broj>=10 and broj<=20:
print('Čestitamo, uneli ste broj u intervalu, broj je:',broj)
elif broj ==0: #Umesto 0 može se pisati False
print('Kraj programa.')
break
else:
print('Broj nije u intervalu od 10-20. Pokušajte ponovno.')

from time import sleep


sleep(t) #t je broj sekundi zaustavljanja programa

from os import system


_ = system('cls') #brisanje sadržaja ekrana
39-6. Zadatak:
Korisnik bira sa ponuđenog menija svaki put jednu od četiri +1 aritmetičke operacije (+,-,*,/), označene rednim brojevima(npr. 1.
Zbir, 2. Oduzimanje, 3. Množenje, 4. Deljenje, 5. Izlaz iz programa). Ako se unese pogrešan broj, ispisati poruku i
ispočetka(pauzirati rad par sekundi).
Kada korisnik odabere jednu od navedenih operacija, od njega se traži da unese dva broja(Duža i kraća verzija). Ispisati rezultat
odabrane operacije.
from time import sleep
o=0
while o!=5:
print("Kalkulator")
print("1 +")
print("2 -")
print("3 *")
print("4 /")
print("5 Kraj")
o=input("Uneti znak operacije(5-izlaz):")
#if o=="1" or o=="2" or o=="3" or o=="4":
#a=float(input("Uneti 1. broj:"))
#b=float(input("Uneti 2. broj:"))
if o=="1":
a=float(input("Uneti 1. broj:"))
b=float(input("Uneti 2. broj:"))
print("Zbir brojeva:",a+b)
elif o=="2":
a=float(input("Uneti 1. broj:"))
b=float(input("Uneti 2. broj:"))
print("Razlika brojeva:",a-b)
elif o=="3":
a=float(input("Uneti 1. broj:"))
b=float(input("Uneti 2. broj:"))
print("Proizvod brojeva:",a*b)
elif o=="4":
a=float(input("Uneti 1. broj:"))
b=float(input("Uneti 2. broj:"))
print("Rez. delj. brojeva:", round(a/b, 2))
elif o=="5":
break
else:
print("Unet je pogrešan broj operacije! Ponovni unos za par sekundi!")
sleep(3)
print("Kraj.")
Ugrađene funkcije: (Nazad na sadržaj-početak)
x=min(2,5) #Dobija se za rezultat manja vrednost
x=max(2,5) #Dobija se za rezultat veća vrednost
x=abs(-5), abs(a1-a2) #Dobija se apsolutna vrednost
x=int(5.3)=5
x=float(5)=5.0
x=x**y #x na y stepen
Modul math (mora se definisati za sledeće funkcije):
import math math.funkcija
import math as m m.funkcija

x=math.pi
r = math.pow(x,y) za x,y = 5, 2 r = 25.0 #Funkcija pow vraća vrednost stepena u kojem je osnova x , a izložilac y. 𝑥 𝑦
x= math.sqrt(4) x = 2.0 #Funkcija sqrt vraća kvadratni koren broja.
x = math.trunc(4.91) x = 4 #Funkcija trunc vraća celi deo realnog broja x, zapisanog u obliku celog broja.
41. Zadatak:
Ljubica je jednog dana dobila ocenu iz biologije i geografije. Koja je veća ocena koju je
Ljubica dobila tog dana? Ocene uneti sa tastature.
biol= int(input("Unesi ocenu iz biologije"))
geog= int(input("Unesi ocenu iz geografije"))
print("Veća je ocena: ", max(biol, geog) )

42. Zadatak:
Spratovi u jednoj zgradi su obeleženi sa brojevima od -2 do 10 (brojevi -2 i -1 označavaju
dva nivoa ispod zemlje, 0 označava prizemlje, dok ostali brojevi označavaju spratove
iznad zemlje). Ako se znaju spratovi na kojima se nalaze dva drugara (unose se), izračunaj koliko su
spratova udaljeni.
sprat1= int(input("Unesi 1. sprat"))
sprat2= int(input("Unesi 2. sprat "))
rast=abs(sprat1- sprat2)
print("Rastojanje je: ", rast, " sprata.")

43. Zadatak:
Jelena je došla autobusom na stanicu u s1 sati i m1 minuta, dok je Ivanin autobus stigao u
s2 sati i m2 minuta. Koliko je sati i minuta ona koja je prva stigla čekala onu koja je druga
stigla?
s1= int(input("U koliko sati je stigao prvi bus: "))
m1= int(input("U koliko minuta je stigao prvi bus: "))
s2= int(input("U koliko sati je stigao drugi bus: "))
m2= int(input("U koliko minuta je stigao drugi bus: "))
minuti_1_busa=s1*60+m1
minuti_2_busa=s2*60+m2
razlika=abs(minuti_1_busa- minuti_2_busa)
s3= razlika // 60
m3= razlika % 60
print("Cekala je: ", s3, " sati i ",m3, " minuta. ")

44. Zadatak:
Marko i Nenad pomažu ocu u stolarskim poslovima. Otac je dobio veliku narudžbinu
stolova za koje je između ostalog pripremio nogare. Nogare je potrebno prelakirati, pa
ih je odprilike podelio na dve slične gomile(gom1 i gom2) i dao svakom sinu po jednu na farbanje.
Braća vole da se takmiče u tome ko će pre posao da završi, pa žele da podela bude fer.
Napiši program koji će odrediti za koliko se gomile razlikuju i koliko je potrebno
nogara prebaciti sa veće na manju da bi bile jednake.
gom1= int(input("Broj nogara u 1. gomili "))
gom2= int(input("Broj nogara u 2. gomili "))
razlika=abs(gom1- gom2)
prebaciti= razlika / 2
print("Gomile se razlikuju za: ", razlika, " nogara.")
print("Sa vece na manju treba prebaciti: ", prebaciti, " nogara.")

45. Zadatak:
Menhetn, deo grada Njujorka je organizovan u avenije u pravcu sever-jug i ulice u pravcu istok-zapad. Razmak između dve ulice je
80m, a između dve avenije je 275m. Ako se Tom nalazi na uglu ulice U1 i avenije A1 i želi da stigne na ugao ulice U2 i avenije A2,
koliko će metara morati da pređe.
ul1= int(input("Unesi 1. ulicu polaska "))
av1= int(input("Unesi 1. aveniju polaska "))
ul2= int(input("Unesi 2. ulicu cilja "))
av2= int(input("Unesi 2. aveniju cilja "))
razmak_ul=80
razmak_av=275
rast=abs(av1-av2)*razmak_av + abs(ul1-ul2)*razmak_ul
print("Preci ce: ", rast , " metara.")

Kreiranje nove funkcije (potprogram).


def proba():
print('Pozdrav Svima!')
proba () # poziva funkciju
proba ()
Spisak promenljivih je obavezan u zagradi iza imena funkcije, kada se vrši razmena vrednosti između glavnog i potprograma.
Return vraća vrednost iz funkcije u glavni program.
46. Zadatak:
Nači i izdati veči od dva broja u funkciji, brojeve kreirati u glavnom programu.
def Maks(a, b):
if a > b:
print(a, 'je maksimalno')
elif a == b:
print(a,'je jednako sa', b)
else:
print(b, 'je maksimalno')
x=5
y=7
Maks (x, y) # Maks (3, 4) direktno saljemo funkciji konstantne vrednosti

47. Zadatak:
Upotreba lokalnih promeljivih
x = 50
def funk(x):
print('x je', x)
x=2
print('Promenili smo lokalnu vrednost x na', x)
funk(x)
print('U glavnom programu x je jos uvek', x)
48. Zadatak:
Izmeniti vrednost globalne promenljive u funkciji.
def funk():
global x
print('x je', x)
x=2
print('Promenjena globalna vrednost promenljive x na', x)
x = 50
funk()
print('Vrednost promenljive x u glavnom programu sada je', x)
49-1. Zadatak:
Ispis nekih tekstova u potprogramu, 1 put i n puta.
def ispis(poruka, puta = 1):
print(poruka * puta)
ispis ('Pozdrav jednom')
n=int(input('Koliko vas ima:'))
ispis ('Svima pozdrav posebno! ',n)
49-2. Zadatak:
Ispis nekih vrednosti u potprogramu.
def funk(a, b = 5, c = 10):
print('a je', a, ', b je', b, 'i c je', c)
funk(3,7)
funk(25, c = 24)
funk(c=50, a = 100)
49-3. Zadatak:
Funkcija može da preuzima više vrednosti (kada ima *(asterix) ispred imena preuzima vrednosti brojeva, a ** preuzima
vrednosti promenljivih).
def total(, *brojevi, **kljucnereci):
brojanje = 0
for broj in brojevi:
brojanje += broj #računa samo numeričke vrednosti brojeva
for rec in kljucnereci:
brojanje +=kljucnereci[rec] #računa samo numeričke vrednosti promenljivih
return brojanje
print(total(10, 1, 2, 3, povrce = 50, voce = 100))
49-4. Zadatak:
Funkcija odredjuje koji je veći broj, ili da li su isti(piše poruku o tome).
def maksimum(x, y):
if x > y:
return x
elif x == y:
return 'Brojevi su jednaki'
else:
return y
print(maksimum(2, 3))

49-5a. Zadatak:
Napisati funkciju koja provjerava da li je upisan broj u glavnom programu paran ili neparan.
def paran(a):
if a%2==0:
print('Broj je paran')
else:
print('Broj nije paran')
return #nije obavezan kada nema argumente, jer se ne vraća vrednost
a=int(input('Upisati broj:'))
paran(a)

49-5b. Zadatak:
Napisati funkciju koja učitava i provjerava da li je upisan broj paran ili neparan.
def paran():
a=int(input('Upisati broj:'))
if a%2==0:
print('Broj je paran')
else:
print('Broj nije paran')
return
paran()

49-6. Zadatak:
Funkcija koja omogućava unos celog broja. U glavnom programu potrebno je pozvati funkciju za unos 4x puta.
def unos():
a=int(input('Upisati broj:'))
for i in range(1,5):
unos()

49-7a. Zadatak:
Napišite funkciju za unos i ispis i zbir dva broja, u glavnom programu omogućite ponavljanje funkcije 3 puta.
def unos():
a=int(input('Upisati prvi broj:'))
b=int(input('Upisati drugi broj:'))
c=a+b
print('Zbir je:',c)
for i in range(1,4):
unos()

49-7b. Zadatak:
Napišite funkciju za unos i zbir dva broja, u glavnom programu omogućite ponavljanje funkcije 3 puta, kao i ispis.
def unos():
a=int(input('Upisati prvi broj:'))
b=int(input('Upisati drugi broj:'))
c=a+b
return(c)
for i in range(1,4):
c=unos() #ovako se vraća neka vrednost iz funkcije u glavni program
print('Zbir je:',c)

49-7c. Zadatak:
Napišite funkciju za zbir i ispis, u glavnom programu se unose dva broja i omogućite ponavljanje funkcije 3 puta.
def unos(a,b):
c=a+b
print('Zbir je:',c)
for i in range(1,4):
a=int(input('Upisati prvi broj:'))
b=int(input('Upisati drugi broj:'))
unos(a,b)

49-8. Zadatak:
Program sa dve funkcije: jedna za proveru parnosti broja, a drugu za proveru negativnosti broja. Broj se unosi u glavnom pr.
def paran(a):
if a%2==0:
print('Broj je paran')
else:
print('Broj nije paran')
return
def negativan (a):
if a>0:
print('Broj je pozitivan')
else:
print('Broj je negativan')
return
a=int(input('Upisati broj:'))
paran(a)
negativan(a)
Niska-String: (Nazad na sadržaj-početak)
Za kompletnu listu takvih metoda, pogledajte help(str).
Tekst u nisci može sadržati sve karaktere (slova, brojeve i znakove), i naša latinična i ćirilična slova (Unicode skup karaktera, dok je
ASCII samo za slova engleske abc.).
Ako kod učitavanja input() ili kod upotrebe numeričke vrednosti u tekstualnom obliku, koristimo int(), tada se dobija numerička
vrednost (int(input("Unesi vrednost broja: ")) (int("1")+int("2") = 3).
U slučaju tekstualne vrednosti se oni ne sabiraju, nego se nadovezuju kao karakteri ("1" + "2" = "12").
Za pisanje teksta se koristi znak navoda(" "), ili apostrof(' ').
Niska se može pomnožiti sa celim brojem ("ba"*2).
Primer: Uneti 2 broja kao numeričke vrednosti, i 2 broja kao tekst, i prikazati njihove rezultate:
unos1= int(input("Unesi 1. vrednost broja: "))
unos2= int(input("Unesi 2. vrednost broja: "))
unos3= input("Unesi 3. vrednost broja: ")
unos4=input("Unesi 4. vrednost broja: ")
vr1=unos1+ unos2
vr2=unos3+ unos4
print("Rezultat unosa brojeva sa int: ", vr1 )
print("Rezultat unosa brojeva bez int: ", vr2 )
Primer: Uneti odvojeno ime i prezime, i ispisati ih zajedno:
unos1= input("Unesi ime: ")
unos2= input("Unesi prezime: ")
unos= unos1 + " " + unos2
print(unos)
print( (unos+" ")*2)
Naredba za dužinu niske tj. broj njenih karaktera je len:
Primer: len("zdravo") je jednako 6.
Karakteri u niski imaju svoje redne brojeve(indexe) tj. pozicije. Prvi karakter se nalazi na poziciji 0, drugi na poziciji 1...
Primer: rec="zdravo", tada rec[0] ima vrednost prvog karaktera "z", a rec[3] ima vrednost četvrtog karaktera "a".
Podržani su i negativni indeksi tako što -1 označava poslednji karakter, -2 pretposlednji...
Primer: rec="zdravo", tada rec[-1] ima vrednost poslednjeg karaktera "o".
Izdvajanje dela niske:
Prilikom izdvajanja može se navesti raspon pozicija, pri čemu se izdvajaju karakteri iz tog raspona računajući prvu, a ne računajući
drugu navedenu poziciju. Na primer, rec[2:5] izdvaja karaktere na pozicijama 2, 3 i 4. Ne zaboraviti da numeracija kreće od nulte
pozicije, tako su to 3,4 i 5 slovo.
Primer: rec="zdravo", tada rec[2:5] ima vrednosti "rav".
Kada se gornja granica ne navede, tada se izdvaja deo niske do njenog kraja.
Primer: rec="zdravo", tada rec[3:] ima vrednosti "avo".
Pretraga niske:
Kada treba proveriti da li jedna niska sadrži neki karakter ili sadrži neku drugu nisku, to se radi upotrebom funkcije find.
Primer: rec = "ponedeljak"
Primer: rec.find("d") jednako 4
Primer: rec.find("c") jednako -1, jer traženog karaktera nema u stringu
Primer: rec.find("e") jednako 3, jer funkcija vraća poziciju prve pojave traženog karakatera ili tražene niske
Primer: rec.find("P") jednako -1, jer se velika i mala slova smatraju različitim karakterima
51. Zadatak:
Napiši program u kojem se na osnovu date jedne niske koja sadrži ime i prezime dobijaju jedna niska sa imenom i druga niska s
prezimenom te osobe.
ime_i_prezime= input("Unesi ime i prezime: ")
razmak= ime_i_prezime.find(" ")
ime= ime_i_prezime[0:razmak]
prezime= ime_i_prezime[razmak+1:]
print("Име: ", ime, "Презиме: ", prezime)

52. Zadatak:
Nindža-kornjača se kreće kroz lavirint tako što sluša uputstva na tajnom jeziku. Gore se na tom jeziku kaže rif, dole el, levo oma, a
desno lun. Napiši program koji pomaže kornjači da pronađe put do blaga u lavirintu.
gore="rif "
dole="el "
desno="lun "
levo="oma "
put=(gore+desno)*3 + desno*3 + (dole+levo)*3
print(put)

53. Zadatak:
Svaki građanin Republike Srbije ima svoj jedinstveni matični broj (JMBG). U njemu prve dve cifre određuju dan rođenja, druge dve
mesec, a naredne tri cifre određuju godinu rođenja. Naredne dve cifre određuju opštinu rođenja, naredne tri cifre su jedinstvene
za tu osobu pri čemu se iz njih može odrediti pol (kombinacije od 000 do 499 se dodeljuju dečacima, a od 500 do 999
devojčicama). Poslednja cifra je kontrolna. Ona se izračunava primenom jedne posebne formule na prethodne cifre. Za dati JMBG
odredite kog dana i meseca se osoba rodila.
jmbg= input("Unesi Jmbg: ")
dan=jmbg[0:2]
mesec=jmbg[2:4]
print("Dan rodjenja je: ",dan, " a mesec je: ",mesec)

Prebrojavanje karaktera niske:


Kada treba prebrojati broj nekog karaktera, to se radi upotrebom funkcije count.
Primer: rec = "ponedeljak"
Primer: rec.count("d") jednako 1
Primer: rec.count ("c") jednako 0, jer traženog karaktera nema u stringu
Primer: rec.count ("e") jednako 2
54. Zadatak:
Dat je tekst (niska) koji sadrži nekoliko jednostavnih rečenica. Odredi koliko među njima ima obaveštajnih, koliko ima upitnih i
koliko ima uzvičnih rečenica.
tekst= "Zdravo! Ja sam Marko! Kako se ti zoveš? Ja idem u šesti razred. A ti?"
obavestajnih=tekst.count(".")
print("Obaveštajnih ima: ", obavestajnih)
upitnih=tekst.count("?")
print("Upitnih ima: ", upitnih)
print("Uzvičnih ima: ",tekst.count("!"))

rec.startswith('a')
'a' in rec
rec.find('a')
55. Zadatak:
Data je reč 'Swaroop'. Proveriti početna slova (rec.startswith('Swa')), da li se nalazi neko slovo u njemu ('a' in rec), i da li sadrži niz
određenih slova (rec.find('war')).
rec = 'Swaroop'
if rec.startswith('Swa'):
print('Da, string pocinje sa "Swa"')
else:
print('Ne, string ne pocinje sa "Swa"')
if 'a' in rec:
print('Da, string u sebi ima slovo "a"')
else:
print('Ne, string u sebi nema slovo "a"')
if rec.find('war') != -1:
print('Da, string sadrzi slova "war"')
else:
print('Ne, string ne sadrzi slova "war"')
rec
Lista []: (Nazad na sadržaj-početak)
ime_liste=[pod0, pod1,...podn]
Elementima liste pristupa se na osnovu njihove pozicije tj. indeksa.
Brojanje kreće od nule, pa je prvom elementu liste moguće pristupiti sa ime_liste[0].
Liste su strukture podataka koje sadrže kolekciju nekih predmeta u nekom određenom rasporedu, odnosno vi možete da čuvate niz stavki unutar liste. Možete
to lako sebi predstaviti ako zamislite spisak za kupovinu, gde imate listu stavki za kupovinu, osim što ćete verovatno imate svaku stavku u posebnom redu u toj
vašoj listi za kupovinu, dok se u Python-u stavlja zarez između njih.
Spisak stavki treba da bude u uglastim zagradama, tako da Python razume da mu vi govorita da je u pitanju lista. Kada ste napravili listu, možete da dodate,
uklonite ili tražite stavke unutar liste. Pošto možemo dodavati i uklanjati stavke, mi kažemo da je lista promenljiv (mutable) tip podataka, odnosno ovaj tip
može biti menjan.
Lista je primer korišćenja objekata i klasa. Kada koristimo promenljivu i i kada joj dodelimo vrednost, recimo dodamo joj celobrojno 5, možete misliti o tome
kao o stvaranju objekta (tj.instance) i kojа je klase (tj. tipa) int (celobrojne vrednosti). U suštini, možete pročitati help(int) da bi ovo malo bolje razumeli.
Klasa takođe može imati metode, odnosno funkcije definisane samo za korišćenje u toj klasi. Vi možete koristiti te funkcionalnosti samo kada imate objekat te
klase.
Na primer, Python poseduje append metod za klasu list, koja vam omogućava da dodate stavku na kraju liste.
Na primer, mojalista.append('neka stvar') će dodati string 'neka stvar' u listu mojalista .
Obratite pažnju na upotrebu tačke kao oznake za pristup metodama nekog objekata.
Klasa može imati polja (field), koja nisu ništa drugo nego promenljive definisane za korišćenje samo u toj klasi. Možete koristiti ove promenljive/imena samo u
slučaju kada imate neki objekat iz te klase. Poljima se takođe pristupa oznakom sa tačkom, na primer, mojalista.polje .
61. Zadatak:
Poznat je spisak imena putnika u avionu. Sedišta su numerisana od 1 pa nadalje. Ako stjuardesa unese broj sedišta, napiši program
koji prikazuje ime putnika na tom sedištu.
putnici=["Ana1","Zoran2","Mila3","Dragan4","Alisa5"]
sediste=int(input("Broj sedišta: "))
print(putnici[sediste-1])

Negativni indeksi upućuju na brojanje od kraja (s desna na levo), pa je poslednjem elementu moguće pristupiti pomoću ime_liste [-1].
Elementi između pozicija a i b uključuju poziciju a, ali isključuju poziciju b.
62. Zadatak:
Ispiši imena putnika sa brojevima sedišta od 2, 3 i 4, kao i ime putnika koji sedi na poslednjem sedištu.
putnici=["Ana1","Zoran2","Mila3","Dragan4","Alisa5"]
print("Na mestima 2 do 4 se nalaze: ")
print(putnici[1:4])
print("Na poslednjem mestu se nalazi: ")
print(putnici[-1])

Može se odrediti indeks (pozicija) u listi na kojoj se nalazi traženi element upotrebom funkcije index koja vraća indeks prvog
pojavljivanja traženog elementa. Ukoliko traženog elementa u listi nema, dobiće se obaveštenje o grešci kada se program bude
izvršavao.
63. Zadatak:
Na kom sedištu sedi Dragan:
putnici=["Ana1","Zoran2","Mila3","Dragan4","Alisa5"]
rb= putnici.index("Dragan4")+1
print(rb)

Funkcije sa listama:
Funkcija len izračunava dužinu liste.
Funkcija sum izračunava zbir elemenata liste.
Funkcija min određuje vrednost najmanjeg elementa u listi.
Funkcija max određuje vrednost najvećeg elementa u listi.
Funkcija sorted sortira elemente liste.
Funkcija append dodaje element listi.
Funkcija del briše elemente liste.
64. Zadatak:
Ako su date Markove ocene iz 5 predmeta, napiši program koji će izračunati njegovu prosečnu ocenu.
ocene=[4,5,2,5,3]
prosek=sum(ocene) / len(ocene)
print(prosek)

65. Zadatak:
Sortirati Markove ocene.
ocene=[4,5,2,5,3]
sort_ocene=sorted(ocene)
print(sort_ocene)

66. Zadatak:
Data je lista cena proizvoda. Ispisati nesortirane, zatim sortirane cene, i izdati koliko koštaju tri najjeftinija, a koliko tri najskuplja
proizvoda?
cene=[10.5, 56.2, 33.8, 86.3, 47.4, 75.5, 8.6]
print("Nesortirane cene: ")
print(cene)
print("Sortirane cene: ")
sort_cene=sorted(cene)
print(sorted(cene))
jeftin=sort_cene[0]+ sort_cene[1]+ sort_cene[2] # ili jeftin= sum(sort_cene[0:3])
print(" cene: ")
print(jeftin)
skup=sort_cene[-1]+ sort_cene[-2]+ sort_cene[-3] #ili skup= sum(sort_cene[-3:])
print(skup)

67. Zadatak:
Date su cene tri proizvoda. Ko kupi sva tri, najjeftiniji će dobiti za dinar. Koliko će platiti?
cene=[56.2, 33.8, 86.3]
platiti=sum(cene)-min(cene)+1
print(platiti)

68. Zadatak:
Učitati ime, ispisati ga, i ispisati traženo slovo na osnovu rednog broja.
ime=input("Upisati ime: ")
print(ime)
rb=int(input("Redni broj slova za ispis: "))
print(ime[rb-1])

69. Zadatak:
Data je lista u kojoj se nalazi spisak nekoliko operativnih sistema. Ispiši sve elemente ove liste (svaki u posebnoj liniji). Dva rešenja:
op_sist=["windows","linux","android","ios"]
for sistem in op_sist:
print(sistem)

op_sist=["windows","linux","android","ios"]
for i in range(len(op_sist)):
print(i+1,op_sist[i])

69-1. Zadatak:
Ako je data lista koja sadrži parove imena i prezimena nekoliko naučnika, napiši program koji pravi njihov spisak.
Jedan način rešavanja ovog zadatka jeste da prođeš kroz listu parova kao kroz bilo koju drugu lista tj. da uvedemo promenljivu koja će imati redom vrednosti
jednog po jednog uređenog para. Pojedinačnim elementima para (imenu i prezimenu), onda možeš da pristupiti na osnovu indeksa u okviru para.
naucnici=[("Nils","Bor"),("Čarls","Darvin"),("Isak","Njutn"),("Marija","Kiri")]
for naucnik in naucnici:
print(naucnik[0], naucnik[1])
Slično, možeš upotrebiti i brojačku promenljivu koja će prolaziti kroz indekse liste i zatim svakom paru pristupati na osnovu njegovog indeksa u listi, a onda
svakom elementu para (imenu i prezimenu) pristupati na osnovu njegovog indeksa u paru.
naucnici=[("Nils","Bor"),("Čarls","Darvin"),("Isak","Njutn"),("Marija","Kiri")]
for i in range(len(naucnici)):
naucnik= naucnici[i]
print(naucnik [0], naucnik [1])
U ovom slučaju promenljive ime i prezime redom uzimaju imena i prezimena naučnika.
naucnici=[("Nils","Bor"),("Čarls","Darvin"),("Isak","Njutn"),("Marija","Kiri")]
for (ime,prezime) in naucnici:
print((ime,prezime) )

69-2. Zadatak:
Napiši program koji iz spiska zabeleženih najvećih dnevnih temperatura(lista) u januaru mesecu u nekom gradu ispisuje samo
temperature koje su bile ispod nula stepeni.
temp=[-2,4,-1,0,-5,6,8,-3]
neg_temp=[t for t in temp if t<0]
print(neg_temp)
69-3a. Zadatak:
Napiši program koji bi zadati tekst ispisao tako što bi izostavio svaku pojavu samoglasnika.
tekst="pera kojot super genije"
novi=[a for a in tekst if a not in {"a","e","i","o","u"}]
for slovo in novi:
print(slovo,end=" ")

69-3b. Zadatak:
Napiši program koji bi uneti tekst ispisao tako što bi izostavio svaku pojavu samoglasnika.
tekst= input("Unesi tekst: ")
novi=[a for a in tekst if a not in {"a","e","i","o","u"}]
for slovo in novi:
print(slovo,end=" ")

69-4. Zadatak:Promenljiva spisak je šoping lista za nekoga ko će da ide u prodavnicu. U spisak, mi čuvamo niz imena stavki za kupiti, ali zapamtite da možete
dodati bilo kakav objekat u listu, uključujući brojeve, pa čak i druge liste.
Takođe smo koristili for..in petlju da bi smo prelazili preko stavke na listi. Do sada, mora da ste shvatili da je lista takođe niz (sekvenca).
Obratite pažnju da koristimo end ključnu reč argumenta za print funkciju, što joj ukazuje na to da želimo da se izlazna linija završava sa razmakom umesto
uobičajenog novog reda.
Dalje, mi smo dodali stavku na listi koristeći append metod u listu predmeta, kao što je već razmatrano ranije. Zatim smo proverili da li je stavka zaista dodata u
listu, prikazivanjem sadržaja liste jednostavnim prosleđivanjem liste u print naredbu koja ja lepo prikaže.
Onda smo sortirali listu pomoću sort metode liste. Važno je da se shvati da ovaj metod utiče na samu listu i ne vraća (return) modifikovanu listu - već tu listu
zaista i menja! - ovo se bitno razlikuje od načina rada sa stringovima. To je upravo ono, na šta mislimo kada kažemo da su liste promenljive a da su stringovi
nepromenljivi.
Dalje, kad smo završite kupovinu stavke u prodavnici, želimo da je uklonimo iz liste. Mi smo to postigli pomoću del komande. Mi ćemo napisati koju stavku sa
liste želimo da uklonimo i del komanda to odradi za nas. Mi smo odredili da želimo da ukloni prvu stavku sa liste i time koristimo del spisak[0] (sećate se toga da
Python počinje brojanje od 0).
Ako želite da znate sve metode definisane objektom liste, pogledajte help(list) za detalje.
69-4. Zadatak:
Napraviti spisak za kupovinu kao listu, dodati jednu stvar, sortirati, pa ukloniti jednu stvar.
spisak= ['jabuka', 'mango', 'sargarepa', 'banana']
print('Ja imam', len(spisak), 'stvari da kupim.')
print('Te stvari su:', end = ' ')
for stvar in spisak:
print(stvar, end = ', ')
print('\nTakodje treba da kupim i pirinac. Dodajem ga na spisak.')
spisak.append('pirinac')
print('Moj spisak za kupovinu je sad', spisak)
print('Sada cu da sortiram moj spisak.')
spisak.sort()
print('Sortirana lista je', spisak)
print('Prva stvar koju cu kupiti je', spisak [0], ', brisem ga sa liste.')
kupljeno = spisak [0]
del spisak [0]
print('Kupio sam vec', kupljeno)
print('Moj spisak za kupovinu je sada', spisak)
Glavne karakteristike sekvenci su testovi članstva, (tj. in i not in ekspresije) i operacija indeksiranja, koje nam omogućavaju da direktno pristupimo određenoj
stavki unutar neke sekvence.
Sve tri vrste pomenutih sekvenci - liste, tuple i stringovi, takođe imaju operaciju isecanja (slicing) koja nam omogućava da preuzmemo parče (isečak) niza,
odnosno deo sekvence.
Prvo, vidimo kako se koriste indeksi da se dobiju pojedinačne stavke iz sekvence. Ovo se takođe naziva i operacija subskripcije. Kada god ste naveli broj u
sekvenci u uglastim zagradama, kao štoje prikazano gore, Python vam dostavlja stavku koja odgovara toj poziciji u sekvenci (nizu).
Zapamtite da Python počinje sa brojanjem brojeva od 0. Dakle, listakupovine[0] je prva stavka, a listakupovine[3] četvrta stavka u listakupovine nizu.
Indeks može biti negativan broj, u kom slučaju, pozicija objekta se izračunava od kraja niza. Dakle, listakupovine[-1] se odnosi na poslednju stavku u nizu, a
listakupovine[-2] na predposlednju stavku u nizu.
Operacija isecanja se upotrebljava navođenjem imena sekvence za kojim sledi opcioni par brojeva razdvojenih dvotačkom u uglastim zagradama. Imajte na
umu da je ovo veoma slično operaciji indeksiranja koju ste koristili do sada. Zapamtite: brojevi su neobavezni ali dvotačka je obavezna.
Prvi broj (pre dvotačke) u operaciji isecanja, se odnosi na poziciju odakle isečak počinje, a drugi broj (posle dvotačke) pokazuje gde će se zaustaviti sečenje. Ako
prvi broj nije naveden, Python će početi isecanje od početka niza. Ako je drugi broj izostavljen, Python će se zaustaviti na kraju niza.
Imajte na umu da deo koji dobijamo počinje na startnoj poziciji i da će se završiti ispred krajnjeg navedenog položaja, odnosno početna pozicija je uključena, ali
krajnja pozicija će da bude isključena iz odsečenog dela niza. Tako listakupovine[1:3] daje parče niza sa početkom u poziciji 1, uključuje položaj 2, ali se
zaustavlja na poziciji 3 i samim tim nam se vraća parče od dve stavke. Slično tome, listakupovine[:] vraća kopiju cele sekvence.
Takođe možete da radite odsecanje sa negativnim brojevima. Negativni brojevi se koriste da označe pozicije od kraja niza. Na primer, listakupovine[:-1] daje
deo niza koji isključuje poslednju stavku u nizu, ali sadrži sve ostale.
69-5. Zadatak:
Napraviti listu stvari za kupovinu, i jednu reč kao string. 1-Ispisati stvari i slova sa rednim brojevima(stvarnim i vidljivim), 2- ispisati
slova sa rednim brojevima(stvarnim i vidljivim), 3-ispisati par primera sečenja(izdvajanja) liste stvari, 4-ispisati par primera
sečenja(izdvajanja) slova.
listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
ime = 'swaroop'

print('1-Operacija indeksiranja ili Subscription liste stvari')


print('RB 0 je prva stvar', listakupovine[0])
print('RB 1 je druga stvar', listakupovine[1])
print('RB 2 je treca stvar', listakupovine[2])
print('RB 3 je cetvrta stvar', listakupovine[3])
print('RB -1 je poslednja stvar', listakupovine[-1])
print('RB -2 je pretposlednja stvar', listakupovine[-2])

print(' \n2-Operacija indeksiranja ili Subscription slova')


print('RB 0 je prvo slovo', ime[0])
print('RB 1 je drugo slovo', ime[1])
print('RB 2 je trece slovo', ime[2])
print('RB 3 je cetvrto slovo', ime[3])
print('RB 4 je peto slovo', ime[4])
print('RB 5 je sesto slovo', ime[5])
print('RB 6 je sedmo slovo', ime[6])

print(' \n3-secenje liste stvari')


print('RB od 1 do 3 su druga i treca stvar', listakupovine[1:3])
print('RB od 2 do kraja su treca do poslednje stvari', listakupovine[2:])
print('RB od 1 do -1 su druga do trece()pretposlednje stvari ', listakupovine[1:-1])
print('Stvari od pocetka do kraja su', listakupovine[:])

print(' \n4-secenje slova')


print('RB od 1 do 3 su drugo i trece slovo', ime[1:3])
print('RB od 2 do kraja su od treceg slova do kraja', ime[2:])
print('RB od 1 do -1 su od drugog slova do pretposlednjeg', ime[1:-1])
print('Slova od pocetka do kraja su', ime[:])
Takođe može da se navede i treći argument prilikom operacije isecanja, što predstavlja vrednost koraka pri sečenju (po podrazumevanom podešavanju, korak
je veličine 1):
Primetite da kada je vrednost koraka 2, dobijamo stavke sa pozicija 0, 2, ... Kada je korak veličine 3, dobijamo stavke sa pozicija 0, 3, itd.
69-6. Zadatak:
Primeri za listu i string za prikaz sadržaja na osnovu koraka(trećeg argumenta).
listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
ime = 'swaroop'
print('lista stvari sa korakom 1',listakupovine[::1] )
print('lista slova sa korakom 1',ime[::1] )
print('lista stvari sa korakom 2', listakupovine [::2] )
print('lista slova sa korakom 2',ime[::2] )
print('lista stvari sa korakom 3',listakupovine[::3] )
print('lista slova sa korakom 3',ime[::3] )
print('lista stvari sa korakom -1',listakupovine[::-1] )
print('lista slova sa korakom -1',ime[::-1] )
print('lista stvari sa korakom -2',listakupovine[::-2] )
print('lista slova sa korakom -2',ime[::-2] )
Kada napravite neki objekat i dodelite ga nekoj promenljivoj, promenljiva ima neki odnos (referencu) prema tom objektu i ne predstavlja sam taj objekat! To
jest, ime promenljive ukazuje na deo memorije računara gde je uskladišten taj objekat. To se zove izgradnja (definisanje-binding) imena objekta. Možete da
mislite o tome kao o prečicama na glavnom ekranu računara - možete da napravite prečicu, izbrišete, kopirate, ali program na koji se odnosi prečica i dalje
ostaje. Ali postojei izuzeci!
Zapamtite da ako želite da napravite kopiju liste ili neke slične vrste sekvenci ili kompleksnih objekata (ne mislimo na jednostavne objekte kao što su npr celi
brojevi), onda morate da koristite operaciju isecanja kako bi napravi kopiju originalnog objekta. Ako samo dodelite drugo ime varijable, oba imena će se
"odnositi" na isti objekat.
69-7. Zadatak:
Primer upotrebe reference.
listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
print('Kopiranje liste kupovine u moju listu pomocu obicne dodele vrednosti')
mojalista = listakupovine # mojalista je samo drugo ime koje se odnosi na isti objekat (listakupovine)
print(' Brisemo sa liste kupovine prvu stvar ')
del listakupovine[0]
print('listakupovine je', listakupovine)
print('mojalista je', mojalista) # obe liste prikazuju isti rez. bez obj. 'jabuka', sto potvrdjuj da one referisu na isti objekat
print('\nKopiranje liste kupovine u moju listu pomocu punog isecanja')
listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
mojalista = listakupovine[:] # pravimo kopiju tako sto isecamo sve objekte iz jedne liste
print(' Brisemo sa liste kupovine prvu stvar ')
del listakupovine[0]
print('listakupovine je', listakupovine)
print('mojalista je', mojalista) # sada primetite da su liste razlicite
Skup { }: (Nazad na sadržaj-početak)
Skup se definiše nabrajanjem elemenata skupa između vitičastih zagrada { }.
Primer: strelci = {"Mesi", "Ibrahimović", "Nejmar", "Ronaldo"}
Ako bi skup bio definisan ovako:
Primer: strelci = {"Mesi", "Ronaldo", "Mesi", "Ibrahimović", "Ibrahimović", "Nejmar", "Nejmar"}
rezultat naredbe kojom se ispisuju elementi skupa
Primer: print(strelci)
bi u oba slučaja bio isti, jer se svaki element ispisuje jedanput:
Rezultat: {'Mesi', 'Ibrahimović', 'Nejmar', 'Ronaldo'}
Skup je moguće formirati i od elemenata već definisane liste upotrebom funkcije set.
71. Zadatak:
Ispisati unapred određen spisak imena kao listu, potom ih prebaciti u skup, i ponovo ih ispisati.
igraci = ["Mesi", "Ronaldo", "Mesi", "Zidan", "Ibrahimović", "Nejmar", "Nejmar"]
print(igraci)
strelci = set(igraci)
print(strelci)

Funkcijom set može se i od niske dobiti skup karaktera.


72. Zadatak:
Karaktere reči "Popokatepetl" postaviti u skup. Ispisati ih kao elemente skupa.
rec="Popokatepetl"
karakteri=set(rec)
print(karakteri)
Ako su A i B skupovi, onda je
A | B njihova unija,
A & B njihov presek,
A - B njihova razlika.
73. Zadatak:
Jedan skup sadrži devojčice iz odeljenja koje treniraju ritmičku gimnastiku, a drugi one koje treniraju odbojku. Odredi skup
devojčica koje treniraju oba sporta, skup devojčica koje treniraju bar jedan od njih i skup devojčica koje treniraju samo odbojku.
ritmicka = {"Ana","Milica","Jovana","Gordana" }
odbojka = {"Tara","Nađa","Milica","Jovana","Aleksandra" }
dva_sporta = ritmicka & odbojka
bar_jedan_sport = ritmicka | odbojka
samo_odbojka = odbojka-ritmicka
print("Oba sporta treniraju: ")
print(dva_sporta)
print("Bar jedan sport treniraju: ")
print(bar_jedan_sport)
print("Samo odbojku treniraju: ")
print(samo_odbojka)

Rečnik je sličan adresaru, u kom možete naći adrese ili detalje o kontaktu osobe znajući samo njegovo/njeno ime, odnosno
povezujemo ključ (ime) sa vrednostima (detalji). Imajte na umu da ključ mora biti jedinstven baš kao što se ne može saznati tačna
informacija ako imate dve osobe sa totalno istim imenom.
Zapamtite da možete da koristite samo nepromenljive objekte (kao stringove) za ključeve u rečniku, ali možete da koristite bilo
nepromenljive ili promenljive objekate za vrednosti u rečniku. Ovo u suštini znači da treba da koristite samo jednostavne objekte
za ključeve u rečniku.
Parovi ključeva i vrednosti se definišu u rečniku pomoću notacije d = {kljuc1 : vrednost1, kljuc2 : vrednost2 } . Obratite pažnju da su
ključ-vrednost parovi razdvojeni dvotačkom, a međusobno su odvojeni zarezima, a sve ovo je zatvoren u par vitičastih zagrada.
Zapamtite da ključ-vrednost parovi u rečniku nisu razvrstani ni na koji način. Ako želite da dobijete određeni poredak, onda ćete
morati da ih sortirate pre nego što ih budete koristili.
Rečnici koje ćete koristiti su instance/objekti unutar dict klase.
74. Zadatak:
Neka je dat rečnik koji sadrži nazive nekoliko zemalja i njihove površine. Ispiši nazive i površine svih zemalja. Potom unesi naziv
samo jedne zemlje, i prikaži njegovu površinu.
povrsine={"Srbija":88600,
"Hrvatska":56500,
"Crna Gora":13800,
"Bosna i Hercegovina":51100,
"Slovenija":21000,
"Makedonija":25000}
print("Prikaz naziva i povr. svih zemalja: ")
for zemlja in povrsine:
print("Naziv: ", zemlja ,"Površina: ", povrsine[zemlja])
print("Prikaz naziva i povr. odabrane zemlje: ")
zemlja=input("Naziv zemlje: ")
print("Naziv: ", zemlja ,"Površina: ", povrsine[zemlja])

Može se koristiti metoda items().


74b. Zadatak:
...for (zemlja,povrsina) in povrsine.items():
print("Naziv: ", zemlja ,"Površina: ", povrsina)
Mi stvaramo rečnik ab koristeći notaciju koju smo već razmotrili. Zatim smo pristupili parovima ključ-vrednost navođenjem ključa pomoću operatora
indeksiranja kao što je objašnjeno u kontekstu liste i tuple. Obratite pažnju na jednostavnu sintaksu.
Možemo obrisati par ključ-vrednost koristeći našeg starog prijatelja - del komandu. Mi smo jednostavno naveli rečnik i ključ kao vrednost za operator
indeksiranja za par koji želimo da se ukloni i navodimo ga u del komandi. Nema potrebe da se zna vrednost koja odgovara ključu za ovu operaciju brisanja.
Dalje, mi smo pristupili svakom paru ključ-vrednost unutar rečnika korišćenjem items metode rečnika koji nam vraća listu tupli gde svaka tupla sadrži par stavki
- ključ praćen vrednosti. Mi preuzmemo ovaj par i dodelimo ga varijablama ime i adresa odgovarajućim navedenim redosledom. Za svaki taj par koristimo
for..in petlju i onda prikazujemo ove vrednosti u for bloku.
Možemo dodati nove parove ključ-vrednost jednostavno pomoću operatora indeksiranja koji pristupa ključu i dodeljuje mu vrednost, kao što smo uradili za
Genija u navedenom primeru.
Možemo da proverimo da li postoji par ključ-vrednost u nekom rečniku koristeći in naredbu. Za listu metodama dict klase, pogledajte help(dict) .
Argumenti ključnih reči i rečnici
Jedno drugo razmišljanje, ako ste koristili argumente ključnih reči u svojim funkcijama, onda ste već koristili rečnike! Samo razmislite o tome - to je par ključ-
vrednost koji ste definisali u listi parametara pri definiciji funkcije i kada pristupate promenljivoj u okviru vaše funkc., navodite samo ključ koji pristupa rečniku
75. Zadatak:
Dat je rečnik sa podacima mail adrese 4 osobe. 1-ispisati ih, 2-ispisati samo adresu trolera, 3-obrisati jednu osobu i ispisati ih, 4-
dodati jednu osobu i ispisati ih, 5-proveriti da li je dodata nova osoba i ispisati samo njega.
ab = {'Pandimenzionalni' : 'pd@ma.cme',
'mega' : 'mno@hoo.moo',
'giga' : 'kokos@kokoda.lom',
'troler' : 'gong@pong.pet'}
print('\1-Imamo {0} kontakata u adresaru\n'.format(len(ab)))
for ime, adresa in ab.items():
print('Kontaktiraj {0} na {1}'.format(ime, adresa))
print("\n2-Trolova adresa je", ab['troler'])
del ab['troler'] # brisanje para kljuc-vrednost
print('\n3-Obrisana je osoba troler. Imamo {0} kontakata u adresaru\n'.format(len(ab)))
for ime, adresa in ab.items():
print('Kontaktiraj {0} na {1}'.format(ime, adresa))
ab['Genije'] = 'popara@lebac.voda' # Dodavanje para kljuc-vrednost
print('\n4-Dodata je nova osoba genije. Imamo {0} kontakata u adresaru\n'.format(len(ab)))
for ime, adresa in ab.items():
print('Kontaktiraj {0} na {1}'.format(ime, adresa))
if 'Genije' in ab:
print('\n5-Adresa genija je', ab['Genije'])
Torke, Tuple (): (Nazad na sadržaj-početak)
Definiše se nabrajanjem elemenata skupa između malih zagrada ().
Tuple se koriste za držanje više objekata zajedno, na jednom mestu. Mislite o njima kao da su slične listama, ali bez mnogih funkcionalnosti koje klasa lista
pruža. Jedna od glavnih karakteristika tuple je da su one nepromenljive kao i stringovi, odnosno ne možete da modifikuje podatke.
Tuple se definišu tako što navodimo stavke razdvojene zarezima unutar opcionih zagrada ().
Tuple se obično koriste u slučajevima kada naredba ili korisnički-definisana funkcija može bezbedno da pretpostavi da kolekcija vrednosti, odnosno, da se tuple
korišćenih vrednosti neće promeniti.
81. Zadatak:
Lokacija Pariza po geog.širini i dužini je data kao torka. Prikazati ih razdvojeno.
Pariz=(48.8, 2.3)
sirina= Pariz[0]
duzina= Pariz[1]
print("Geog.širina: ", sirina)
print("Geog.dužina: ", duzina)
82. Zadatak:
Napiši program koji za uneti redni broj meseca ispisuje njegov naziv i broj dana u godini koja nije prestupna. Spisak svih meseci i
broja dana spremiti kao listu. A svaki mesec i broj dana posebno kao torku.
meseci = [("јануар", 31), ("фебруар", 28), ("март", 31), ("април", 30), ("мај", 31), ("јун", 30), ("јул", 31), ("август", 31),
("септембар", 30), ("октобар", 31), ("новембар", 30), ("децембар", 31)]
broj=int(input("Унети редни број месеца: "))
mesec=meseci[broj-1]
print("Месец је: ", mesec[0], " број дана је:" , mesec[1])

Rečnici:
Liste ti daju mogućnost da organizuješ podatke za koje je poznat neki redosled i u kojima svaki podatak ima svoj redni broj (na
primer, listu smo upotrebili da organizujemo imena putnika u avionu ili podatke o mesecima u godini) i pristup elementima liste
vrši se na osnovu njihovog indeksa (rednog broja, tj. pozicije).
Međutim, često se podaci organizuju tako da su prilagođeni specijalnoj vrsti pretrage, kao što je pretraga u kojoj na osnovu datog
ključa želimo da pristupimo vrednosti koja je pridružena tom ključu.
Na primer, automobili u katalogu imaju pridružene cene i mi želimo da u našem programu možemo da odredimo cenu automobila
na osnovu njegovog modela (to znači da model predstavlja ključ po kojem vršimo pretragu).
U tim situacijama je dobro iskoristiti drugu vrstu strukture koju nudi Python a to je rečnik (često se naziva i mapa ili asocijativni
niz).
83. Zadatak:
Napiši program koji za uneti naziv marke automobila ispisuje njegovu cenu. Spisak auta je dat u obliku skupa.
cene_auta={"fiat 500":11900, "renault clio":9900, "citroen c4":13900}
auto=input("Unesi model auta: ")
print(cene_auta[auto])

84. Zadatak:
Poznate su geografske koordinate nekoliko glavnih evropskih gradova. Za dato ime grada odredi njene geografske koordinate.
Odredi posebno geografsku dužinu i posebno geografsku širinu. Spisak gradova i položaja je dat u obliku skupa, a svaki položaj
grada posebno kao torka.
gradovi={"Beograd":(44.7, 20.4), "Budimpesta":(47.4, 19.0), "Bec":(48.2, 16.3), "Bratislava":(48.1, 17.1) }
grad=input("Unesi ime grada: ")
koordinate= gradovi[grad]
print(koordinate)
print("Geog.širina: ", koordinate[0])
print("Geog.dužina: ", koordinate[1])
Promenljiva zoo se odnosi na tuplu nekih stavki. Vidimo da len funkcija može da se koristi da bi se dobila dužina tuple. Ovo takođe ukazuje na to da je takođe i
tupla sekvenca.
Mi sada selimo ove životinje u novi zoološki vrt, jer se stari zoo vrt zatvara. Dakle, novi_zoo tupla sadrži neke životinje koje su već tu, zajedno sa životinjama
koje smo doveli iz starog zoološkog vrta. Da se vratimo u realnost, imajte na umu da tuple unutar neke druge tuple ne gube svoj identitet (tj i dalje su - tuple, a
ne pojedinačni objekti koji su sačinjavali staru tuplu).
Možemo pristupiti stavkama unutar tuple navodeći položaj te stavke u paru uglastih zagrada baš kao što smo uradili za liste. Ovo se zove operator indeksiranja.
Pristupamo trećoj stavki u novi_zoo navodeći novi_zoo[2], a da bi smo pristupili trećoj stavki u okviru treće stavke u novi_zoo tupli navodimo novi_zoo[2][2] .
Ovo je prilično jednostavna kada shvatite poentu.
Zagrada '()'
Iako su zagrade opcioni element tuple, uvek bi trebalo da ih navodimo da bi postalo očigledno da je to tupla, pogotovo zato da bi se izbegavala dvosmislenost.
Na primer, print(1,2,3) i print( (1,2,3) ) su dve različite stvari - prvi prikazuje tri broja, dok druga prikazuje tuple (koji sadrži tri broja).
Tuple sa 0 ili sa 1 stavkom
Prazna tupla se konstruiše sa praznim zagradama, kao što je npr. mojaprazna = () . Međutim, za tuple sa samo jednom stavkom to nije tako jednostavno.
Morate je navesti koristeći zarez posle prve (i jedine) stavke, tako da Python može razlikovati tuple i par zagrada koje okružuju objekat u nekom izrazu,
odnosno morate da odredite singlica = (2 , ) , ako želite tuplu koja sadrži samo stavku 2.
85. Zadatak:
Upotrebom torki napraviti spisak životinja u zoo,1- ispisati ih i 2-koliko ih je, dodati dve nove životinje, 3-ispisati sve i 4-koliko ih je
sada, 5-ispisati životinje iz starog, 6-ispisati poslednju životinju iz starog, i 7-ponovo ispisati na drugi način sadašnji ukupan broj.
zoo = ('piton', 'slon', 'pingvin')
print('1-Sve zivotinje u starom zooloskom vrtu su', zoo)
print('2-Broj zivotinja u starom zooloskom vrtu je', len(zoo))
novi_zoo = 'majmun', 'kamila', zoo
print('3-Sve zivotinje u novom zooloskom vrtu su', novi_zoo)
print('4-Broj zivotinja u novom zooloskom vrtu je', len(novi_zoo)-1+ len(zoo)) #len(novi_zoo) ima na spisku 3 stavke, zato mora -1.
print('5-Zivotinje koje su donete iz starog zooloskog vrta su',novi_zoo[2]) #treći element(0,1,2) od novi_zoo je zoo, koji sadrži stare 3 životinje.
print('6-Poslednja zivotinja doneta iz starog zooloskog vrta je',novi_zoo[2][2]) #treći element(0,1,2) od novi_zoo je zoo, koji sadrži stare 3
životinje(0,1,2), poslednja treća životinja ima redni broj 2.
print('7-Broj zivotinja u novom zooloskom vrtu je', len(novi_zoo)-1+len(novi_zoo[2]))
Crtanje: (Nazad na sadržaj-početak)

pg.init() uključivanje rada biblioteke


pg.quit() isključivanje rada biblioteke
pg.display.set_caption("Naslov prozora") postavljanje naslova prozora
prozor = pg.display.set_mode((sirina ,visina)) uključivanje prozora date dimenzije
pg.Color("Naziv boje") vraća boju čiji smo naziv naveli
prozor.fill(boja) boji pozadinu prozora u datu boju
pg.draw.objekat(prozor, boja, temena, debljina) crta objekat
pg.display.update() osvežava prikaz prozora
pg.time.wait(ms) pauzira izvršavanje za dati broj milisekundi
pg.event.wait() čekanje do narednog događaja, koji funkcija vraća
dogadjaj.type vrsta događaja
pg.QUIT događaj isključivanja prozora

import pygame as pg #određivanje skraćenog naziva (pg, može bilo šta) za objekat pygame-a
pg.init() # uključivanje rada biblioteke PyGame
pg.quit() # isključivanje rada biblioteke PyGame

pg.display.set_caption("naziv") #postavljamo naslov prozora


pg.display.update() # osvežavamo sadržaj prozora, umesto funkcije/reči update može i flip

pg.display.set_mode((sirina, visina)) # prikazujemo prozor tih dimenzija(vrednost može biti od promenljive ili direktno od
vrednosti), zbog kasnije upotrebe treba zapamtiti u neku promenljive. Koordinata tačke možemo predstaviti bilo
dvočlanom torkom (x, y) bilo dvočlanom listom [x, y].
Primer: ime_prozora = pg.display.set_mode(( sirina, visina))

ime_prozora.fill(pg.Color("boja")) # bojimo pozadinu prozora u tu boju. Boja se može prikazati eng.rez.rečima, ili sa RGB paletom

pg.time.wait(vreme_trajanja) # čekamo vreme_trajanja milisekundi (1 sekunda = 1000 milisekundi)

while pg.event.wait().type != pg.QUIT:


pass #pass ne radi ništa, ponavlja se while uslov, do zatvaranja prozora (QUIT)

Za crtanje osnovnih objekata(koriste se rezervisane reči- linija, pravougaonik, mnogougaonik, krug, elipsa,...) koristi se naredba:
pg.draw.osnovni_objekat(ime_prozora, pg.Color("boja"), pozicije_objekta, debljina_linije)
gde se podvučeno ne menja.
-----
pg.draw.line(ime_prozora, pg.Color("boja"), (x1,y1), (x2, y2), debljina_linije) #crtamo liniju bojom “boja”, od tacke sa
koordinatama (x1, y1) do tacke sa koordinatama (x2, y2) (x je za poziciju po horizontali, a y
po vertikali), debljine “debljina_linije” piksela.
91a. Zadatak:
Stvoriti pygame prozor sa naslovom “Crtanje 1” dimenzija 400*400, sa žutom pozadinom, nacrtati crnu liniju dužine 200, debljine
5 piksela, prikazivati ga 3 sekunde.
import pygame as pg
pg.init()
pg.display.set_caption("Crtanje 1")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("yellow")) # bojimo pozadinu prozora u belo
pg.draw.line(prozor, pg.Color("black"), (100, 100), (300, 300), 5) # crtamo crnu duz od tacke sa koordinatama (100, 100) do tacke sa koordinatama (300, 300) debljine 5 piksela
pg.display.update()
pg.time.wait(3000)
pg.quit()

91b. Zadatak:
Napiši program koji iscrtava simbol plus (zeleno-plave boje) u centru prozora dimenzije 200x200 piksela. Simbol se sastoji od jedne
horizontalne i jedne vertikalne duži dužine 100 piksela i debljine 10 piksela.
import pygame as pg
pg.init()
pg.display.set_caption("Plus")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
debljina = 10 # debljina linija je 10 piksela
pg.draw.line(prozor, pg.Color("green"), (100, 50), (100, 150), debljina) # vertikalna linija
pg.draw.line(prozor, pg.Color("blue"), (50, 100), (150, 100), debljina) # horizontalna linija
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

91c. Zadatak:
Napiši program koji pomoću tri linije iscrtava belo slovo A u sivom prozoru.
import pygame as pg
pg.init()
pg.display.set_caption("Slovo A")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("gray"))
debljina = 10
pg.draw.line(prozor, pg.Color("white"), (100,20), (40,180), debljina) # leva kosa linija
pg.draw.line(prozor, pg.Color("white"), (100,20), (160,180), debljina) # desna kosa linija
pg.draw.line(prozor, pg.Color("white"), (60,130), (140,130), debljina) # horizontalna linija po sredini
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

91d. Zadatak:
Napiši program koji pomoću linija iscrtava slovo M u prozoru.
import pygame as pg
pg.init()
pg.display.set_caption("Slovo M")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("gray"))
debljina = 10
# vertikalne koordinate tačaka
gore = 50
sredina_v = 120
dole = 150
# horizontalne koordinate tačaka
levo = 50
sredina_h = 100
desno = 150
pg.draw.line(prozor, pg.Color("white"), (levo,gore), (levo,dole), debljina) # leva vertikalna linija
pg.draw.line(prozor, pg.Color("white"), (levo,gore), (sredina_h,sredina_v), debljina) # kosa linija leva
pg.draw.line(prozor, pg.Color("white"), (desno,gore), (sredina_h,sredina_v), debljina) # kosa linija desna
pg.draw.line(prozor, pg.Color("white"), (desno,gore), (desno,dole), debljina) # desna vertikalna linija
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

91e. Zadatak:
Napiši program koji pomoću linija iscrtava slovo W u prozoru.
import pygame as pg
pg.init()
pg.display.set_caption("Slovo W")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("gray"))
debljina = 10
# sredina prozora
sredina = ???
# jedinična dimenzija slova
dim = 25
# koordinate karakterističnih tačaka
levo1 = ???
desno1 = ???
levo2 = ???
desno2 = ???
gore = ???
dole = ???

Alevo = (???, ???)


Adesno = (???, ???)
Blevo = (???, ???)
Bdesno = (???, ???)
C = (???, ???)
# iscrtavamo slovo pomoću duži
pg.draw.line(prozor, pg.Color("white"), ???, Blevo, debljina)
pg.draw.line(prozor, pg.Color("white"), ???, C, debljina)
pg.draw.line(prozor, pg.Color("white"), ???, Bdesno, debljina)
pg.draw.line(prozor, pg.Color("white"), ???, Adesno, debljina)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
91f. Zadatak:
Napiši program koji iscrtava jednakostranični trougao čije je težište u centru ekrana, dužina stranice 100 piksela, donja stranica
postavljena horizontalno i obojena u crveno, leva ivica obojena u plavo, a desna ivica obojena u zeleno.
import pygame as pg, math
pg.init()
pg.display.set_caption("Једнакостранични троугао")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# dužina stranice trougla
a = 100
# visina trougla
h = ???
# koordinate sredine prozora
sredina = sirina / 2
# koordinate temena - težiste deli visinu u odnosu 1 : 2
A = (???, ???)
B = (???, ???)
C = (???, ???)
# debljina linije
debljina = 2
# crtamo tri duži različitih boja
???(prozor, pg.Color("red"), A, B, debljina)
???(prozor, pg.Color("green"), B, C, debljina)
???(prozor, pg.Color("blue"), C, A, debljina)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

rect #pravougaonik
pg.draw. rect(prozor, boja, temena(x1,y1,x2,y2), debljina_okvira)

pg.draw.rect(prozor, pg.Color("black"), (50, 50, 200, 100), 1) # crtamo pravougaonik sa crnim okvirom. Prva dva broja su za levi
gornji ugao, a druga dva za donji desni ugao.
pg.draw.rect(prozor, pg.Color("red"), (75, 75, 150, 50)) # crtamo pravougaonik obojen u crveno
92a. Zadatak:
Nacrtati 4 pravougaonika jedan pored drugog, različitih ispunjenih boja, sa upotrebom RGB palete.
import pygame as pg, math
pg.init()
pg.display.set_caption("Pravougaonici")
(sirina, visina) = (200, 50)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
CRVENA = (255, 0, 0)
ZELENA = (0, 255, 0)
PLAVA = (0, 0, 255)
CRNA = (0, 0, 0)
# crtamo 4 kvadrata
pg.draw.rect(prozor, CRVENA, (0, 0, 50, 50))
pg.draw.rect(prozor, ZELENA, (50, 0, 50, 50))
pg.draw.rect(prozor, PLAVA, (100, 0, 50, 50))
pg.draw.rect(prozor, CRNA, (150, 0, 50, 50))
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

92b. Zadatak:
Nacrtati glavu robota, različitih ispunjenih boja.
import pygame as pg, math
pg.init()
pg.display.set_caption("Pravougaonici")
(sirina, visina) = (300, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
pg.draw.rect(prozor, pg.Color("orange"), (50, 50, 200, 200))
pg.draw.rect(prozor, pg.Color("blue"), (90, 90, 40, 40))
pg.draw.rect(prozor, pg.Color("green"), (170, 90, 40, 40))
pg.draw.rect(prozor, pg.Color("black"), (130, 170, 40, 40))
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

92c. Zadatak:
Nacrtati glavu robota, različitih ispunjenih boja. Menjati dimenziju glave i ostalih delova, u zavisnosti od dimenzije prozora, koje se
unose na početku.
import pygame as pg, math
pg.init()
pg.display.set_caption("Pravougaonici")
sirina=int(input("Sirina:"))
visina=int(input("Visina:"))
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
pg.draw.rect(prozor, pg.Color("orange"), (50, 50, 200, 200))
pg.draw.rect(prozor, pg.Color("blue"), (90, 90, 40, 40))
pg.draw.rect(prozor, pg.Color("green"), (170, 90, 40, 40))
pg.draw.rect(prozor, pg.Color("black"), (130, 170, 40, 40))
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
92d. Zadatak:
Napiši program koji iscrtava celu roboticu Micu (kao što je prikazano na slici). Telo (trup) joj je kvadratnog oblika, centar mu se
nalazi u centru ekrana, a dimenzija mu je zadata promenljivom telo. Ostale dimenzije su već zadate u programu koji treba da
dopuniš, a ti treba da odrediš neke nedostajuće koordinate.
import pygame as pg
pg.init()
pg.display.set_caption("Robot")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
# definišemo boje koje cemo koristiti
SIVA = (250, 250, 250)
CRVENA = (255, 0, 0)
PLAVA = (0, 0, 255)
# debiljina linije
debljina = 3
prozor.fill(SIVA)
# koordinata sredine prozora
(cx, cy) = (sirina / 2, visina / 2)
# telo
telo = 120
telo_x = ???
telo_y = cy - telo / 2
pg.draw.rect(prozor, PLAVA, (telo_x, telo_y, telo, telo), debljina)
# haljina
haljina_x = telo_x
haljina_visina = telo / 8
haljina_y = ???
pg.draw.rect(prozor, CRVENA, (haljina_x, haljina_y, telo, haljina_visina))
# glava
glava = 3 * telo / 4
glava_x = ???
glava_y = ???
pg.draw.rect(prozor, PLAVA, (glava_x, glava_y, glava, glava), debljina)
# oci
oko = glava / 5
zenica = oko / 3
oko_y = ???
levo_oko_x = ???
desno_oko_x = cx + oko / 2
pg.draw.rect(prozor, CRVENA, (levo_oko_x, oko_y, oko, zenica), 1)
pg.draw.rect(prozor, CRVENA, (desno_oko_x, oko_y, oko, zenica), 1)
# zenice
pg.draw.rect(prozor, CRVENA, (levo_oko_x + zenica, oko_y, zenica, zenica))
pg.draw.rect(prozor, CRVENA, (desno_oko_x + zenica, oko_y, zenica, zenica))
# usta
usta_sirina = glava / 3
usta_visina = usta_sirina / 3
usta_y = ???
pg.draw.rect(prozor, CRVENA, (glava_x + usta_sirina, usta_y, usta_sirina, usta_visina))
# noge
noga_sirina = telo / 3
noga_duzina = noga_sirina * 3
leva_noga_x = ???
leva_noga_y = telo_y + telo
desna_noga_x = ???
desna_noga_y = ???
pg.draw.rect(prozor, PLAVA, (leva_noga_x, leva_noga_y, noga_sirina, noga_duzina), debljina)
pg.draw.rect(prozor, PLAVA, (desna_noga_x, desna_noga_y, noga_sirina, noga_duzina), debljina)
# ruke
ruka_sirina = telo / 6
ruka_duzina = ruka_sirina * 4
ruka_y = ???
leva_ruka_x = ???
desna_ruka_x = ???
pg.draw.rect(prozor, PLAVA, (leva_ruka_x, ruka_y, ruka_duzina, ruka_sirina), debljina)
pg.draw.rect(prozor, PLAVA, (desna_ruka_x, ruka_y, ruka_duzina, ruka_sirina), debljina)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

92e. Zadatak:
A4 papir je dimenzija 210x297 milimetara. Na njegovoj sredini se štampa tekst, pri čemu se sa sve četiri strane ostavlja margina
koja je 10 procenata dimenzije papira (leva i desna margina su 10 procenata širine, a gornja i donja margina su 10 procenata visine
papira). Napiši program koji plavom bojom obeležava sadržaj papira. Program treba da radi ispravno i kada se dimenzija papira (tj.
prozora) promeni.
import pygame as pg
pg.init()
pg.display.set_caption("Маргине")
(sirina, visina) = (210, 297)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# crtamo sadrzaj stranice
procenat_margine = 0.1
pocetak_sadrzaja_x = ???
pocetak_sadrzaja_y = ???
sirina_sadrzaja = ???
visina_sadrzaja = ???
pg.draw.rect(prozor, pg.Color("blue"),
(pocetak_sadrzaja_x, pocetak_sadrzaja_y,
sirina_sadrzaja, visina_sadrzaja))
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

polygon
pg.draw. polygon(prozor, boja, temena, debljina_okvira)

Mnogougao se crta funkcijom pg.draw.polygon čiji su parametri redom prozor na kom se crta, zatim boja i nakon toga lista
uređenih parova koji predstavljaju koordinate temena mnogougla. Mnogougao se sastoji od duži koje spajaju susedna temena u
navedenoj listi. Podrazumeva se da je mnogougao zatvoren, tj. da mnogougao sadrži i liniju između poslednjeg i prvog temena.
Ako se iza liste temena navede debljina, crta se samo ivica mnogougla, a ako se taj argument izostavi ili se navede nula, onda se
mnogougao ispunjava bojom.
# temena mnogougla
temena = [(50, 300), (50, 150), (150, 50), (250, 150), (250, 300)]
# crtamo mnogougao popunjen crvenom bojom, pošto ne zadajemo debljinu okvira
pg.draw.polygon(prozor, pg.Color("red"), temena)
# crtamo samo crni okvir oko mnogougla
pg.draw.polygon(prozor, pg.Color("black"), temena, 3)
93a. Zadatak:
Nacrtati petougaonik, sa crvenom bojom i crnim okvirom debljine 3. Menjati vrednosti okvira
import pygame as pg, math
pg.init()
pg.display.set_caption("Mnogougao")
(sirina, visina) = (300, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# temena mnogougla
temena = [(50, 300), (50, 150), (150, 50), (250, 150), (250, 300)]
# crtamo mnogougao popunjen crvenom bojom
pg.draw.polygon(prozor, pg.Color("red"), temena)
# crtamo crni okvir oko mnogougla
pg.draw.polygon(prozor, pg.Color("black"), temena, 3)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
93b. Zadatak:
Nacrtati jelku.
import pygame as pg, math
pg.init()
pg.display.set_caption("Јелка")
(sirina, visina) = (300, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# boje koje cemo koristiti
ZELENA = (0, 100, 36)
BRAON = (97, 26, 9)
# stablo
pg.draw.rect(prozor, BRAON, (130, 250, ???, ???))
# krošnja
pg.draw.polygon(prozor, ZELENA, [(50, 250), (150, 150), (250, 250)])
pg.draw.polygon(prozor, ZELENA, [(75, ???), (150, 100), (???, 200)])
pg.draw.polygon(prozor, ???, [(100, 150), (???, ???), (200, ???)])
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
circle
pg.draw.circle (prozor, boja, centar, poluprecnik,debljina_okvira)
Ako se debljina okvira ne zada. boji se celi objekat.
# crtamo krug sa crveni okvirom
pg.draw.circle(prozor, pg.Color("red"), (50, 50), 30, 2)

# crtamo u plavo obojen krug


pg.draw.circle(prozor, pg.Color("blue"), (150, 150), 30)
94a. Zadatak:
Na plavom nebu nacrtati žuto sunce, i par belih oblaka.
import pygame as pg
pg.init()
pg.display.set_caption("Медведић")
(sirina, visina) = (300, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# pozadina u plavo
prozor.fill(pg.Color("skyblue"))
# sunce
pg.draw.circle(prozor, pg.Color("yellow"), (100, 100), 80)
# oblak od tri kruga
pg.draw.circle(prozor, pg.Color("white"), (200, 200), 80)
pg.draw.circle(prozor, pg.Color("white"), (120, 200), 50)
pg.draw.circle(prozor, pg.Color("white"), (280, 200), 50)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

94b. Zadatak:
Nacrtati glavu medvedića od krugova. Koristiti funkciju def(potprogram).
import pygame as pg
pg.init()
pg.display.set_caption("Медведић")
(sirina, visina) = (300, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))

# procedura/funkcija kojom se crta obojen krug okruzen crnim okvirom


def uokviren_krug(prozor, boja, centar, poluprecnik):
boja2=pg.Color("black")
# crtamo ispunjen krug
pg.draw.circle(prozor, boja, centar, poluprecnik)
# uokvirujemo ga crnom kruznicom - pg.draw.circle(prozor, boja2, centar, poluprecnik, 1)
pg.draw.circle(???, ???, ???, ???, ???)

# levo uvo
uokviren_krug(prozor, pg.Color("yellow"), (90, 80), 45)
# desno uvo - uokviren_krug(prozor, pg.Color("yellow"), (195, 80), 45)
???
# glava
uokviren_krug(prozor, pg.Color("yellow"), (150, 150), 100)
# njuska - uokviren_krug(prozor, pg.Color("yellow"), (150, 200), 45)
???
# levo oko
uokviren_krug(prozor, pg.Color("black"), (100, 120), 15)
# crtamo desno oko - uokviren_krug(prozor, pg.Color("black"), (200, 120), 15)
???
# nos
uokviren_krug(prozor, pg.Color("black"), (150, 170), 15)

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

94c. Zadatak:
Funkcijom iscrtati oblake na nekoj poziciji, neke veličine i nekoj nijansi sive boje, pa pozvati par puta funkciju da bi se nacrtalo par
oblaka.
import pygame as pg, math
pg.init()
pg.display.set_caption("Облаци")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("skyblue"))
# crtamo sunce
pg.draw.circle(prozor, pg.Color("yellow"), (100, 100), 80)
# procedura koja crta oblak na datoj poziciji, date velicine u datoj nijansi sive boje

def oblak(x, y, r, siva):


# nijansa sive boje
boja = [???, ???, ???]
# crtamo oblak od tri kruga
# centralni veliki krug oblaka
pg.draw.circle(???, ???, ???)
# poluprecnik levog i desnog, manjeg kruga oblaka
r_malo = round(5 * r / 8)
# levi manji krug oblaka
pg.draw.circle(???, ???, ???)
# desni manji krug oblaka
pg.draw.circle(???, ???, ???)

# crtamo nekoliko oblika razlicite velicine i nijanse


oblak(240, 200, 40, 180)
oblak(270, 250, 50, 210)
oblak(230, 100, 50, 230)
oblak(80, 80, 30, 150)
oblak(110, 320, 60, 255)

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
94d. Zadatak:
Napiši program koji iscrtava krug u centru ekrana čija je površina tačno tri četvrtine površine prozora.
Centar kruga se nalazi u centru ekrana (čije se koordinate lako izračunavaju deljenjem širine i visine ekrana sa 2). Ključni deo ovog
zadatka je zapravo čisto matematički. Na osnovu veze između dve površine potrebno je izračunati poluprečnik kruga. Obeležimo
dimenzije prozora sa s i v. Površina prozora je tada Pp=s⋅v. Ako je poluprečnik kruga r, tada je njegova površina Pk=r2⋅π. Iz
uslova Pk=34Pp sledi da je r2⋅π=34⋅s⋅v. Odatle je r=√ 34⋅s⋅vπ . Podsetimo se da se kvadratni koren može jednostavno izračunati
pomoću bibliotečke funkcije math.sqrt.
import pygame as pg, math
pg.init()
pg.display.set_caption("Круг три четвртине прозора")
(sirina, visina) = (300, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))

# centar kruga je u centru ekrana


(cx, cy) = (???, ???)
# izracunavamo poluprečnik kruga
r = ???
# crtamo krug - zaokruži koordinate na najbliže cele brojeve
pg.draw.circle(prozor, pg.Color("purple"), (???, ???), ???)

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
94e. Zadatak:
Napiši program koji iscrtava cvet koji se sastoji od centralnog žutog kruga prečnika 100 piksela, oko kojeg se nalazi 6 pravilno
raspoređenih latica roze boje, svaka u obliku kruga, takođe prečnika 100 piksela (centri latica se nalaze u temenima pravilnog
šestougla, čiji je centar u centru cveta, a dužina stranice je 100 piksela).
Za crtanje kruga potrebno je znati koordinate centra i dužinu poluprečnika kruga. Prečnik svih krugova je jednak, samim tim i
poluprečnik r=a2. Neka je tačka O centar žutog, centralnog kruga. Koordinate ove tačke označimo sa (cx,cy). Ova tačka se nalazi u
centru prozora i njene koordinate jednake su polovini visine, odnosno širine prozora. Dakle, (cx, cy) = (visina // 2,
sirina // 2). Koordinate ostalih centara krugova izrazićemo takođe preko koordinata (cx,cy) . Koordinate tačke A1 označimo
sa (x1,y1). Tačka A1 je za a pomerena (translirana) od tačke O po osi x, tako da je x1, prva koordinata ove tačke jednaka
x1=cx+a, a druga koordinata ove tačke y1 jednaka je y koordinati tačke O, tj. y1=cy. Koordinate tačke A2 označimo sa (x2,y2).
Ova tačka je u odnosu na tačku O pomerena (translirana) za a2 po osi x, odnosno za visinu h=a√ 3 2 jednakostraničnog trougla
△OA1A2 po osi y. Na osnovu ovoga zaključujemo da su koordinate tačke A2, (x2,y2)=(cx+a2,cy+h). Koordinate centra ostalih
krugova određujemo na sličan način.

import pygame as pg, math


pg.init()
pg.display.set_caption("Цвет")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
# boje koje ćemo koristiti
BELA = (255, 255, 255)
ZUTA = (255, 255, 0)
ROZE = (255, 200, 200)

# bojimo pozadinu u belo


prozor.fill(BELA)

# koordinate centra prozora


(cx, cy) = (???, ???)

# precnici krugova - duzina stranice pravilnog sestougla u cijim se


# temenima nalaze centri krugova
a = 100
# visina karakteristicnog trougla sestougla
h = round(???)

# sva temena sestougla dele ove koordinate


x1 = cx - a
x2 = ???
x3 = cx + a//2
x4 = ???
y1 = ???
y2 = cy
y3 = ???

# koordinate temena sestougla


O = (???, cy)
A1 = (x1, y2)
A2 = (???, ???)
A3 = (???, ???)
A4 = (???, ???)
A5 = (???, ???)
A6 = (???, ???)

# poluprecnik krugova
r = a // 2
# iscrtavamo krugove
pg.draw.circle(prozor, ZUTA, O, r)
pg.draw.circle(prozor, ROZE, A1, r)
pg.draw.circle(prozor, ROZE, A2, r)
pg.draw.circle(prozor, ROZE, ???, r)
pg.draw.circle(prozor, ROZE, A4, r)
pg.draw.circle(prozor, ROZE, A5, ???)
pg.draw.circle(prozor, ROZE, ???, r)

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
ellipse
#temena(leva ivica, gornja ivica, desna ivica, donja ivica)
pg.draw.ellipse(prozor, pg.Color("red"), (0, 0, 100, 150), 2)
95. Zadatak:
Nacrtati ti elipse, jednu u pravougaoniku, drugu obojiti, treću samu.
import pygame as pg
pg.init()
pg.display.set_caption("Elipse")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))

# crtamo crvenu elipsu


pg.draw.ellipse(prozor, pg.Color("red"), (0, 0, 100, 150), 2)
# crtamo opisani pravougaonik
pg.draw.rect(prozor, pg.Color("red"), (0, 0, 100, 150), 1)

# crtamo plavu elipsu


pg.draw.ellipse(prozor, pg.Color("blue"), (100, 0, 100, 100), 2)

# crtamo zelenu elipsu


pg.draw.ellipse(prozor, pg.Color("green"), (0, 150, 200, 50))

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

arc - luk
#(prozor, boja, (centar, r, pocetni_ugao, krajnji_ugao), debljina)
pg.draw.arc(prozor, pg.Color("green"), (0, 100, 100, 100), 0, 1, 2)
Njeni parametri su veoma slični onima koji se navode prilikom crtanja elipse. Prvo se navodi prozor po kom se crta, zatim boja, a
nakon toga uređena četvorka kojom se zadaje pravougaonik u koji je upisana elipsa (ili kružnica, ako je taj pravougaonik kvadrat)
čiji je luk deo. Prva dva broja predstaljaju koordinate gornjeg levog temena tog pravougaonika, a druga dva njegovu širinu i visinu.
Nakon toga se navode dva broja koji određuju koji deo elipse je kružni luk. Kružni luk se zadaje pomoću dva ugla, koji se mere od
krajnje desne tačke elipse i protežu se u smeru suprotnom kretanju kazaljke na satu. Tako tački na vrhu elipse odgovara ugao od
90 stepeni, krajnjoj levoj tački 180 stepeni, a krajnjoj donjoj tački ugao od 270 stepeni. Ugao od 360 stepeni ponovo odgovara
krajnjoj desnoj tački elipse (kao i ugao od 0 stepeni). Negativni uglovi odgovaraju kretanju u smeru kazaljke na satu. Tako krajnjoj
donjoj tački pored ugla od 270 stepeni odgovara i ugao od minus 90 stepeni, a krajnjoj levoj tački ugao od minus 180 stepeni. Luk
se takođe proteže od prvog do drugog ugla, u smeru suprotnom kretanju kazaljke na satu.
Međutim, funkciji pg.draw.arc se uglovi ne navode u stepenima, što je bio jedini način da merite uglove koji ste do sada učili. U
matematici postoji i druga mera, koja se često pokaže kao pogodnija nego što je to stepen, koju ćete sigurno koristiti kroz celu
svoju srednju školu. Fundamentalno, postoje dva različita načina da meriš ugao. Jedan način je da se ugao izmeri kao deo punog
okreta (punog ugla). Ugao od jednog stepena definisan je kao 360-ti deo punog ugla i stepeni mere uglove na prethodni način.
Međutim, sa ovom merom postoji problem, jer nije uvek jednostavno odrediti koji je deo punog ugla neki ugao koji nam je zadat,
nije je jednostavno odrediti dati broj stepeni (bez uglomera). Zamisli sada da na raspolaganju imaš samo jedan kanap. Postavlja se
pitanje da li možeš ugao izmeriti samo pomoću njega. Zgodan način da to uradiš je da tim kanapom prvo nacrtaš krug (to možeš
uraditi tako što fiksiraš jedan kraj kanapa, a drugi kraj okrećeš dok je kanap zategnut). Svakom uglu manjem od punog
jednoznačno odgovara neki kružni luk na tom nacrtanom krugu. Možeš fiksirati bilo koju tačku na tom krugu i zatim krenuti da
meriš dužinu kružnih lukova koji počinju u toj tački. Pošto nemaš metar, nego samo kanap, dužine lukova možeš da izražavaš samo
u funkciji dužine tog kanapa. Tako će ti onda dužina 1 odgovarati onom luku koji je dugačak tačno koliko i kanap koji imaš u
rukama. Pošto si taj kanap koristio i za crtanje kruga, poluprečnik tog kruga je takođe jednak dužini tog kanapa. Jedan radijan
definišemo kao onaj ugao čija je dužina kružnog luka jednaka dužini poluprečnika. Dakle, za razliku od jednog stepena, jedan
radijan možemo lako da konstruišemo korišćenjem samo jednog kanapa. Intuitivno je nekako jasno da u krugu ima malo više od
šest radijana (probaj to da izmeriš sa kanapom). Hajde da precizno izračunamo koliko stepeni ima u jednom radijanu. Obim
kružnice je 2rπ. Dužina luka koji odgovara jednom stepenu je onda 360 puta manji i iznosi rπ180, dok je dužina luka koja odgovara
x stepeni jednaka x⋅r⋅π180. Mi želimo da proverimo koliko stepeni ima u jednom radijanu. Po definiciji radijana dužina njegovog
kružnog luka jednaka je r. Dakle, x⋅r⋅π180=r, pa je x=180π. Dakle, jedan radijan iznosi 180π stepeni, što je oko 57,3∘. Sa druge
strane jedan stepen iznosi 1∘=π180 radijana. Zato x stepeni iznosi x⋅π180∘ radijana, na osnovu čega veoma lako možemo prevesti
ugao iz stepeni u radijane, što je upravo ono što nam treba. Uglu od nula stepeni odgovara nula radijana. Primetimo da je ugao od
90 stepeni iznosi 90∘π180∘=π2. Ugao od 180 stepeni je tačno π radijana (malo više od tri, što se poklapa sa našom intuicijom i
eksperimentima sa kanapom). Pun ugao ima 360 stepeni i 2π radijana (što je malo više od šest, što se ponovo poklapa sa našom
intuicijom i eksperimentima).
Da rezimiramo, broj radijana se od broja stepeni dobija deljenjem sa 180 i množenjem sa π. Kada znamo broj stepeni, možemo ga
na ovaj način transformisati u broj radijana i onda ga proslediti funkciji pg.draw.arc. Međutim, čak ni ovo ne morate znati (a
moraćete ga naučiti kad-tad, pa što ne sad :)), da biste mogli da koristite pg.draw.arc. Naime, u Python-u postoji bibliotečka
funkcija math.radians kojom se ugao iz stepeni automatski prevodi u radijane. Nju smo upotrebili nekoliko puta u prethodnom
primeru i time postigli da uglove koje određuju kružni luk možemo zadavati y stepenima, kako ste i navikli (samo ne zaboravite da
morate da pozovete math.radians, jer ćete u suprotnom dobiti loše iscrtane lukove).
Prilikom crtanja crvenog luka naveli smo math.radians(0), math.radians(120), tako da se luk prostirao od 0 do 120 stepeni (mereno
od krajnje desne tačke, u smeru suprotnom kretanju kazaljke, kao što smo na početku opisali). Prilikom crtanja plavog luka naveli
smo math.radians(-180), math.radians(-30), tako da se luk prostirao od minus 180 stepeni, do minus 30 stepeni (opet mereno na
način koji smo na početku opisali). Prilikom crtanja zelenog luka naveli smo 0, 1, što znači da se luk prostire od nula do jednog
radijana. Zeleni luk nam, dakle, vrlo jasno prikazuje koliki je ugao od jednog radijana. Na kraju, prilikom crtanja žutog luka naveli
smo 0, math.pi što znači da se luk prostire od nula do π radijana. Na osnovu prethodne diskusije, setićete se da je ugao od π
radijana odgovarao uglu od 180 stepeni i zato je nacrtan žuti polukrug (da smo obrnuli redosled ova dva argumenta, dobio bi se
polukrug okrenut nadole, jer se uvek crta od prvog do drugog ugla, u smeru suprotnom kretanju kazaljke na satu).
96a1. Zadatak:
Nacrtati par polukrugova, koji se od centra povećavaju.
import pygame as pg
import math,random
pg.init()
pg.display.set_caption("polukrugovi")
(sirina, visina) = (350, 350)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
def boje():
return(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
(cx, cy) = (sirina // 2, visina // 2)
for r in range(10, 101, 10):
pg.draw.arc(prozor, boje(), (cx-r, cy-r, 2*r, 2*r),
math.radians(0), math.radians(180), 2)
pg.display.update()
while pg.event.wait().type !=pg.QUIT:
pass
pg.quit()

96a2. Zadatak:
Nacrtati par lukova i pravougaonika. Vežba-
import pygame as pg, math
pg.init()
pg.display.set_caption("Elipse")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))

# crtamo crveni luk


pg.draw.arc(prozor, pg.Color("red"), (0, 0, 100, 100), math.radians(0), math.radians(120), 2)
# crtamo opisani pravougaonik
pg.draw.rect(prozor, pg.Color("black"), (0, 0, 100, 100), 1)

# crtamo plavi luk


pg.draw.arc(prozor, pg.Color("blue"), (100, 0, 100, 100), math.radians(-180), math.radians(-30), 2)
# crtamo opisani pravougaonik
pg.draw.rect(prozor, pg.Color("black"), (100, 0, 100, 100), 1)

# crtamo zeleni luk


pg.draw.arc(prozor, pg.Color("green"), (0, 100, 100, 100), 0, 1, 2)
# crtamo opisani pravougaonik
pg.draw.rect(prozor, pg.Color("black"), (0, 100, 100, 100), 1)

# crtamo zuti luk


pg.draw.arc(prozor, pg.Color("yellow"), (100, 100, 100, 100), 0, math.pi, 2)
# crtamo opisani pravougaonik
pg.draw.rect(prozor, pg.Color("black"), (100, 100, 100, 100), 1)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

96b. Zadatak:
Napiši program koji crta cvet pomoću kružnih lukova čiji su centri raspoređeni u temenima pravilnog šestougla, a poluprečnici su
jednaki dimenziji stranice šestougla (100 piksela).
Za rešavanje ovog problema definisaćemo pomoćnu funkciju luk(prozor, boja, centar, r, pocetni_ugao, krajnji_ugao, debljina) koja
će nam pomoći da parametre luka zadamo na jednostavniji način. Ova funkcija kao argumente ima prozor, boju kojom želimo da
iscrtamo luk, centar kruga na kojem se luk nalazi, ugao odakle luk počinje i ugao gde se luk završava, oba zadata u stepenima.
Naime, pošto bibliotečka funkcija pg.draw.arc umesto centra i poluprečnika luka traži da se zadaju koordinate gornjeg levog
temena, širina i visina pravougaonika koji je opisan oko kružnog luka (tj. elipse čiji je luk deo) i da se uglovi zadaju u radijanima, a
pošto si verovatno više navikao/navikla na rad sa stepenima, nego sa radijanima, funkcija luk će ti biti udobnija za korišćenje od
bibliotečke funkcije pg.draw.arc.
Promenljive h koja predstavlja visinu jednakostraničnog trougla od kojih je sačinjen pravilan šestougao i centar šestougla (cx,cy), tj.
koordinate ove tačke su ključne za određivanje koordinata ostalih tačaka.
Na osnovu slike možemo uočiti da koordinate svih šest tačaka, temena pravouglog šestougla, možemo opisati sa nekoliko
koordinata: x1 = cx - a, x2 = cx - a//2, x3 = cx + a//2, x4 = cx + a, y1 = cy - h, y2 = cy i y3 = cy + h i to na sledeći način: A1 = (x1, y2),
A2 = (x2, y1), A3 = (x3, y1), A4 = (x4, y2), A5 = (x3, y3), A6 = (x2, y3).

import pygame as pg, math


pg.init()
pg.display.set_caption("Cvet")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))

# pomocna funkcija za crtanje kruznog luka


def luk(prozor, boja, centar, r, pocetni_ugao, krajnji_ugao, debljina):
(x, y) = centar
pg.draw.arc(prozor, boja, (x - r, y - r, 2 * r, 2 * r),
math.radians(pocetni_ugao), math.radians(krajnji_ugao), debljina)

# boje koje cemo koristiti


BELA = (???, ???, ???)
CRVENA = (???, ???, ???)
ZELENA = (???, ???, ???)
PLAVA = (???, ???, ???)
ZUTA = (???, ???, ???)
LJUBICASTA = (???, ???, ???)

# bojimo pozadinu u belo


prozor.fill(BELA)

# koordinate centra prozora


(cx, cy) = (sirina // 2, visina // 2)

# precnici krugova - duzina stranice pravilnog sestougla u cijim se


# temenima nalaze centri krugova
a = 100
# visina karakteristicnog trougla sestougla
h = round(???)

# sva temena sestougla dele ove koordinate


x1 = ???
x2 = ???
x3 = ???
x4 = ???
y1 = ???
y2 = ???
y3 = ???

# koordinate temena sestougla


A1 = (x1, y2)
A2 = (x2, y1)
A3 = (x3, y1)
A4 = (x4, y2)
A5 = (x3, y3)
A6 = (x2, y3)

# poluprecnik krugova
r=a

# debljina linija
debljina = 3

# iscrtavamo krugove
luk(prozor, CRVENA, A1, r, ???, 60, debljina)
luk(prozor, ZELENA, A2, r, -120, ??, debljina)
luk(prozor, PLAVA, A3, r, -180, ???, debljina)
luk(prozor, ZUTA, A4, r, ???, -120, debljina)
luk(prozor, LJUBICASTA, A5, r, ???, 180, debljina)
luk(prozor, REZEDA, A6, r, 0, ???, debljina)

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

97. Zadatak:
Nacrtati čiča glišu.
import pygame as pg
pg.init()
pg.display.set_caption("Cvet")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))

# iscrtavamo glavu
pg.draw.circle(prozor, pg.Color("black"), (150, 70), 20, 2)
# iscrtavamo šešir
pg.draw.line(prozor, pg.Color("blue"), (120, 50), (180,50), 3)
pg.draw.rect(prozor, pg.Color("blue"), (130, 10, 40, 40))
# iscrtavamo oči
pg.draw.circle(prozor, pg.Color("black"), (145, 60), 2, 2)
pg.draw.circle(prozor, pg.Color("black"), (155, 60), 2, 2)
# iscrtavamo usta
pg.draw.arc(prozor, pg.Color("red"), (150-10, 70-10, 2*10, 2*10),
math.radians(-145), math.radians(-35), 3)
# iscrtavamo telo
pg.draw.line(prozor, pg.Color("black"), (150, 90), (150,170), 3)
# iscrtavamo levu ruku
pg.draw.line(prozor, pg.Color("black"), (150, 110), (100, 120), 3)
pg.draw.line(prozor, pg.Color("black"), (100, 120), (80, 100), 3)
# iscrtavamo desnu ruku
pg.draw.line(prozor, pg.Color("black"), (150, 110), (200, 150), 3)
pg.draw.line(prozor, pg.Color("black"), (200, 150), (210, 170), 3)
# iscrtavamo levu nogu
pg.draw.line(prozor, pg.Color("black"), (150, 170), (130, 200), 3)
pg.draw.line(prozor, pg.Color("black"), (130, 200), (140, 250), 3)
# iscrtavamo desnu nogu
pg.draw.line(prozor, pg.Color("black"), (150, 170), (170, 200), 3)
pg.draw.line(prozor, pg.Color("black"), (170, 200), (160, 250), 3)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

Učitavanje slike
# učitavamo slicicu iz datoteke slika.png
slika = pg.image.load("slika.png")
# prikazujemo sličicu na sredini ekrana
(x, y) = ((sirina - slika.get_width()) / 2, (visina - slika.get_height()) / 2)
prozor.blit(slika, (x, y))
Prvi korak je da se slika učita. To se radi pomoću funkcije pg.image.load kojoj se kao parametar navodi naziv datoteke sa slikom (to
su obično datoteke sa ekstenzijama png ili jpg). Posle učitavanja slike moguće je pozvati convert() da bi se slika prevela iz formata
u kojem je zapisana u datoteci u format koji je pogodan za prikazivanje na ekranu.
Drugi korak je prikaz učitane sličice na ekranu (jednom učitana slika se može prikazivati i na više mesta). To radimo pomoću
funkcije prozor.blit kojoj se kao parametri navode učitana slika i pozicija na koju će se postaviti njeno gornje levo teme. Da bi se
slika prikazala na sredini ekrana, očitavamo prvo njene dimenzije (pomoću get_width() i get_height()). Koordinate se onda dobijaju
kao polovina razlike između dimenzija ekrana i dimenzija slike koja se prikazuje (sličica je centrirana jer se prazan prostor
ravnomerno raspoređuje sa njegove obe strane).
98a. Zadatak:
Prikazati sliku racecar.png.
import pygame as pg
pg.init()
pg.display.set_caption("Slika auta") #slika mora biti u istom folderu sa .py fajlom
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
slika = pg.image.load("racecar.png")
# prikazujemo sličicu na sredini ekrana
(x, y) = ((sirina - slika.get_width()) / 2, (visina - slika.get_height()) / 2)
prozor.blit(slika, (x, y)) #može i neka odredjena pozicija, (50,50) onda ne treba (x,y)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

Pisanje teksta
font = pg.font.SysFont("tip_fonta", dimenzija_fonta) # font teksta
poruka = "Zdravo!" # poruka koja će se ispisivati
tekst = font.render(poruka, True, pg.Color("boja_fonta")) #stvara sliku koja predstavlja tu poruku
(sirina_teksta, visina_teksta) = (tekst.get_width(), tekst.get_height()) #određ. vel. teksta
(x, y) = ((sirina - sirina_teksta) / 2, (visina - visina_teksta) / 2) # vrednosti pozic. ako želimo tekst bude centriran
prozor.blit(tekst, (x, y)) # prikazujemo sliku na odgovarajućem mestu na ekranu
Prvo, potrebno je odabrati font kojim će se tekst ispisivati. Najlakše je da upotrebimo funkciju pg.font.SysFont koja prima dva
parametra: naziv sistemskog fonta (instaliranog na nivou operativnog sistema) i njegovu veličinu. Umesto sistemskog fonta
moguće je navesti i neku datoteku sa fontom (to su obično .ttf ili .otf datoteke) i tada se koristi funkcija pg.font.Font.
Drugi korak je da se kreira sličica (preciznije objekat tipa Surface) koja predstavlja nacrtani tekst. To možemo jednostavno uraditi
funkcijom font.render gde je font objekat fonta kreiran u prethodnom koraku, a parametri funkcije su redom niska (string) koja
predstavlja tekst koji se ispisuje, logička vrednost koja određuje da li će se crtati lepšim linijama (tj. koristiti takozvana tehnika
antialijasinga) i na kraju boja kojom će se tekst ispisivati.
Procedura je nadalje potpuno identična kao i u slučaju slike. U trećem koraku dobijenu sličicu možemo postaviti na bilo koju
poziciju na ekranu (pa i na više njih). To radimo kao i sa svim drugim sličicama, pomoću funkcije prozor.blit čiji je prvi parametar
sličica, a drugi koordinate na koje će biti postavljen gornji levi ugao slike. Pošto želimo da tekst bude centriran, tu poziciju možemo
izračunati tako što odredimo prvo širinu i visinu teksta. Za to možemo ponovo upotrebiti funkcije get_width() i get_height() kao i u
slučaju slike, a možemo upotrebiti i funkciju font.size() čiji je parametar niska čija se veličina određuje. Koordinate levog ugla se
onda određuje na isti način kao i u slučaju slike.
98b. Zadatak:
Ispisati neki tekst kao sliku na sredinu prozora.
import pygame as pg
pg.init()
pg.display.set_caption("Slika teksta")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# font kojim će biti prikazan tekst
font = pg.font.SysFont("Arial", 40)
# poruka koja će se ispisivati
poruka = "Učimo pajtončić!"
# gradimo sličicu koja predstavlja tu poruku ispisanu crnom bojom
tekst = font.render(poruka, True, pg.Color("black"))
# određujemo veličinu tog teksta (da bismo mogli da ga centriramo)
(sirina_teksta, visina_teksta) = (tekst.get_width(), tekst.get_height())
# položaj određujemo tako da tekst bude centriran
(x, y) = ((sirina - sirina_teksta) / 2, (visina - visina_teksta) / 2)
# prikazujemo sličicu na odgovarajućem mestu na ekranu
prozor.blit(tekst, (x, y))
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

Crtanje oblika uz pomoć petlji


https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/petlje-toctree

98c1. Zadatak:
Iscrtavati krugove različitih dimenzija i boja, pomerajući ih redom. Boje odrediti pomoću funkcije slučajnim vrednostima
(random.randint(0, 255)).
import pygame as pg
import random
#n=int(input("Broj ponavljanja"))
pg.init()
pg.display.set_caption("Crtanje pravougaonika")
(sirina, visina) = (400, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))

def boje():
return(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

x1=30
y1=30
r1=10
kraj=False
#for i in range(n):
while not kraj:
pg.draw.circle(prozor, boje(), (x1, y1),r1,1)
x1+=10
y1+=10
r1+=3
if x1==(400-r1) or y1==(300-r1):
pg.draw.circle(prozor, boje(), (x1, y1),r1)
kraj=True
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

98c2. Zadatak:
Iscrtati n kvadrata na različitim pozicijama i različitih boja. Boje odrediti pomoću funkcije slučajnim vrednostima
(random.randint(0, 255)). I iscrtati par linija različitih boja i pozicija.
import pygame as pg
import random
n=int(input("Broj ponavljanja"))
pg.init()
pg.display.set_caption("Crtanje kvadrata")
(sirina, visina) = (400, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
def boje():
return(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

x1=60
y1=60
x2=110
y2=110
for i in range(n):
pg.draw.rect(prozor, boje(), (x1, y1, x2, y2),1)
x1+=10
y1+=10

# prirastaj
dx = sirina / n
dy = visina / n
# crtamo n linija u donjem levom uglu prozora
for i in range(n):
pg.draw.line(prozor, boje(), (0, i*dy), (i*dx, visina), 1)

pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()

98c3. Zadatak:
U praznom pravougaoniku iscrtati slučajnim bojama i pozicijama prazne elipse. Boje i pozicije postaviti u funkcijama.
import pygame as pg
import math,random
pg.init()
pg.display.set_caption("polukrugovi")
(sirina, visina) = (350, 350)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
pg.draw.rect(prozor, pg.Color("blue"), (50, 50, 250, 250),1)
def boje():
return(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
def poz():
return(random.randint(50, 150))
for r in range(10, 101, 20):
pg.draw.ellipse(prozor, boje(), (poz(), poz(), poz(), poz()),1)
pg.display.update()
while pg.event.wait().type !=pg.QUIT:
pass
pg.quit()

98c4. Zadatak:

import pygame as pg
pg.init()
pg.display.set_caption("Rotiranje linija")
(sirina, visina) = (400, 300)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
# broj podeoka
n = 10
# prirastaj
dx = sirina / n
dy = visina / n
# crtamo n linija u donjem levom uglu prozora
for i in range(n + 1):
pg.draw.line(prozor, pg.Color("black"), (0, i*dy), (i*dx, visina), 1)
# crtamo n linija u gornjem desnom uglu prozora
for i in range(n + 1):
pg.draw.line(prozor, pg.Color("black"), (i*dx, 0), (sirina, i*dy), 1)
# crtamo n linija u gornjem levom uglu
for i in range(n + 1):
pg.draw.line(prozor, pg.Color("black"), (i*dx, 0), (0, visina-i*dy), 1)
# crtamo n linija u donjem desnom uglu
for i in range(n + 1):
pg.draw.line(prozor, pg.Color("black"), (i*dx, visina), (sirina, visina-i*dy), 1)
pg.display.update()
while pg.event.wait().type != pg.QUIT:
pass
pg.quit()
Događaji
https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/dogadjaji-toctree

98d. Zadatak:
Napisati program koji levim tasterom miša iscrtava krugove a desnim prstenove nasumične boje. Svakim sledećim klikom povećati
poluprečnik kruga ili smanjiti poluprečnik prstena za 5 piksela (50>=r>=20 a debljina prstena je 5 piksela).
import math, random
import pygame as pg
pg.init()
pg.display.set_caption("Krugovi veci-manji")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
prozor.fill(pg.Color("white"))
pg.display.update()
# funkcija kojom se generiše nasumična boja
def nasumicna_boja():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
kraj = False
r=35
while not kraj:
# čekamo naredni događaj
dogadjaj = pg.event.wait()
# isklučivanje prozora
if dogadjaj.type == pg.QUIT:
kraj = True
# pritisak dugmeta miša
elif dogadjaj.type == pg.MOUSEBUTTONDOWN:
# oznaka za levi taster miša je 1
if dogadjaj.button == 1:
if r<=50:
r += 5
pg.draw.circle(prozor, nasumicna_boja(),dogadjaj.pos,r)
pg.display.update()
# oznaka za desni taster miša je 3
elif dogadjaj.button == 3:
if r>=20:
r -= 5
pg.draw.circle(prozor, nasumicna_boja(),dogadjaj.pos,r,5)
pg.display.update()
pg.quit()
ime_promenljive= pygame.image.load('ime_slike.tip') #povezuje sliku sa promenljivom. Ako slika nije u istom folderu gde je
snimljen dokument.py, navesti i folder: 'images/ime_slike.tip'

ime_prozora.blit(ime_slike,(x,y)) #prikazuje sadržaj u prozoru


pygame.draw.circle(prozor, boja, poz, radius, sirina) #može i crtanje objekata sa .blit, ali je duže:
objekat = pygame.draw.circle(boja, radius, sirina)
prozor.blit(objekat, poz)

clock = pygame.time.Clock() # povezuje sat sa promenljivom


clock.tick(100) #podešava brzinu događaja(manje=sporije)

if uslov:
kraj = True #ako je uslov(x<0) tačan, postavlja izlaz tačnim
if event.type == pygame.QUIT:
gameExit = True #kada korisnik klikne na x desno gore u prozoru, postavlja izlaz tačnim

if event.key == pygame.K_LEFT:
x_nova = -5 #provera pritisnutog tastera(levo) i prva naredba za promenu pozicije

if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
x_nova = 0 #provera otpuštanja tastera, i postavljanje pomeranja na 0, jer inače bi se objekat pomerao za sve više
98e. Zadatak:
Učitati sliku auta, i pomerati sa tastature pritiskom na strelice levo-desno.
Учитати слику аута, и померати са тастатуре притиском на стрелице лево-десно.
import pygame
pygame.init()
sirina = 600
visina = 200
bela = (255,255,255)
auto_sirina = 68
prozor = pygame.display.set_mode((sirina,visina))
pygame.display.set_caption('Trka')
clock = pygame.time.Clock()
autoImg = pygame.image.load('images/racecar.png')

def auto(x,y):
prozor.blit(autoImg,(x,y))

def ponavljanje():
x = (sirina * 0.1) #pocetne pozicije x i y
y = (visina * 0.4)
x_nova = 0
kraj = False
auto(2,2)
while not kraj:
for event in pygame.event.get():
if event.type == pygame.QUIT:
kraj = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_nova = -5
if event.key == pygame.K_RIGHT:
x_nova = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_nova = 0
x += x_nova
prozor.fill(bela)
auto(x,y)
prozor.blit(autoImg,(2,0))#primer samo za ispis/prikaz sadrzaja/objekta
if x > sirina - auto_sirina or x < 0:
kraj = True
pygame.display.update()
clock.tick(100)
ponavljanje()
pygame.quit()
quit()

98f. Zadatak:
Trka: Učitati dve iste slike auta, jedan ispod drugog, i pomerati ih sa tastature pritiskom na strelice levo-desno i a-d.
Ispisati koji je auto pobedio.
import pygame
pygame.init()
sirina = 800
visina = 200
bela = (255,255,255)
auto_sirina = 68
prozor = pygame.display.set_mode((sirina,visina))
pygame.display.set_caption('Trka2')
clock = pygame.time.Clock()
autoImg = pygame.image.load('images/racecar.png')

def auto(x,y):
prozor.blit(autoImg,(x,y))
def auto2(x2,y2):
prozor.blit(autoImg,(x2,y2))

def ponavljanje():
x = (sirina * 0.01) #pocetne pozicije x i y donjeg auta
y = (visina * 0.4)
x2 = (sirina * 0.01) #pocetne pozicije x i y gornjeg auta
y2 = (visina * 0.01)
x_nova = 0
x2_nova = 0
kraj = False
while not kraj:
for event in pygame.event.get():
if event.type == pygame.QUIT:
kraj = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_nova = -5
if event.key == pygame.K_RIGHT:
x_nova = 5
if event.key == pygame.K_a:
x2_nova = -5
if event.key == pygame.K_d:
x2_nova = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_nova = 0
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
x2_nova = 0
x += x_nova
x2 += x2_nova
prozor.fill(bela)
auto(x,y)
auto2(x2,y2)
if x > sirina - auto_sirina:
kraj = True
print("pobedio je prvi auto")
if x2 > sirina - auto_sirina:
kraj = True
print("pobedio je drugi auto")
pygame.display.update()
clock.tick(50)
ponavljanje()
pygame.quit()
quit()

98g. Zadatak:
Zmija skuplja stvari. Upravljanje strelicama (4).
import pygame as pg, random
pg.init()
#podešavamo događaje tastaturom - prvi događaj se generiše nakon
# 50ms, a svaki naredni nakon 25ms
pg.key.set_repeat(100, 50)
pg.display.set_caption("Skupljanje zlatnika zmijicom nastalom kruyicem koji se pomera")
(sirina, visina) = (400, 400)
prozor = pg.display.set_mode((sirina, visina))
# prečnik kružića
d = 10
# bojimo prozor u crno
prozor.fill(pg.Color("black"))
# crtamo zvezde
for i in range(10):
# centar kruga nasumicno odredjen
(cx, cy) = (random.randint(d,sirina - i*d),random.randint(d,visina-i*d))
# crtamo zvezdu - krug
pg.draw.circle(prozor, pg.Color("yellow"), (cx, cy), d//2)
# koordinate centra prozora
(x, y) = (sirina//2, visina//2)
# pomeraji po x i y koordinati
(dx, dy) = (10, 10)
pomeraj = {pg.K_LEFT: (-dx, 0),
pg.K_RIGHT: (dx, 0),
pg.K_DOWN: (0, dy),
pg.K_UP: (0, -dy)}
# u prvom koraku je potrebno nacrtati crveni krug na sredini
treba_crtati = True
kraj = False
while not kraj:
# ako je potrebno аžurirati sliku
if treba_crtati:
# crtamo crveni krug - zmiju
pg.draw.circle(prozor,pg.Color("red"),(x,y),10)
# ažuriramo prikaz sadržaja prozora
pg.display.update()
# ne crtamo dok se zmija ne pomeri
treba_crtati = False
# obrađujemo prvi događaj koji se desi
dogadjaj = pg.event.wait()
# isključivanje prozora
if dogadjaj.type == pg.QUIT:
kraj = True
# pritisak tastera na tastaturi
if dogadjaj.type == pg.KEYDOWN:
if dogadjaj.key in pomeraj:
# pomeramo centar broda za odgovarajući pomeraj
(DX, DY) = pomeraj[dogadjaj.key]
x += DX
y += DY
# pošto je brod pomeren, ponovo ćemo crtati
treba_crtati = True
pg.quit()

Naredbe za rad sa robotom Karel:


Na stranici petlja.org naredbe se mogu koristiti na našem jeziku:
● napred() - pomeri se jedno polje napred,
● levo() - okreni se 90 stepeni nalevo (u smeru suprotnom kazaljki na satu),
● desno() - okreni se 90 stepeni nadesno (u smeru kazaljke na satu),
● uzmi() - pokupi lopticu sa polja na kojem se nalaziš,
● ostavi() - spusti lopticu na polje na kojem se nalaziš,
● moze_napred() - proverava da robot može da se pomeri napred (da li ispred njega postoji zid),
● broj_loptica_na_polju() - vraća broj loptica na polju na kom se robot nalazi,
● ima_loptica_na_polju() - proverava da li na polju na kom se robot nalazi ima loptica,
● broj_loptica_kod_sebe() - vraća broj loptica koje robot trenutno ima kod sebe,
● ima_loptica_kod_sebe() - proverava da li robot trenutno ima loptica kod sebe
Vežbati na Petlja.org.

Naredbe za rad sa kornjačom:


 import turtle #uključuje biblioteku
 turtle.forward(100) # Crtanje (kornjača) kreće napred (od centra na našu desnu stranu) za 100 jedinica/piksela
 turtle.shape("turtle") # Ako želimo videti pravu kornjaču umesto strelice
 turtle.color("red") # Menja se boja na crvenu...
 turtle.width(5) # Menja se debljina linije na 5...
 turtle.speed(3) # Menja se brzina na 3 (0-10)...
 turtle.penup() # Kretanje bez crtanja, sve do sledeće naredbe
 turtle.pendown() # Kretanje sa crtanjem
 turtle.left(90) # Okreće se na levu stranu za 90 stepeni
 turtle.right(60) # Okreće se na desnu stranu za 60 stepeni

Može se skratiti zapis:


 import turtle as t
 t.color("red")
 t.lt(90) #left
 t.fd(100) #forward
 t.rt(90) #right
99a. Zadatak:
Napiši program u kojem kornjača crta kvadrat čija je dužina stranica 100 koraka.
import turtle
turtle.forward(100)
turtle.left(90) # *4

Crtanje kvadrata sa for:


import turtle
for _ in range(4):
turtle.forward(100)
turtle.left(90)

99b. Zadatak:
Uz korišćenje naredbe ponavljanja, napiši program u kojem kornjača crta kvadrat čija je dužina stranica 100 koraka, kontura zelene
boje i debljine 5, a sama kornjača ostavlja otisak kornjače.
import turtle
turtle.shape("turtle")
turtle.color("green")
turtle.width(5)
for _ in range(4):
turtle.forward(100)
turtle.left(90)

99c. Zadatak:
Sa i bez korišćenje naredbe ponavljanja, napiši program u kojem kornjača crta jednakostranični trougao sa stranicom dužine 100.

99d. Zadatak:
Nacrtati ćirilično slovo И.
import turtle
turtle.left(-90)
turtle.forward(100)
turtle.left(135)
turtle.forward(141)
turtle.right(135)
turtle.forward(100)

99e. Zadatak:
Nacrtati pravougaonik, sa 4 različito obojene stranice. Za boje koristiti listu.
import turtle
boje = ["red", "green", "blue", "yellow"]
for i in range(4): # ponovi 4 puta:
turtle.color(boje[i]) # postavi boju na i-ti element liste boja
turtle.forward(100) # idi napred 100 koraka
turtle.left(90) # okreni se nalevo za 90 stepeni

99f. Zadatak:
Nacrtati petokraku zvezdu, koristeći listu za vrednosti uglova.
import turtle
uglovi = [ -144,72]
for i in range(10):
turtle.forward(40)
turtle.left(uglovi[0]) #počinje od 0-tog
99g. Zadatak:
Nacrtati tri kvadrata, različitih boja, sa istom početnom tačkom jednog njihovog ugla. Za boje koristiti listu.
import turtle
boje = ["red", "green", "blue"]
for i in range(3):
turtle.color(boje[i])
for j in range(4):
turtle.forward(50)
turtle.right(90)
turtle.right(120)
Preslikavanja: (Nazad na sadržaj-početak)
Vrlo često se dešava da je u rešavanju različitih problema potrebno od jedne kolekcije podataka dobiješ drugu. Na primer, na
osnovu liste površina učionica tvoje škole dobiješ procenu kapaciteta svake od učionica na osnovu pravila koje kaže da je
potrebno ostaviti jedan kvadratni metar za svakog učenika i 4 kvadratna metra za tablu i katedru. Očekuje se da za svaki
element liste površina učionica odrediš procenu i smestiš je u drugu listu. Dakle, za svaki element prve liste se prema zadatom
pravilu određuje odgovarajuća vrednost, takozvana slika. Čitav proces određivanja slike, tj. pridruživanja vrednosti slike
polaznoj vrednosti, takozvanom originalu, se u matematici naziva preslikavanjem. Na ovom času ćeš naučiti nekoliko načina na
koje u Pajtonu možeš izvesti preslikavanje jedne liste u drugu.
101. Zadatak:
Data je lista dužina stranica. Formiraj i ispiši listu njihovih površina.
Za početak pokušaj da ispišeš površine bez formiranja nove liste. Neka dužine stranica budu 1, 2, ..., 9. To bi mogao da izvedeš
na sledeći način:
for a in range (1,10)
print(a*a)
Postupak ispisa se ne bi puno razlikovao ni kada bi lista veličina stranica bila drugačije zadata, na primer navođenjem vrednosti
elemenata.
stranice=[1,2,4,6]
for a in stranice:
print(a*a)
Pokušaj sada da izmeniš svoj kod tako što ćeš posao koji on treba da obavi podeliti na dva manja i svaki pojedinačno opisati
svaki. Kako podeliti? U suštini problem koji se tvojim kodom rešava se može podeliti na dva potproblema:
-jedan jeste obrada kolekcije liste stranica i ispis dobijenih vrednosti, tj. površina za svaku stranicu pojedinačno,
-a drugi definisanje načina na koji će se dobiti vrednost u koju treba da bude preslikana zadata vrednost stranice, tj.
određivanje površine.
Što se prvog potproblema tiče njegovo rešenje će biti gotovo identično prethodnom kodu, sa tom razlikom što ćeš na mestu na
kojem je potrebno izračunavanje površine za određenu stranicu predvideti poziv funkcije koja izračunava površinu kvadrata na
osnovu veličine stranice. Tu funkciju bi koristio na način na koji si koristio i ugrađene funkcije, na primer apsolutnu vrednost.
Nažalost, funkcija koja određuje površinu kvadrata na osnovu dužine njegove stranice ne spada u ugrađene Pajton funkcije, pa
ćeš morati sam da je napišeš.
Deo koda kojim se rešava prvi potproblem bi mogao da izgleda ovako:
stranice=[1,2,4,6]
for a in stranice:
print(povrsina(a))
Sada nedostaje funkcija povrsina() kojom se rešava drugi potproblem. Definisanjem funkcije ćeš reći Pajton okruženju šta tačno
treba da uradi kada naiđe na poziv povrsina(a). Definicija funkcije obuhvata:
-njeno ime (u tvom slučaju povrsina),
-popis podataka koje funkcija dobija pri pozivu (u našem slučaju jedan broj koji predstavlja veličinu stanice),
-postupak kojim se određuje vrednost koju funkcija treba da izračuna (u našem slučaju je to određivanje vrednosti izraza a*a) i
-poziv specijalne komande return oblika return vrednost kojom se naglašava koju će izračunatu vrednost funkcija da vrati.
Definicija funkcije površina bi mogla da izgleda ovako:
def povrsina(a):
return a*a
Objedinjeno u jednom kodu definicija same funkcije i petlja kojom se ispisuju površine mogu izgledati ovako:
def povrsina(a):
return a*a
stranice=[1,2,4,6]
for a in stranice:
print(povrsina(a))
Obrati pažnju da je važno da prvo definišeš funkciju povrsina, pa tek onda napišeš petlju u kojoj se funkcija koristi. Ukoliko bi
redosled bio obrnut Pajton okruženje u trenutku kada bude izvršavalo petlju ne bi imalo informaciju o tome šta tačno treba da
radi kada dobije poziv funkcije povrsina. Na pogrešan redosled ćete upozoriti samo okruženje obaveštenjem o grešci.
Pokušaj sada da iskoristiš ovo što si do sada uradio i da rešiš zadatak onako kako je i traženo. Pokušaj da izmeniš kod tako što
ćeš napraviti novu listu od izračunatih površina, umesto da samo da ih ispišeš.
Jedan od načina za rešavanje ovog zadatka bio bi mogao da bude ovaj:
stranice=[1,2,4,6]
povrsine=[a*a for a in stranice]
print(povrsine)
Dakle, lista povrsine je definisana komandom
povrsine = [a*a for a in stranice]
kojom se kaže da će za svako a iz liste stranice biti izračunata vrednost a*a koja će postati član nove liste.
Ukoliko napišeš i odgovarajuću funkciju tvoj kod mogao da izgleda i ovako:
def povrsina(a):
return a*a
stranice=[1,2,4,6]
povrsine=[ povrsina(a) for a in stranice]
print(povrsine)
102. Zadatak:
Sličan primer.
Neka je data funkcija
def obim(a, b, c):
return a + b + c
i neka je data lista torki koje prestavljaju veličine stranica trouglova, na primer:
trouglovi = [(3, 4, 5), (5, 12, 13), (7, 24, 25)]
i neka je potrebno ispisati obim svakog od trougla iz liste.
Ako želiš da upotrebiš datu funkciju za računanje obima da bi izračunao obime trouglova opisanih u listi potrebno je da imaš u
vidu da nije moguće da napišeš ovako nešto
for t in trouglovi:
print(obim(t))
jer je t torka, dok funkcija ne očekuje torku već tri broja, na primer ispravan poziv bi bio obim(5,6,7). Da bi torku funkcija mogla
da prihvati, potrebno je naglasiti Pajton okruženju da je mora da dati funkciji u obliku koji funkcija može da prihvati, tj. u
takozvanom je razvijenom obliku, što se izvodi sledećim pozivom
print(obim(*t))
Pokušaj sada da definišeš listu koja će sadržati obime zadatih trouglova.

103. Zadatak:
Napiši program koji bi zadati tekst ispisao tako što bi svaku pojavu samoglasnika zamenio jednim istim samoglasnikom, na
primer i.
Ovaj zadatak se rešava na način na koji je rešavan i prethoni zadatak. Naime, tekst se posmatra kao ista karaktera. Svaki njen
element treba preslikati posebnom funkcijom u odgovarajuću sliku. Funkcija će određivati sliku tako što će svaki suglasnik
slikati u istu vrednost, a samoglasnik u slovo ‘i’. Dakle, tvoj zadatak je da napiše funkciju koja dobija jedno slovo i određuje
njegovu sliku, i da je zatim iskoristiš u preslikavanju liste slova.
Fajlovi: (Nazad na sadržaj-početak)
Fajlove možete otvarati i koristiti za čitanje ili pisanje stvaranjem objekata file klase i koristeći adekvatne njene read , readline ili
write metode da čitate iz ili upisuje u datoteku. Sposobnost da čita ili piše u fajlu zavisi od režima koji ste odredili prilikom
otvaranja datoteke. Onda, na kraju, kada završite neku manipulaciju sa datotekom, možete pozvati close metod da kažete Python-
u da smo završili sa korišćenjem datoteke.
ime='''tekst'''
f = open('ime.tip', 'operacija(w/r)') # Otvara fajl za 'w'-pisanje u fajl ili za 'r'-citanje fajla(podrazumevano je r, ako se ne navede)
f.write(ime) # upisuje tekst u fajl
f.close() # zatvara fajl
Prvo, otvaramo datoteku pomoću ugrađene open funkcije navodeći ime fajla i način na koji želite da otvorite taj fajl. Režim može
biti: čitanje ('r'), pisanje ('w') ili dodavanje ('a').
Takođe možete odrediti da li će se čitanje, pisanje, ili dodavanje odvijati u tekstualnom modu ('t') ili u binarnom modu ('b'). Imate
zapravo mnogo više načina na raspolaganju i help(open) će vam dati više detalja o njima. Po defaultu, open() fajl će da bude 't'ekst
fajl i otvara se u 'r' - režimu za čitanje.
U našem primeru, prvo otvorite datoteku u režimu upisivanja teksta i koristimo write metod za pisanje u datoteku, a zatim smo је
konačno zatvorili sa close.
Sledeće što smo uradili je da smo otvorili isti fajl ponovo za čitanje. Mi ne treba da navedete režim jer je "pročitaj tekst fajl"
podrazumevani režim otvaranja. Mi zatim čitamo svaku liniju datoteke pomoću readline metode unutar petlje. Ova metoda daje
kompletnu liniju uključujući znak novog reda na kraju linije. Kada se vrati prazan string, to znači da smo stigli na kraj fajla i mi
"bežimo" iz petlje.
Podrazumevano, print() prikazuje tekst, ali i automatski prelazi u novi red na ekranu. Mi smo sprečili prelazak u novi red
navođenjem end = ' ' , jer će linija, koja se čita iz datoteke, već imati znak za novi red na kraju. Onda smo konačno zatvorili
datoteku sa close.
Sada, proverite sadržaj pesma.txt datoteke da biste potvrdili da je program zaista pisao i čitaju iz tog fajla.
111. Zadatak:
pesma = '''\
Programiranje je zabava
Kada je posao gotov
ako zelis da ti posao bude razbribriga
koristi Python! '''

f = open('pesma.txt', 'w') # Otvara fajl za 'w' – pisanje u fajl


f.write(pesma) # upisuje tekst u fajl
f.close() # zatvara fajl

f = open('pesma.txt') # Ako nismo naveli, podrazumevano je 'r' - citanje fajla


print('Ispis fajla:')
while True:
linija = f.readline()
if len(linija) == 0: # Duzina od 0 znaci da smo dostigli EOF - kraj fajla
break
print(linija, end = ' ')
f.close()
112. Zadatak:
Napraviti listu za kupovinu, ubaciti u fajl, obrisati sadržaj liste, napuniti listu novim sadržajem, pa ispisati i listu i sadržaj fajla.
import pickle
fajllistekupovine = 'listakupovine.data' # ime fajla u kom zelimo da cuvamo objekat
listakupovine = ['jabuka', 'mango', 'sargarepa'] # lista stvari za kupovinu
print('\n lista kupovine ',listakupovine)
f = open(fajllistekupovine, 'wb') # Sacuvaj u fajl, otvara za pisanje u binarnom obliku
pickle.dump(listakupovine, f) # stavlja objekat u fajl
f.close()
del listakupovine # unistava listakupovine promenljivu
f = open(fajllistekupovine, 'rb') # Ucitava nazad iz fajla
sacuvanalista = pickle.load(f) # ucitava objekat iz fajla
listakupovine = ['jabuka2', 'mango2', 'sargarepa2']
print('\n nova lista kupovine ',listakupovine)
print(' \nsacuvana lista ',sacuvanalista)
Animacije (Nazad na sadržaj-početak)
https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/animacije-toctree

Animacije podrazumevaju promenu slike na ekranu obično u pravilnim vremenskim intervalima (na primer, na svakih 50
milisekundi). U programima u kojima se slika nije menjala tokom izvršavanja, crtanje smo vršili samo jednom, pre glavne petlje
obrade doagađaja, dok ćemo u programima sa animacijom crtanje vršiti obično unutar tela te glavne petlje (ili u zasebnoj funkciji
koju ćemo na tom mestu pozivati). Postoji nekoliko uobičajenih načina da se animacija realizuje i u nastavku ćemo objasniti
nekoliko njih.
kraj = False
while not(kraj):
# na ovom mestu vršimo crtanje
...

# čekamo zadati broj milisekundi


pg.time.wait(???)

# proveravamo da li je korisnik isključio prozor


for dogadjaj in pg.event.get():
if dogadjaj == pg.QUIT:
kraj = True
U sklopu glavne petlje prvo vršimo crtanje, zatim čekamo određeno vreme (na primer, 50 ili 100 milisekundi) i nakon toga
obrađujemo sve događaje koji su nastupili tokom crtanja i čekanja, tj. koji su nastupili od prethodne obrade događaja (pre svega
proveravamo da li je korisnik isključio prozor tj. da li je nastupio događaj pg.QUIT). Ako jeste, prekidamo petlju (bilo postavljanjem
promenljive kraj na True, bilo naredbom break).
Čekanje možemo ostvariti pozivom funkcije pg.time.wait(???), čiji je parametar dati broj milisekundi (1000 milisekundi je jedna
sekunda).
Lista svih događaja koji su registrovani u redu od trenutka prethodnog čitanja tog reda se može dobiti funkcijom pg.event.get().
Tokom obrade događaja prolazimo kroz tu listu analizirajući jedan po jedan događaj (podsetimo se, prolazak kroz elemente liste
ostvaruje se naredbom oblika for element in lista: ...). Dakle, u ovom scenariju imamo petlju u petlji. U unutrašnjoj petlji for
možemo vršiti analizu svih događaja i reagovati na njih na isti način kao što je to bio slučaj u programima u kojima smo prikazivali
kako se reaguje na događaje (obično je to grananje na osnovu tipa događaja).
Mana upravo opisanog pristupa je to što je program potpuno blokiran tokom čekanja (ne reaguje na događaje) i ako je taj period
veliki, korisnik može to i osetiti.
Korišćenje sata
Prethodno rešenje ne uzima u obzir ni trajanje iscrtavanja ni obrade događaja (pauza je uvek ista, bez obzira na to koliko je
iscrtavanje trajalo). To se može popraviti ako se umesto pg.time.wait upotrebi sat koji kreiramo pomoću pg.Clock.
sat = pg.Clock()
kraj = False
while not(kraj):
# na ovom mestu vrsimo crtanje
...

# proveravamo da li je korisnik iskljucio prozor


for dogadjaj in pg.event.get():
if dogadjaj == pg.QUIT:
kraj = True

# ograničavamo izvršavanje tela petlje na najviše 25 puta u sekundi


sat.tick(25)
Na ovaj način smo rekli da želimo da se telo petlje (tj. crtanje) izvrši tačno 25 puta tokom jedne sekunde i to će najčešće i biti
slučaj. Ako hoćemo da budemo potpuno precizni, ovim smo zapravo postavili gornje ograničenje na učestalost izvršavanja tela
glavne petlje - ono sigurno neće biti izvršeno češće od broja koji je naveden kao argument funkcije tick. Naime, u nekim izuzetnim
situacijama (na primer, ako postavimo veliku učestalost, a crtanje je komplikovano i zahteva puno vremena), sistem neće uspeti da
postigne navedenu učestalost i telo petlje će se izvršiti ređe od onoga što je navedeno.
Korišćenje tajmera
Još jedno rešenje za pravljenje animacija podrazumeva da se napravi tajmer (engl. timer) koji će otkucavati u pravilnim
vremenskim intervalima (otkucaj tajmera podrazumeva generisanje određenog događaja). Posmatrajmo naredni kod.
# tajmer ce otkucavati nakon svakih 100 milisekundi
pg.time.set_timer(pg.USEREVENT, 100)
kraj = False
treba_crtati = True
while not(kraj):
# na ovom mestu vrsimo crtanje
if treba_crtati:
...
treba_crtati = False

# cekamo naredni dogadjaj


dogadjaj = pg.event.wait()

if dogadjaj.type == pg.QUIT:
kraj = True
elif dogadjaj.type == pg.USEREVENT:
treba_crtati = True
Svaki put kada tajmer otkuca, generiše se događaj koji smo naveli u pozivu pg.time.set_timer. To će najčešće biti događaj
pg.USEREVENT koji se ne registruje automatski (kao što se npr. pg.QUIT automatski registruje prilikom gašenja prozora ili se
pg.KEYDOWN registruje prilikom pritiska na taster tastature), već se upravo koristi za ovakve svrhe.
Petlju obrade događaja organizujemo tako da se na njenom početku crta, a zatim se čeka da se desi naredni događaj pozivom
pg.event.wait() - potpuno isto kao u programima koje smo opisivali u delu u kom smo opisivali reagovanje na događaje. Ta funkcija
blokira izvršavanje programa dok se ne dogodi neki događaj. Ako se dogodio događaj pg.QUIT, prekida se izvršavanje petlje (pa
samim tim i programa). Ako je to bio događaj pg.USEREVENT, koji predstavlja otkucaj našeg navijenog sata, tada treba da
ažuriramo naš crtež. U suprotnom se desio neki događaj na koji ne reagujemo (na primer, korisnik je malo pomerio miša) i tada ne
bi trebalo ništa raditi. Pošto će se i nakon takvih događaja telo naše petlje ponovo izvršiti, potrebno je nekako da sprečimo da se u
tim situacijama iscrtavanje ponovo vrši. Jedan način da se to uradi je da se uvede promenljiva treba_crtati koju na početku
postavljamo na True (da bi se u prvom prolasku kroz petlju slika nacrtala), da se nakon crtanja ona postavi na vrednost False, da se
u narednim prolascima kroz petlju (prouzrokovanim događajima koji su nam često irelevantni) ne bi ponovo crtalo, a da se nakon
otkucaja našeg sata ona ponovo postavila na True da bi se nakon tog događaja slika ažurirala. Sa ovakvim pristupom aplikacija je
veoma odzivna (skoro momentalno reaguje na sve vrste događaja) i lako se može proširiti i reakcijama na druge vrste događaja
(npr. na pritiske na tastere na tastaturi ili akcije mišem).
121. Zadatak:
Menjati boju pozadine prozora na slučajnu boju funkcijom (random.randint(0-255)), svakih par sekundi.
import pygame as pg, random
pg.init()
pg.display.set_caption("Боја позадине")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))

# funkcija koja vraća nasumično određenu boju


def nasumicna_boja():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

pg.time.set_timer(pg.USEREVENT, 100)

kraj = False
treba_crtati = True
while not kraj:
if treba_crtati:
# postavljanje boje pozadine na nasumičnu boju
prozor.fill(nasumicna_boja())
# osvežavamo prikaz sadržaja ekrana
pg.display.update()
treba_crtati = False
# čekamo na naredni događaj
dogadjaj = pg.event.wait()
# događaj isključivanja prozora
if dogadjaj.type == pg.QUIT:
kraj = True
# otkucaj tajmera
elif dogadjaj.type == pg.USEREVENT:
treba_crtati = True
pg.quit()
122. Zadatak:
Ispisivati redom RGB boje tim redom, svakih par sekundi. (Menjati boju pozadine prozora...)
Ovaj program je po svojoj strukturi veoma sličan prethodnom. Ponovo ćemo koristiti tajmer i u situacijama kada tajmer
otkuca postavljati promenljivu kojom ćemo prouzrokovati crtanje u narednom koraku petlje. Ključni deo zadatka
predstavlja mehanizam ciklične promene boja. Najjednostavniji način da se to uradi je da boje držimo u listi i da uz listu
održavamo i poziciju tekuće boje (njen indeks u listi). Nakon korišćenja boje sa te pozicije, uvećavaćemo je za 1, pri tom
proveravajući da se nakon poslednje boje ponovo vratimo na prvu (da indeks postane 0). Najjednostavniji način da se to
uradi je da se nakon uvećavanja indeksa za 1 izračuna njegov ostatak pri deljenju sa dužinom liste (ukupnim brojem
boja).
import pygame as pg, random
pg.init()
pg.display.set_caption("Boja pozadine RGB")
(sirina, visina) = (200, 200)
prozor = pg.display.set_mode((sirina, visina))

pg.time.set_timer(pg.USEREVENT, 1000)

# boje koje ćemo postavljati


boje = ["red", "green", "blue"]
broj_boje = 0

kraj = False
treba_crtati = True
while not kraj:
if treba_crtati:
# postavljanje boje pozadine na trenutnu boju
print(boje[broj_boje])
#prozor.fill(boje)-Ne radi
# prelazimo na narednu boju
broj_boje +=1
if broj_boje==3:
broj_boje = 0
# osvežavamo prikaz sadržaja ekrana
pg.display.update()
treba_crtati = False

# čekamo na naredni događaj


dogadjaj = pg.event.wait()
# događaj isključivanja prozora
if dogadjaj.type == pg.QUIT:
kraj = True
# otkucaj tajmera
elif dogadjaj.type == pg.USEREVENT:
treba_crtati = True
pg.quit()

124. Zadatak:
Rotirajući tekst, i ispisan unazad, i rotirano za 90 levo i 180.
import pygame
pygame.init()
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
dim_prozora = (400, 500)
prozor = pygame.display.set_mode(dim_prozora)
pygame.display.set_caption("Rotate Text")
# Pocetna vrednost ponavljanja (kraj) mora biti: false
kraj = False
clock = pygame.time.Clock()
stepen_rotir = 0
# Ponavlja se ciklus dok je kraj = False
while not kraj:
for event in pygame.event.get(): # Provera sta korisnik radi
if event.type == pygame.QUIT: # Ako je zatvorio prozor
kraj = True # Kraj postaje True, zbog izlaza
prozor.fill(WHITE)
# Crtamo okvire za rotiranje
pygame.draw.line(prozor, BLACK, [100,50], [200, 50])
pygame.draw.line(prozor, BLACK, [100,50], [100, 150])
# Podesiti font, dimenziju, bold, italics
font = pygame.font.SysFont('Calibri', 25, True, False)
# Zeleni tekst
text = font.render("Sideways text", True, GREEN)
text = pygame.transform.rotate(text, 90)
prozor.blit(text, [0, 0])
# Plavi tekst
text = font.render("Upside down text", True, BLUE)
text = pygame.transform.rotate(text, 180)
prozor.blit(text, [30, 0])
# Crveni tekst
text = font.render("Flipped text", True, RED)
text = pygame.transform.flip(text, False, True)
prozor.blit(text, [30, 20])
# Rotirajuci tekst
text = font.render("Rotating text", True, BLACK)
text = pygame.transform.rotate(text, stepen_rotir)
stepen_rotir += 1
prozor.blit(text, [100, 50])

pygame.display.update()
clock.tick(60)
pygame.quit()

125. Zadatak:
Pomerajući kvadrat
import pygame
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
pygame.init()
dim_prozora = [700, 500]
prozor = pygame.display.set_mode(dim_prozora)
pygame.display.set_caption("Skacuci pravougaonik")
kraj = False
clock = pygame.time.Clock()
# Pocetna poz. pravougaonika
pocetna_x = 50
pocetna_y = 50
# Brzina i smer pravougaonika
promena_x = 2
promena_y = 2

while not kraj:


for event in pygame.event.get():
if event.type == pygame.QUIT:
kraj = True

# Pomeranje pravougaonika
pocetna_x += promena_x
pocetna_y += promena_y

# Odbijanje od ivica prozora(za 50 manje od ivice)


if pocetna_y > 450 or pocetna_y < 0:
promena_y = promena_y * -1
if pocetna_x > 650 or pocetna_x < 0:
promena_x = promena_x * -1

prozor.fill(BLACK)

# Crtanje pravougaonika
pygame.draw.rect(prozor, WHITE, [pocetna_x, pocetna_y, 50, 50])
pygame.draw.rect(prozor, RED, [pocetna_x + 10, pocetna_y + 10, 30, 30])
clock.tick(60)
pygame.display.update()
pygame.quit()

126. Zadatak:
Pomerajuće loptice. Sa Space-om se stvaraju nove loptice. – Radi, pregledati detaljnije i prevesti...
import pygame
import random
# Define some colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
SCREEN_WIDTH = 700
SCREEN_HEIGHT = 500
BALL_SIZE = 25
class Ball:
"""
Class to keep track of a ball's location and vector.
"""
def __init__(self):
self.x = 0
self.y = 0
self.change_x = 0
self.change_y = 0
def make_ball():
"""
Function to make a new, random ball.
"""
ball = Ball()
# Starting position of the ball.
# Take into account the ball size so we don't spawn on the edge.
ball.x = random.randrange(BALL_SIZE, SCREEN_WIDTH - BALL_SIZE)
ball.y = random.randrange(BALL_SIZE, SCREEN_HEIGHT - BALL_SIZE)
# Speed and direction of rectangle
ball.change_x = random.randrange(-2, 3)
ball.change_y = random.randrange(-2, 3)
return ball
def main():
"""
This is our main program.
"""
pygame.init()
# Set the height and width of the screen
size = [SCREEN_WIDTH, SCREEN_HEIGHT]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Bouncing Balls")
# Loop until the user clicks the close button.
done = False
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
ball_list = []
ball = make_ball()
ball_list.append(ball)
# -------- Main Program Loop -----------
while not done:
# --- Event Processing
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN:
# Space bar! Spawn a new ball.
if event.key == pygame.K_SPACE:
ball = make_ball()
ball_list.append(ball)
# --- Logic
for ball in ball_list:
# Move the ball's center
ball.x += ball.change_x
ball.y += ball.change_y
# Bounce the ball if needed
if ball.y > SCREEN_HEIGHT - BALL_SIZE or ball.y < BALL_SIZE:
ball.change_y *= -1
if ball.x > SCREEN_WIDTH - BALL_SIZE or ball.x < BALL_SIZE:
ball.change_x *= -1
# --- Drawing
# Set the screen background
screen.fill(BLACK)
# Draw the balls
for ball in ball_list:
pygame.draw.circle(screen, WHITE, [ball.x, ball.y], BALL_SIZE)
# --- Wrap-up
# Limit to 60 frames per second
clock.tick(90)
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Close everything down
pygame.quit()
if __name__ == "__main__":
main()

127. Zadatak:
Animacija sa sprajtovima. – Radi, pregledati detaljnije i prevesti...
import pygame

SIZE = WIDTH, HEIGHT = 600, 400 #the width and height of our screen
BACKGROUND_COLOR = pygame.Color('white') #The background colod of our window
FPS = 10 #Frames per second
class MySprite(pygame.sprite.Sprite):
def __init__(self):
super(MySprite, self).__init__()
#adding all the images to sprite array
self.images = []
self.images.append(pygame.image.load('images/walk1.png'))
self.images.append(pygame.image.load('images/walk2.png'))
self.images.append(pygame.image.load('images/walk3.png'))
self.images.append(pygame.image.load('images/walk4.png'))
self.images.append(pygame.image.load('images/walk5.png'))
self.images.append(pygame.image.load('images/walk6.png'))
self.images.append(pygame.image.load('images/walk7.png'))
self.images.append(pygame.image.load('images/walk8.png'))
self.images.append(pygame.image.load('images/walk9.png'))
self.images.append(pygame.image.load('images/walk10.png'))

#index value to get the image from the array


#initially it is 0
self.index = 0

#now the image that we will display will be the index from the image array
self.image = self.images[self.index]

#creating a rect at position x,y (5,5) of size (150,198) which is the size of sprite
self.rect = pygame.Rect(5, 5, 150, 198)

def update(self):
#when the update method is called, we will increment the index
self.index += 1

#if the index is larger than the total images


if self.index >= len(self.images):
#we will make the index to 0 again
self.index = 0

#finally we will update the image that will be displayed


self.image = self.images[self.index]
def main():
#initializing pygame
pygame.init()

#getting the screen of the specified size


screen = pygame.display.set_mode(SIZE)

#creating our sprite object


my_sprite = MySprite()

#creating a group with our sprite


my_group = pygame.sprite.Group(my_sprite)

#getting the pygame clock for handling fps


clock = pygame.time.Clock()

while True:
#getting the events
event = pygame.event.get()

#if the event is quit means we clicked on the close window button
if event.type == pygame.QUIT:
#quit the game
pygame.quit()
quit()

#updating the sprite


my_group.update()

#filling the screen with background color


screen.fill(BACKGROUND_COLOR)

#drawing the sprite


my_group.draw(screen)

#updating the display


pygame.display.update()

#finally delaying the loop to with clock tick for 10fps


clock.tick(10)
import pygame

SIZE = WIDTH, HEIGHT = 600, 400 #the width and height of our screen
BACKGROUND_COLOR = pygame.Color('white') #The background colod of our window
FPS = 10 #Frames per second

class MySprite(pygame.sprite.Sprite):
def __init__(self):
super(MySprite, self).__init__()

self.images = []
self.images.append(pygame.image.load('images/walk1.png'))
self.images.append(pygame.image.load('images/walk2.png'))
self.images.append(pygame.image.load('images/walk3.png'))
self.images.append(pygame.image.load('images/walk4.png'))
self.images.append(pygame.image.load('images/walk5.png'))
self.images.append(pygame.image.load('images/walk6.png'))
self.images.append(pygame.image.load('images/walk7.png'))
self.images.append(pygame.image.load('images/walk8.png'))
self.images.append(pygame.image.load('images/walk9.png'))
self.images.append(pygame.image.load('images/walk10.png'))

self.index = 0

self.image = self.images[self.index]

self.rect = pygame.Rect(5, 5, 150, 198)

def update(self):
self.index += 1

if self.index >= len(self.images):


self.index = 0

self.image = self.images[self.index]

def main():
pygame.init()
screen = pygame.display.set_mode(SIZE)
my_sprite = MySprite()
my_group = pygame.sprite.Group(my_sprite)
clock = pygame.time.Clock()

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()

my_group.update()
screen.fill(BACKGROUND_COLOR)
my_group.draw(screen)
pygame.display.update()
clock.tick(10)

if __name__ == '__main__':
main()

128. Zadatak:
Animacija kako pada sneg. – Radi, podesiti prvo uvlačenja...
import pygame
import random
# Initialize the game engine
pygame.init()
BLACK = [0, 0, 0]
WHITE = [255, 255, 255]
# Set the height and width of the screen
SIZE = [400, 400]
screen = pygame.display.set_mode(SIZE)
pygame.display.set_caption("Snow Animation")
# Create an empty array
snow_list = []
# Loop 50 times and add a snow flake in a random x,y position
for i in range(50):
x = random.randrange(0, 400)
y = random.randrange(0, 400)
snow_list.append([x, y])
clock = pygame.time.Clock()
# Loop until the user clicks the close button.
done = False
while not done:
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done = True # Flag that we are done so we exit this loop
# Set the screen background
screen.fill(BLACK)
# Process each snow flake in the list
for i in range(len(snow_list)):
# Draw the snow flake
pygame.draw.circle(screen, WHITE, snow_list[i], 2)
# Move the snow flake down one pixel
snow_list[i][1] += 1
# If the snow flake has moved off the bottom of the screen
if snow_list[i][1] > 400:
# Reset it just above the top
y = random.randrange(-50, -10)
snow_list[i][1] = y
# Give it a new x position
x = random.randrange(0, 400)
snow_list[i][0] = x
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
clock.tick(20)
# Be IDLE friendly. If you forget this line, the program will 'hang'
# on exit.
pygame.quit()

129a. Zadatak:
Događaj: objekti prate miš – Radi, podesiti prvo uvlačenja...
import pygame
# Define some colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
def draw_stick_figure(screen, x, y):
# Head
pygame.draw.ellipse(screen, BLACK, [1 + x, y, 10, 10], 0)
# Legs
pygame.draw.line(screen, BLACK, [5 + x, 17 + y], [10 + x, 27 + y], 2)
pygame.draw.line(screen, BLACK, [5 + x, 17 + y], [x, 27 + y], 2)
# Body
pygame.draw.line(screen, RED, [5 + x, 17 + y], [5 + x, 7 + y], 2)
# Arms
pygame.draw.line(screen, RED, [5 + x, 7 + y], [9 + x, 17 + y], 2)
pygame.draw.line(screen, RED, [5 + x, 7 + y], [1 + x, 17 + y], 2)
# Setup
pygame.init()
# Set the width and height of the screen [width,height]
size = [700, 500]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("My Game")
# Loop until the user clicks the close button.
done = False
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
# Hide the mouse cursor
pygame.mouse.set_visible(0)
# -------- Main Program Loop -----------
while not done:
# ALL EVENT PROCESSING SHOULD GO BELOW THIS COMMENT
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# ALL EVENT PROCESSING SHOULD GO ABOVE THIS COMMENT
# ALL GAME LOGIC SHOULD GO BELOW THIS COMMENT
# Call draw stick figure function
pos = pygame.mouse.get_pos()
x = pos[0]
y = pos[1]
# ALL GAME LOGIC SHOULD GO ABOVE THIS COMMENT
# ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT
# First, clear the screen to white. Don't put other drawing commands
# above this, or they will be erased with this command.
screen.fill(WHITE)
draw_stick_figure(screen, x, y)
# ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Limit to 20 frames per second
clock.tick(60)
# Close the window and quit.
# If you forget this line, the program will 'hang'
# on exit if running from IDLE.
pygame.quit()

129b. Zadatak:
Događaj: upravljanje objektima sa tastature – Radi, podesiti prvo uvlačenja...
import pygame
# Define some colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
def draw_stick_figure(screen, x, y):
# Head
pygame.draw.ellipse(screen, BLACK, [1 + x, y, 10, 10], 0)
# Legs
pygame.draw.line(screen, BLACK, [5 + x, 17 + y], [10 + x, 27 + y], 2)
pygame.draw.line(screen, BLACK, [5 + x, 17 + y], [x, 27 + y], 2)
# Body
pygame.draw.line(screen, RED, [5 + x, 17 + y], [5 + x, 7 + y], 2)
# Arms
pygame.draw.line(screen, RED, [5 + x, 7 + y], [9 + x, 17 + y], 2)
pygame.draw.line(screen, RED, [5 + x, 7 + y], [1 + x, 17 + y], 2)
# Setup
pygame.init()
# Set the width and height of the screen [width,height]
size = [700, 500]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("My Game")
# Loop until the user clicks the close button.
done = False
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
# Hide the mouse cursor
pygame.mouse.set_visible(0)
# Speed in pixels per frame
x_speed = 0
y_speed = 0
# Current position
x_coord = 10
y_coord = 10
# -------- Main Program Loop -----------
while not done:
# --- Event Processing
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# User pressed down on a key
elif event.type == pygame.KEYDOWN:
# Figure out if it was an arrow key. If so
# adjust speed.
if event.key == pygame.K_LEFT:
x_speed = -3
elif event.key == pygame.K_RIGHT:
x_speed = 3
elif event.key == pygame.K_UP:
y_speed = -3
elif event.key == pygame.K_DOWN:
y_speed = 3
# User let up on a key
elif event.type == pygame.KEYUP:
# If it is an arrow key, reset vector back to zero
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_speed = 0
elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_speed = 0
# --- Game Logic
# Move the object according to the speed vector.
x_coord = x_coord + x_speed
y_coord = y_coord + y_speed
# --- Drawing Code
# First, clear the screen to WHITE. Don't put other drawing commands
# above this, or they will be erased with this command.
screen.fill(WHITE)
draw_stick_figure(screen, x_coord, y_coord)
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Limit frames per second
clock.tick(60)
# Close the window and quit.
pygame.quit()

You might also like