Računanje sa listama¶
Ovde ćemo još malo uvežbavati rad sa listama i kombinavanje tehnika koje smo do sada naučili.
Zadatak - najmanji pozitivan broj
Data je torka brojeva. Ispisati najmanji pozitivan broj iz te torke.
Ovaj zadatak je kombinacija zadataka kakve smo radili do sada. U prvom delu zadatka u listu kopiramo pozitivne brojeve iz torke, a u drugom delu primenjujemo funkciju min na listu pozitivnih brojeva.
Pomenuli smo da funkcije min, max, sum, len mogu da se primene različite kolekcije i pokazali smo to na primerima torke, opsega i stringa (izuzev sume elemenata stringa). Sada vidimo da funkcija min prihvata i listu kao svoj argument. Isto važi i za funkcije max, sum, len.
Primer - kvarovi
U jednoj fabrici ima 10 mašina i one su predstavljene brojevima od 0 do 9. Za svaki kvar koji je nastao beleži se broj mašine koja se kvarila. Ovi brojevi su dati u torki na početku skripte.
Napišite program koji ispisuje koliko je puta svaka od mašina neispravno funkcionisala, a zatim i brojeve mašina koje se nisu ni jednom pokvarile.
Prvi deo zadatka zahteva da prebrojimo koliko puta se svaki broj pojavljuje u ulaznim podacima. Da bismo rešili taj deo zadatka, pravimo niz br_kvarova od 10 elemenata (koji su inicijalno nule), u kome svaki element odgovara jednoj mašini i broji njene kvarove.
br_kvarova = [0] * 10
for masina in kvarovi:
br_kvarova[masina] += 1
Nakon toga za svaku mašinu ispisujemo koliko je imala kvarova. Ovde koristimo opseg jer želimo da za svaku mašinu pored broja kvarova ispišemo i njen redni broj:
for masina in range(10):
print('Mašina', masina, 'se kvarila', br_kvarova[masina], 'puta.')
U drugom delu zadatka se traži da ispišemo brojeve mašina koje se nisu kvarile. To su mašine kojima je broj kvarova jednak nuli. Prolazimo još jednom kroz listu br_kvarova i indekse elemenata jednakih nuli ubacujemo u listu ispravne:
ispravne = []
for masina in range(10):
if br_kvarova[masina] == 0:
ispravne.append(masina)
Na kraju ispisujemo elemente liste ispravne:
print('Mašine koje se nisu kvarile:')
for masina in ispravne:
print(masina)
Evo kako izgleda ceo program:
Zadatak - navijači
Navijači iz 8 zemalja dolaze na turnir u grad X. Organizatori turnira žele da znaju koliko navijača dolazi iz svake od zemalja.
Svaka zemlja je predstavljena brojem od 0 do 7. Dati brojevi za svakog navijača govore iz koje zemlje on dolazi. Dopuniti program koji za svaku zemlju ispisuje koliko navijača dolazi iz nje.
U zadatku se traži da se za svaki broj od 0 to 7 prebroji koliko puta se taj broj pojavljuje mežu datim brojevima. Deo koji nedostaje je vrlo sličan brojanju kvarova iz datog primera.
Zadatak - najviše navijača
Ovo je nastavak prethodnog zadatka. Organizatori sada dodatno žele da znaju iz koje zemlje dolazi najviše navijača.
Iskopirajete prethodni program i dopunite ga tako da na kraju ispisuje broj zemlje iz koje dolazi najviše navijača.
Ako ispravno rešite zadatak, program treba da ispiše broj 3, jer se taj broj načešće pojavljuje među podacima.
Zadatak - Najveći negativan broj
Data je torka brojeva. Ispisati najveći negativan broj iz te torke.
Zadatak - Male prodaje
Data torka sadrži iznose računa kupaca u jednoj prodajnoj mreži. Sve prodaje sa iznosom manjim od 500 se smatraju za male prodaje. Napisati program koji izračunava ukupan prihod od svih malih prodaja.
Ovaj zadatak možete da rešavate na dva načina. Jedan je izdvajanje malih iznosa u posebnu listu i primena funkcije sum na tu listu. Drugi način je postepeno građenje zbira, kao što smo to radili u lekciji o brojanju i sumiranju.