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 formatiranje

2. 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:

2^n

Napiši rekurzivnu f-ju koja će računati potenciju         za zadani prirodni broj n.

2^n

10. zadatak:

2^n

Napiši rekurzivnu f-ju koja će računati potenciju         za zadani prirodni broj n.

2^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