predavanje 9–kolekcije:skupovi i reČnici · 2018-04-16 · rečnik čiji je ključ ime a...
TRANSCRIPT
OSNOVE PROGRAMIRANJA U PAJTONU
PREDAVANJE 9 – KOLEKCIJE: SKUPOVI I REČNICI
Miloš Kovačević
Đorđe Nedeljković
Marija Petronijević
Dušan Isailović
SADRŽAJ PREDAVANJA
- Skupovi
- Mape (Rečnici)
- Kombinatorne strukture, modul itertools
SKUPOVI I MAPE
Za razliku od sekvenci (tekst, liste, torke), skupovi i mape predstavljaju neuređene kolekcije.
Neuređenost implicira da ne postoje indeksi koji govore o redosledu ubacivanja.
Skupovi su kolekcije nepromenljivih objekata koji ne sadrže duplikate.
Predstavljaju apstrakciju skupova iz matematike.
Mape sadrže parove objekata (preslikavanja tipa ključ - vrednost).
Objektima vrednostima pristupa se navođenjem odgovarajućeg ključa.
Ključevi moraju biti nepromenljivi objekti. Vrednosti su proizvoljni objekti.
SKUPOVI – TIP set
Poput ostalih kolekcija, skupovi se mogu praviti implicitno – korišćenjem {}, ili eksplicitno korišćenjem konstruktora set()
SKUPOVI – TIP set
Liste su promenljivi objektipa ne mogu biti elementiskupa
Prazan skup pravi se pomoću konstruktora
SKUPOVNE OPERACIJE
MAPE U PAJTONU: REČNICI – TIP dict
Rečnici sadrže parove objekata (preslikavanja tipa ključ - vrednost).
Objektima vrednostima pristupa se navođenjem odgovarajućeg ključa.
REČNICI – TIP dict
Uočiti neuređenuprirodu rečnika
Prazan rečnik pravi se pomoću {}. Uporediti sa skupovima – prazan skup pravi se sa set()
ključ vrednost
UBACIVANJE NOVIH VREDNOSTI U REČNIK
Prilikom ubacivanja, između uglastih zagrada navodi se ključ koji odgovara vrednost koja se ubacuje:
Ako zadati ključ već postoji, onda se dotično preslikavanje ažurira novom vrednošću!
ČITANJE VREDNOSTI IZ REČNIKA
da li je ključ u rečniku?
za čitanje se savetuje metoda get()koja vraća None ako ključ nije u rečniku
Ako nema traženog preslikavanja, vraća drugi (opcioni) parametar.
ključ za koji se traži vrednost.
BRISANJE IZ REČNIKA
del briše samo ako postoji ključ
metod pop briše i vraćavrednost iz rečnika
ako se navede, opcioni argument se vraća ako ključ ne postoji
metod clear() briše sve!
PROLAZAK KROZ REČNIK
Svi pogoci za datog strelca – grupisanje :rečnik čiji je ključ ime a vrednost lista sa brojevima pogođenih krugova
Koliko je puta pogođen svaki krug – prebrojavanje (računanje frekvencija)rečnik čiji je ključ broj kruga a vrednost frekvencija pogađanja
Kako pogoci stižu u realnom vremenu, podaci se obrađuju u petlji while, sve dok korisnik ne unese prazno ime – kraj takmičenja.
STRELCI – GRUPISANJE I PREBROJAVANJE
KOMBINATORNE STRUKTURE
U programiranju se često bira k od n objekata iz zadate kolekcije, na sve moguće načine – kombinacije bez ponavljanja (npr. u metodi grube sile).
Ako se potencijalna rešenja predstavljaju kao sekvence objekata, potrebno je generisati sve moguće rasporede – permutacije, ili izabrati određeni broj objekata na k pozicija – varijacije.
Za generisanje kombinacija, permutacija i varijacija iz zadate kolekcije, koriste se funkcije iz modula itertools.
Za generisanje kombinacija bez ponavljanja, ako se ne koristi itertools,mogu se koristiti ugnježđene petlje – videti obavezno problem 5.9 u knjizi !
MODUL ITERTOOLS
vraća objekat iterator.
vraća objekat iterator.
OBJEKAT ITERATOR
Funkcija combinations() vraća objekat iterator. Iterator na eksplicitan zahtev (u for petlji) vraća elemente jedan po jedan (kombinacije u obliku torki).
Iterator ne sadrži celu sekvencu već generiše sledeći objekat na osnovu tekućeg objekta i pravila za generisanje sledećeg objekta – štednja memorije.
Sa iteratorima smo se već sreli – objekat tipa range
Ako se žele svi objekti odjednom – iterator se prosledi konstruktoru torke ili liste:
Treba generisati sve trojke stranica iz liste stranica – stranice kandidati,kombinacije bez ponavljanja treće klase!
Tri kandidatne stranice a, b i c čine trougao ako važe sledeće nejednakosti (domensko znanje):
Površina trougla zadatog stranicama računa se preko Heronovog obrasca (domensko znanje):
TROUGLOVI
Iterator za generisanje kombinacija treće klase iz liste stranice
Dekompozicija na 3 fje olakšava rešavanje
TROUGLOVI – TEST PROGRAM
Funkcija combinations() u svakoj iteraciji proizvodi po jednu tročlanu torku sa dužinama stranica.
PERMUTACIJE, VARIJACIJE