Python: računalno razmišljanje i programiranje
(ostvarivanje obrazovnih ishoda u 7. i 8.raz. OŠ)
Poveznica s primjerima:
Obrazovni ishodi u domeni Računalno razmišljanje i programiranje (7.raz.)
- B.7.1 učenik razvija algoritme za rješavanje različitih problema koristeći se nekim programskim jezikom pri čemu se koristi prikladnim strukturama i tipovima podataka.
- B.7.2 učenik primjenjuje algoritam (sekvencijalnoga) pretraživanja pri rješavanju problema.
- B.7.3 učenik dizajnira i izrađuje modularne programe koji sadrže potprograme u programskom jeziku.
- B.7.4 učenik se koristi simulacijom pri rješavanju nekog ne nužno računalnoga problema.
Tipovi podataka
Osnovni:
- int (cijeli broj)
- float (broj s pomičnom točkom)
- bool (logički - true/false)
Složeni:
- string (znakovni niz)
- lista (list)
- n-terac (tuple)
- skup(set)
- rječnik (dictionary)
1. zadatak - ocjene
Napiši program koji unosi zaključene ocjene učenika i sprema ih u listu te ispisuje prosjek ocjena, najveću i najmanju ocjenu
1. zadatak - ocjene
Napiši program koji unosi zaključene ocjene učenika i sprema ih u listu te ispisuje prosjek ocjena, najveću i najmanju ocjenu
lista = []
while len(lista) < 5:
ocjena = int(input('Upisi ocjenu: '))
if ocjena < 0 or ocjena > 5:
print('Neispravan unos.')
print(' Upisi ocjenu od 1-5')
continue
else:
lista.append(ocjena)
print('Ocjene:', lista)
print('Najveca ocjena:', max(lista))
print('Najmanja ocjena:', min(lista))
print('Prosjek ocjena:', "{0:.2f}".format(sum(lista)/float(len(lista))))Formatiranje ispisa
print("Ivo ima {0:.2f} kn i {1} psa.".format(5,3)) #ručno definiranje formata
x = 3
y = 2
print("Ana ima {} brata i {} sestre".format(x,y)) #automatsko formatiranje2. zadatak - sakrij znamenke
Prilikom kupovine preko interneta, kada unosimo npr. broj kreditne kartice ili broj telefona, dio broja se "maskira" tako da se zamijeni znakom #, a prikazu
se samo zadnje četiri znamenke.
Napiši funkciju koja prima niz znakova te vraća sakrivene znakove na takav način da će sve znakove prekriti znakom #, osim zadnja četiri!
Npr.
s=12567832423 ---> #######2423
s=567abcd98at ---> #######98at
Rješenje
def sakrij(s):
return "#"*(len(s)-4) + s[-4:]3. zadatak - DNA
DNA je nukleinska kiselina koja sadrzi genetske upute za specifični biološki razvoj staničnih oblika života. Između dva DNA lanca postoje ove kombinacije: A+T, T+A, C+G, G+C. Kažemo da su A i T te C i G komplementarni.
Napiši funkciju koja prima DNA lanac u obliku niza znakova i vraća novi niz znakova koji sadrži komplementarne parove lanca.
npr. ATTGC---->TAACG
Rješenje (string)
def dna_lanac(dna):
s = ''
for i in dna:
if i=='T':
s += 'A'
elif i=='A':
s += 'T'
elif i=='G':
s += 'C'
elif i=='C':
s += 'G'
return s
Rješenje (rječnik)
def dna_lanac(dna):
parovi = { "A":"T",
"T":"A",
"C":"G",
"G":"C"
}
return "".join([parovi[x] for x in dna])Dodatno
Rječnik: sintaksa r = { ključ: vrijednost}
rjecnik = {"Pero": 2004, "Iva": 2003}
for i in rjecnik:
print(i,rjecnik[i])
List comprehension: sintaksa rez = [naredba, ponavljanje, uvjet]
#obicna for petlja
for i in range(10):
if i%2==0:
print(i+2)
#list comprehension
l = [i+2 for i in range(10) if i%2==0]
print(l)
4. zadatak - najkraća riječ
Napiši funkciju koja prima niz znakova i vraća najkraću riječ iz njega.
4. zadatak - najkraća riječ
Napiši funkciju koja prima niz znakova i vraća najkraću riječ iz njega.
def najkraca(s):
l = s.split()
return min(l, key=len)5. zadatak - broj samoglasnika
Napiši funkciju koja prima niz znakova te vraća ukupan broj samoglasnika u tom nizu.
5. zadatak - broj samoglasnika
Napiši funkciju koja prima niz znakova te vraća ukupan broj samoglasnika u tom nizu.
def samoglasnici(s):
bs = 0
for i in s:
if i in 'aeiou':
bs += 1
return bs
Simulacije
Ideje:
- dioba stanice
- gravitacija
- rad procesora
- bacanje kockice
- nasumična šetnja
- izmjena dana i noći
- sunčev sustav
- isparavanje
- pomrčina sunca
Za motivaciju ...

#ucitaj modul tkinter i random
from tkinter import *
from random import randint
#prikazi graficki prozor
prozor = Tk()
prozor.title("Ljubavni kalkulator")
prozor.config(width=300, height=300)
#prikazi naslov Ljubavni kalkulator
naslov = Label(prozor,text = "Ljubavni kalkulator",fg = "red",font = ("Comic Sans MS", 16))
naslov.place(x = 60,y = 20)
#prikazi tekst Zensko ime/Musko ime
z = Label(prozor,text = "Žensko ime: ")
z.place(x = 10,y = 90)
m = Label(prozor,text = "Muško ime: ")
m.place(x = 160,y = 90)
#prikazi polja za unos teksta
z_unos = Entry(prozor,width = 20)
z_unos.place(x = 10, y = 120)
m_unos = Entry(prozor, width = 20)
m_unos.place(x = 160, y = 120)
#funkcija za generiranje nasumicnog broja
def izracunaj():
n = randint(1,100)
return n
#funkcija koja provjerava je li u textbox upisano ime i ispisuje nasumican broj
#nakon klika na gumb Izracunaj
def provjeri_prikazi():
if len(z_unos.get()) == 0 or len(m_unos.get()) ==0 :
rez = Label(prozor,text = "Upiši ime! ",fg="red",font = ("Comic Sans MS", 26))
rez.place(x = 70,y = 210)
else:
rez = Label(prozor,text = " "+str(izracunaj())+"% ",font = ("Comic Sans MS", 34))
rez.place(x = 70,y = 210)
#prikazi gumb Izracunaj
gumb = Button(prozor, text = "Izračunaj", command = lambda:[provjeri_prikazi(),izracunaj()])
gumb.place(x = 120,y = 160)
prozor.mainloop()
Primjer: Loto
#napišite program koji simulira loto 6/45 i izvlaci 7 brojeva
#program takoðer priva vaših 7 brojeva kao listu te ispisuje koliko brojeva ste pogodili
import random
izvuceni = []
def loto_brojevi():
for i in range(0,6):
br = random.randint(1,45)
while br in izvuceni:
br = random.randint(1,45)
izvuceni.append(br)
izvuceni.sort()
print (izvuceni)
korisnik = []
def korisnik_brojevi():
for i in range(0,6):
br = int(input("Upišite broj od 1-45"))
while br<1 or br>45:
br = int(input('Pokušajte ponovno'))
korisnik.append(br)
korisnik.sort()
print (korisnik)
loto_brojevi()
korisnik_brojevi()
brojac = 0
pogodak = []
for i in korisnik:
if i in izvuceni:
brojac+=1
pogodak.append(i)
print ('Broj pogodataka:', brojac)
6. zadatak - Nasumična šetnja (Random walk)
Koristeći modul turtle izradi simulaciju nasumične šetnje dvije kornjače.
Rješenje:
Text
import turtle
import random
prozor = turtle.Screen()
korni1 = turtle.Turtle()
korni2 = turtle.Turtle()
korni1.color("Red")
korni1.pencolor("red")
korni2.color("Green")
korni2.pencolor("green")
brojac = 0
while brojac <= 1000:
korni1.setheading(random.randint(0,360))# odredi smjer kretanja kornjace
korni1.forward(random.randint(-50,50)) # odredi udaljenost kretanja prema naprijed
korni2.setheading(random.randint(0,360))
korni2.forward(random.randint(-15,15))
brojac += 1
prozor.mainloop() Obrazovni ishodi u domeni Računalno razmišljanje i programiranje (8.raz.)
- B.8.1 učenik identificira neki problem, stvara program za njegovo rješavanje, dokumentira rad programa i predstavlja djelovanje programa drugima.
- B.8.2 učenik prepoznaje i opisuje algoritam sortiranja, primjenjuje jedan algoritam sortiranja za rješavanje zadanog problema u programskom jeziku.
- B.8.3 učenik prepoznaje i opisuje mogućnost primjene rekurzivnih postupaka pri rješavanju odabranih problema te istražuje daljnje mogućnosti primjene rekurzije.
- B.8.4 učenik prepoznaje i proučava interdisciplinarnu primjenu računalnoga razmišljanja analiziranjem i rješavanjem odabranih problema iz različitih područja učenja.
Bubble sort (Mjehuričasto sortiranje)
- od najmanjeg prema najvećem
- usporedba dva susjedna elementa
- zamjena mjesta
brojevi = [5, 8, 9, 2, 1, 4]
for i in range(len(brojevi)-1):
for j in range((len(brojevi)-1)-i): # provjeravamo svaki element niza
if brojevi[j] > brojevi[j+1]:
brojevi[j], brojevi[j+1] = brojevi[j+1], brojevi[j] # napravi zamjenu
print(brojevi)
Animirani prikaz
Selection sort (Sortiranje izborom)
- najveću vrijednost postavi na posljednje mjesto
- ponavljaj za sve osim posljednjeg
brojevi = [5, 8, 4, 12, 9, 1]
for i in range(len(brojevi)-1,0,-1):
najveci = 0
for j in range(1, i+1):
# usporedi trenutnu najvecu vrijednost i sljedeci element niza
if brojevi[j] > brojevi[najveci]:
najveci = j
#zamjena
brojevi[i], brojevi[najveci] = brojevi[najveci], brojevi[i]
print(brojevi)
Funkcija sorted()
- ugrađena funkcija koja sortira niz i vraća listu
- sintaksa: sorted(naziv, ključ, obrnuti redosljed)
brojevi = [5, 6, 2, 1, 8, 6]
print(sorted(brojevi)) # Izlaz: [1, 2, 5, 6, 6, 8]
print(sorted(brojevi, reverse = True)) # Izlaz: [8, 6, 6, 5, 2, 1]
voce = ['mango', 'kivi', 'lubenica', 'banana', 'jagoda']
print(sorted(voce)) # Izlaz: ['ananas', 'banana', 'jabuka', 'jagoda', 'kruska']
print(sorted(voce, key = len)) # Izlaz: ['jabuka', 'kruska', 'ananas', 'banana', 'jagoda']
x = "python"
print(sorted(x)) # Izlaz: ['h', 'n', 'o', 'p', 't', 'y']
Metoda sort()
- sortira elemente niza silazno ili uzlazno
- sintaksa: naziv.sort(ključ, obrnuti redosljed)
brojevi = [4, 5, 6, 2, 1]
brojevi.sort()
print(brojevi) # Izlaz: [1, 2, 4, 5, 6]
7. zadatak - znamenke
Napiši funkciju koja prima neki cijeli broj te sortira njegove znamenke od najmanje do najveće
7. zadatak - znamenke
Napiši funkciju koja prima neki cijeli broj te sortira njegove znamenke od najmanje do najveće
def znamenke(broj):
sortiraj="".join(sorted(str(broj), reverse=True))
return int(sortiraj)8. zadatak - dvije liste
Napiši program koji sortira dvije učitane liste prezimena i godine:
- po prezimenu
- po godini rođenja
l = ['anic','peric','katic']
l2 = [2009, 2005,2001]
# sortiraj po prezimenu
a = sorted(zip(l, l2))
for i,j in a:
print (i,j)
print('-------')
# sortiraj po godini rodjenja
b = sorted(zip(l, l2), key=lambda x: x[1])
for i,j in b:
print (i,j)Funkcija lambda
- funkcija bez imena, tzv. anonimna funkcija, kratka i u jednom retku
#funkcija zbroj
def zbroj(a,b):
return a + b
#lambda funkcija
zbroj = lambda a,b : a + b
9. zadatak - testovi
- Koristeći funkciju sorted() napiši program koji će za učitan broj učenika, maksimalan broj bodova u testu te prezime i rezultat svakog učenika ispisati učenike, njihov rezultat i postotak sortirano po prezimenu učenika
- Za sortiranje dvije liste (bodovi i prezimena) koristit ćemo funkciju zip()
Rješenje:
Text
prezimena = []
bodovi = []
n = int(input('Broj ucenika'))
br_bod = int(input('Broj bodova u testu'))
for i in range(n):
prezime = input('Upisi prezime ucenika:')
prezimena.append(prezime)
bod = int(input('Broj bodova:'))
bodovi.append(bod)
prezimena, bodovi = zip(*sorted(zip(prezimena, bodovi)))
print('Ispis ucenika, broj bodova i postotak:')
print('------------------------------------------')
for i in range(n):
print(prezimena[i], bodovi[i],(int(bodovi[i])/br_bod)*100,'%')
Rekurzija
Primjeri i ideje:
Umnožak prvih n brojeva
Legenda o šahu
Tornjevi Hanoija
Kochova pahuljica
Pitagorino stablo
Kralj je kraljev sin
Primjeri za učenje:
crtanje piramide, spirale, stabla
Primjer: Umnožak prvih n brojeva
def umnozak(n):
if n == 1:
return 1
else:
rez = n * umnozak(n-1)
print("Trenutni rezultat za ", n, " * faktorijel(" ,n-1, "): ",rez)
return rez
print(umnozak(5))
10. zadatak:
Napiši rekurzivnu f-ju koja će računati potenciju za zadani prirodni broj n.
10. zadatak:
Napiši rekurzivnu f-ju koja će računati potenciju za zadani prirodni broj n.
def potencija(n):
if n == 1:
return 2
else:
return potencija(n-1)*2
Projekti: Primjer 1
Igra: Koordinatni sustav (python, pygame)

Projekti: Primjer 2
Igra: Pogodi zastavu (python, pygame)

Projekti: Primjer 3
Istraživanje na zadanu temu
Obrada podataka (python, pandas, numpy, matplotlib)
Prikaz rezultata i opis projekta (jupyter notebook)
Računalno razmišljanje i programiranje
By Ivana V
Računalno razmišljanje i programiranje
- 402