Sortiranje u Pythonu (skrivanje podataka)

Na natjecanjima iz pojedinih predmeta učenici osim osobnih podataka (ime i prezime) često zapisuju zaporke (lozinke) koje sami odabiru. Na taj način osigurava se da samo vlasnici zaporke znaju kako su riješili test i koji rezultat su postigli. Međutim, što ako je učenik jako dobro riješio test i želi da svi znaju da se on krije iza pojedine lozinke. Kako riješiti ovaj problem na način da se osobni podaci pojedinog učenika prikazuju samo ako je učenik ostvario dobar uspjeh?

Zadatak: Na SUDOKU natjecanju sudjelovalo je n učenika. Za svakog učenika potrebno je upisati ime i osvojeni broj bodova. Podaci se upisuju u listu. Sortiraj listu s podacima tako da se učenik koji je osvojio najviše bodova nalazi na prvom mjestu (sortirati listu uzlazno koristeći funkciju sorted).

Ime i prezimebroj bodova
Pero Perić100
Maja Majić65
Ivan Ivić110
Tin Tinić90
Sara Sarić95

Nakon unosa svih podataka dobili smo ispis sortirane liste. Na prvom mjestu uistinu se nalaze podaci učenika koji je osvojio najviše bodova, ali na drugom mjestu se nalazi učenik s najmanjim brojem bodova.

Nećemo moći koristiti funkciju sorted jer se sortiranje provodi na način da se uspoređuje prvi element podliste (ime). Isto će se dogoditi ako za sortiranje koristimo metodu sort.

Budući da je podatak za ime učenika znakovni tip podataka (string) sortirano je po abecedi (uzlazno, od A do Z).

Promijenimo program tako da uspoređujemo bodove pojedinog učenika i sortiramo učenike prema bodovima.

Za svakog natjecatelja uspoređuje se podataka koji se nalazi na drugom mjestu u podlisti, odnosnu na mjestu s indeksom 1 (natj [ i ]  [ 1 ])

Riješili smo problem ispravnog sortiranja liste listi. Vratimo se na problem s početka. Dodajmo još jedan podatak za svakog učenika, zaporku.

Ime i prezimezaporkabroj bodova
Pero Perić12345škola100
Maja Majić77077kuća65
Ivan Ivić13579kruška110
Tin Tinić12000panda90
Sara Sarić11011lopta95

Promijenimo program tako da unosimo i zaporku. Program će ispisati imena onih učenika koji su ostvarili broj bodova koji je veći od prosjeka. Za one učenike koji su ostvarili manje bodova od prosjeka prikazivat će se zaporka i broj bodova. U ovom slučaju prvo ćemo sortirati sve učenike prema broju bodova, a zatim ćemo kreirati novu listu (natj2) u kojoj će se za svakog učenika nalaziti dva podatka: ime i broj bodova ili zaporka i broj bodova.

Ispisana je cijela sortirana lista. Ovakav način ispisa nije čitljiv. Prilagodimo ispis kako bi bio što čitljiviji na način da se podaci za pojedinog učenika prikazuju u novom retku.

Uz pomoć ovog jednostavnog programa omogućili smo učenicima prikaz njihovih imena ili šifre ovisno o ostvarenim postignućima.