13.334 pregleda

Serijal tekstova: Zajedno naučimo Python (6. dio) – Liste

1

Pozdrav svima i dobro došli u šesti po redu Python tutorial. Dosad smo već dosta toga obradili i mogu ponosno reći da smo prešli pola puta ovog serijala.

Današnja će tema biti tip podataka koji nazivamo liste. Što su i čemu služe liste demonstrirat ćemo na sljedećem primjeru; zamislimo da trebamo napraviti program gdje korisnik unosi n imena. Nakon unosa korisnik želi prvo ispisati sva imena, a nakon toga samo određeno ime unosom broja od 1 do n.
Ovdje nalazimo nekoliko problema; kao prvo, mi ne znamo koliko će imena korisnik željeti upisati i ne možemo unaprijed deklarirati odnosno napraviti toliki broj varijabla gdje će se spremiti imena. Kao drugo, ako sve pišemo u jednu varijablu, stari sadržaj će se prebrisati i nećemo moći ispisati prošla unesena imena. Da bismo uspjeli napraviti ovakav program koristimo se listama.

Liste su skupovi podataka (varijablā) koji predstavljaju jednu cjelinu. Elementi u listi odvojeni su zarezom, a mogu biti različitih tipova, za razliku od nekih drugih programskih jezika. Također, lista se prepoznaje po uglatim zagradama unutar kojih se nalaze njezini elementi.

lista = [1, “bicikl”, 3.14, “auto”]

Primjer jedne liste možete vidjeti iznad. Ono što je važno reći je da se svakom elementu liste može pristupiti s pomoću indeksa, odnosno broja kojeg pišemo u uglatim zagradama na sljedeći način:

 lista[1]

Ono što je na prvi pogled zbunjujuće jest to da ako ispišemo prethodno napisanu vrijednost funkcijom print(), kao rezultat dobit ćemo “bicikl”. To je normalna stvar u gotovo svakom programskom jeziku, a radi se o tome da indeks zapravo predstavlja pomak u odnosu na prvu vrijednost liste. Budući da prva vrijednost liste nema pomak, njezin indeks je 0 a svakom sljedećem moguće je pristupiti kao n-1 (npr. za treći element je indeks 2). Još jedna stvar koja je važna je ta da se ne moramo brinuti oko dužine liste, odnosno koliko će elemenata imati, dok je kod nekih programskih jezika to i te kako važno.

Python 6 - Slika 01

Kako se koristiti listama? Dosad smo zadali listu tako da smo samo upisali elemente u nju. Međutim, moguće je deklarirati listu, te u nju kasnije dodati elemente. Za to koristimo funkciju append(), koja na kraj liste dodaje element.

Python 6 - Slika 02

Liste uz samo dodavanje elemenata na kraj liste imaju još mnogo mogućnosti, a najčešće upotrebljavane prikazane su u nastavku:

.insert()

Ova funkcija nam omogućuje da unutar liste ubacimo element na točno određeno mjesto. Potrebna su dva argumenta unutar zagrada, gdje prvi element označuje mjesto u listi, a drugi element ono što želimo unijeti. U skladu s time, elementi nakon te pozicije u listi pomiču se za jedno mjesto.

.remove()

Ova funkcija traži jedan argument, te zatim u listi traži tu istu vrijednost. Prva takva vrijednost koja je nađena se briše iz liste.

.count()

Ova funkcija traži jedan argument, te zatim u listi prebrojava koliko se tih elemenata u listi pojavljuje.

.index()

Ova funkcija traži jedan argument, te zatim u listi traži istu takvu vrijednost i vraća indeks pozicije na kojoj se ista nalazi.

.reverse()

Ova funkcija mijenja poredak liste u suprotni (inverzni). Ne treba argument.

.sort()

Ova funkcija sortira listu. Ne treba argument.

.pop()

Ova funkcija traži jedan argument, te ga zatim u listi pronalazi i “uzima” iz liste te ga vraća kao rezultat. Taj element se nakon ove funkcije više ne nalazi u liste, tj. izbrisan je iz nje.

Naravno, ako postoji mogućnost dodavanja elemenata u listu, postoji i mogućnost brisanja. To radimo ovako:

del lista[i]

gdje slovo i predstavlja indeks elementa u listi. S druge strane, ako želimo saznati veličinu neke liste, to radimo ovako:

len(lista)

NAPOMENA: Važno je napomenuti da ne miješate funkcije (npr. len()) i metode (npr. .pop()). Kao što vidite, funkcije nemaju točke ispred imena, a metode imaju. Razlika je u tome da se metoda odnosi na neki objekt. Primjerice, uzmimo listu kojoj želimo dodati novi element. Za to koristimo metodu .append():

lista.append(“element”)

Ako samo napišemo:

.append(“element”)

python će javiti pogrešku, jer se u ovom slučaju metoda ne odnosi ni na kakav objekt i nemamo kamo dodati vrijednost unutar zagrada.

S druge strane, imamo funkcije koje djeluju samostalno i ne trebamo ih pridruživati objektima, nego je potrebno unutar zagrada unijeti argument ili više njih koji su ulazni parametri funkcije. Primjer funkcije može biti len():

len(“element”)

Argument funkcije je “element”, a budući da ova funkcija izračunava dužinu, u ovom slučaju stringa, vratit će nam vrijednost 7. Naravno, to je samo nešto kratko o funkcijama, a detaljnije ćemo ih obraditi u sljedećim tutorialima.

Pošto smo upoznali osnove funkcije i mogućnosti rada s listom, krenimo riješiti upravo onaj zadatak s početka tutoriala.

Prvo trebamo jednu varijablu u koju će se spremiti unos od strane korisnika s pomoću koje ćemo znati koliko imena on želi unijeti te praznu listu u koju ćemo unositi vrijednosti:

unos = int(input(“Koliko imena želite unijeti? “))
lista = []

Nakon toga možemo krenuti na for iteraciju gdje ćemo popunjavati listu:

for i in range(0,unos):
ime = input(“Unesite ime: “)
lista.append(ime)

Nakon što smo u for iteraciji napravili varijablu u koju se sprema ime i nakon toga se dodaje na kraj liste, potrebno je nakon iteracije ispisati cijelu listu, a nakon toga pitati korisnika koje ime želi da se ponovo ispiše.

Imena nećemo ispisivati svako posebno, već ćemo ispisati listu, a to radimo ovako:

print(lista)
broj = int(input(“Unesite broj za ispis imena (1 -” + str(unos) + “): “))

Sada nam samo preostaje ispisati ime iz liste. Međutim, ovdje se treba sjetiti da elementi počinju od 0, a ne od 1, stoga se vrijednost korisnika mora umanjiti za 1:

print(lista[broj-1])

Na ovaj način napisali smo program, a kako bi to trebalo izgledati pogledajte na sljedećoj slici:

06 Slika 03

Kod ovog programa vidjeli smo osnovno korištenje listama i njezin ispis. Međutim, ima jedna stvar koja je zanimljiva. Ako se sjećate, a trebali biste, prošli smo put radili iteracije. Postoji nešto što vam nisam rekao, a tiče se for iteracije. Prije sam spomenuo da kod lista dužina nije previše bitna, nego je sve relativno fleksibilno. Upravo radi toga postoji jedan malo “drukčiji” izgled for iteracije koji prolazi kroz sve elemente neovisno o njezinoj dužini.

Pa tako ako uzmemo listu:

lista = [“Ivica”, “Marica”, 2, 4, “Python”, 555]

i želimo ju ispisati, nije nam potreban podatak o njezinoj veličini. Moguće ju je cijelu ispisati na ovakav način:

for element in lista:
print(element)

Ovdje ne upotrebljavamo funkciju range(), nego stvaramo varijablu element u koju se sprema određena vrijednost liste s obzirom na korak iteracije. Tako prolazimo kroz cijelu listu, bez obzira na veličinu liste. To nam u nekim slučajevima može svakako pomoći i skratiti nam muke.

Python 6 - Slika 04

Prije rješavanja glavnog zadatka u ovom tutorialu, vrijedi spomenuti još jednu zanimljivost! Radi se o tome stringovi imaju neke osobine liste! Malo zbunjujuće na početku, ali je zapravo logično. Sjetite se slicinga od prije nekoliko tutoriala. Mogli ste odabrati od kojeg do kojeg znaka želite izrezati string. Upravo to je moguće zbog nekih zajedničkih osobina. Pa tako ako imate string “Python” i ispišete ga uz pomoć for iteracije dobit ćete sljedeće:

Python 6 - Slika 05

Nakon svega ovoga, mislim da ste spremni za završni zadatak u kojem ćemo napraviti program za izradbu računa.

Na samom početku treba reći da će podaci biti spremljeni u listi, a elementi liste će biti također liste u koje ćemo spremati podatke za ime proizvoda, cijenu i količinu. Zapravo, to će biti slično ovom slučaju gdje je to jednostavnije prikazano:

Python 6 - Slika 06

Za početak trebamo napraviti praznu listu koju ćemo nazvati racun u gdje će se spremati navedeni podaci. Naravno, treba nam i varijabla suma u koju će se spremati ukupna vrijednost računa.

racun = []
suma = 0

Kada smo to napisali, potrebno je napraviti neko zaglavlje za unos, pa ćemo to napraviti na sljedeći način, s upitom korisnika za unos količine proizvoda:

Python 6 - Slika 07

Sada je vrijeme za for iteraciju u kojoj ćemo tražiti podatke od korisnika za ime proizvoda, cijenu i količinu, te to kao listu dodati u listu racun (kraće to možemo nazvati podlistom). I naravno, pri kraju iteraciju u varijablu suma dodajemo umnožak cijene i količine u tom koraku iteracije.

Python 6 - Slika 08

Sada dolazi na red ispis zaglavlja računa. S tim se možete igrati i složiti parametre po želji. Također, nakon toga se uz pomoć for iteracije kako smo danas vidjeli ispisuju vrijednosti iz liste, odnosno podliste. To funkcionira tako se kod svakoga koraka iteracije podlista sprema u varijablu vrij, a onda se željene vrijednosti te podliste ispisuju preko indeksa.

Python 6 - Slika 09

Naravno, na kraju računa vrijedi ispisati ukupnu vrijednost računa, poreza i osnovicu, što je prikazano na sljedećoj slici, naravno, uz prigodnu poruku.

Python 6 - Slika 10

Ovim bismo došli do kraja ovog programa. Međutim, što ako korisnik želi unositi nove račune, a da ne mora svaki put stalno pokretati program? Ovdje ćemo iskoristiti naše znanje o while iteraciji.

Sve što smo dosad napisali trebalo bi se nalaziti unutar jedne while petlje, pa prije pisanje prvo označite sav kod (CTRL + A) i pritisnite TAB. Tako smo uvukli kod koji će se nalaziti unutar while iteracije.

Ono što nam treba jest varijabla u koju ćemo spremiti korisnikov odabir, odnosno želi li ponovo pokrenuti unos računa. Stoga ćemo napraviti varijablu ponovo u koju ćemo spremiti vrijednost “da”. To radimo stoga što ćemo nakon toga napraviti while iteraciju, kojoj će uvjet biti da ako je vrijednost varijable ponovo jednaka “da”, da se onda ponovo unosi račun. Stoga bi početak programa trebao izgledati ovako:

ponovo = “da”
while ponovo == “da”:

Nakon toga sve mora biti uvučeno unutar while iteracije, kako samo već i prije napomenuo. Međutim, nemojte zaboraviti da to nije sve! Zašto? Zato što ako sada pokrenete program, on će se stalno iznova pokretati, jer nismo korisniku dali mogućnost da odabere želi li ponovo pokrenuti unos računa ili izaći iz programa.

Još treba na kraj while iteracije (isto uvučeno!), odnosno nakon ispisa ukupne vrijednosti računa dodati kod gdje se korisnika pita želi li unijeti novi račun ili izaći iz programa. Za to je potreban sljedeći kod:

Python 6 - Slika 11

Sada možete pokrenuti program i vidjet ćete da sve to funkcionira 🙂

Ipak, možemo još malo uljepšati program, a tiče se iznovičnog unosa računa. Radi se o tome da stari tekst ostaje iznad teksta novog unosa računa pa sve to ne izgled baš najbolje. Da bismo to riješili treba nam se ekran obrisati prije novog unosa računa.

Za tu mogućnost upotrebljavamo nešto što se zove modul, a uključuje mnoge mogućnosti i već gotove funkcije, ovisno o kakvom se modulu radi. U ovom slučaju, koristit ćemo se modulom os. On sadrži funkcije za interakciju s operacijskim sustavom i uz pomoć njega ćemo iskoristiti funkciju operacijskog sustava “clear”, koja nam prikaže “čisti” ekran.

Potrebno je na početak programa, najbolje u prvi redak iznad svega napisati sljedeće:

import os

Svi moduli se na taj način uključuju u Python (import naziv_modula), a oni donose mnogo dodatnih mogućnosti te fleksibilnost programa i samog programiranja.

Nakon što smo dodali novi modul, dođimo na kraj programa unutar while iteracije gdje smo korisnika pitali želi li ponovo pokrenuti unos računa. Ono što nam treba jest jedna if selekcija, koja u slučaju unosa “da” briše ekran. Na sljedećoj slici možete vidjeti kako to treba izgledati:

Python 6 - Slika 12

Za sam kraj, prilažem sliku gdje je prikazan rezultat programa, odnosno, prikaz jednog računa.

Python 6 - Slika 13

Zadaci, zadaci, zadaci 😀 Da, da! Ima nešto i za vas.

  1. Napišite program koji traži unos n brojeva od strane korisnika, a zatim se ti brojevi ispisuju obrnutim redoslijedom.
  2. Napišite program koji traži unos n brojeva od korisnika te se na kraju ispišu najmanji i najveći uneseni broj.
  3. Napišite program gdje korisnik unosi n brojeva (n mora biti paran). Nakon unosa, brojevi se trebaju zbrojiti na sljedeći način: npr. za 6 brojeva: zbroj 1. i 6. unosa, zatim 2. i 5. te na kraju 3. i 4.. Ispis neka bude u obliku:

Python 6 - Slika 14

Do sljedećeg puta,

Nikola

VN:F [1.9.22_1171]
Rating: 4.4/5 (15 votes cast)
Serijal tekstova: Zajedno naučimo Python (6. dio) - Liste, 4.4 out of 5 based on 15 ratings

One Response

  1. lol napisao:

    Napokon nesto da valja 🙂 Svaka cast

Ostavi komentar

© 2017 Linux Za Sve. | Impressum | Sadržaj je licenciran pod CC-SA-3.0 ako nije drugačije naznačeno.
Proudly designed by Theme Junkie.