Vodič za Pajton 2.6/Liste
Promenljive sa više od jedne vrednosti
[uredi]Već ste videli redne promenljive koje imaju jednu vrednost. Međutim, druge promenljive vrste mogu da prime više od jedne vrednosti. Najjednostavniji tip je takozvana lista. Ovde je primer gde se liste koriste:
који = input("Који месец (1-12)? ")
месеци = ['Јануар', 'Фебруар', 'Март', 'Април', 'Мај', 'Јун', 'Јул',
'Август', 'Септембар', 'Октобар', 'Новембар', 'Децембар']
if 1 <= који <= 12:
print "Месец је", месеци[који - 1]
a primer izlaza:
Који месец (1-12)? 3 Месец је Март
Ovo je primer da su месеци
lista. месеци
su definisani linijama месеци = ['Јануар', 'Фебруар', 'Март', 'Април', 'Мај', 'Јун', 'Јул',
i 'Август', 'Септембар', 'Октобар', 'Новембар', 'Децембар']
(imajte na umu da se \
takođe može koristi da podeli dugu kolonu, ali to nije neophodno u ovom slučaju, jer je Pajton dovoljno inteligentan da shvati da sve u zagradi ide zajedno). [
i ]
počinju i završavaju listu sa zarezima(,
) koji razdvajaju predmete u listi. Lista se koristi u месеци[који - 1]
. Spisak se sastoji od stavki koje se odbrojavaju sa početkom u 0. Drugim rečima, ako želite Januar koristićete месеци[0]
. Dajte spisak brojeva i da se vrati vrednost koja se skladišti na toj lokaciji.
Izjava if 1 <= који <= 12:
biće tačna ako je који
između 1 i 12 (drugim rečima to je ono što biste očekivali ako biste ga videli u algebri).
Liste se može posmatrati kao niz kutija. Svaka kutija ima drugačiju vrednost. Na primer, kutije stvorene od strane демолиста = ['живот', 42, 'универзум', 6, 'и', 9]
bi izgledale ovako:
broj kutije | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
demolista | "život" | 42 | "univerzum" | 6 | "i" | 9 |
Svaka kutija je označena brojem tako da će izjava демолиста[0]
dati 'живот'
, демолиста[1]
će dati 42
i tako dalje демолиста[5]
daje 9
.
Više karakteristika listi
[uredi]Sledeći primer služi samo da pokaže mnogo drugih stvari sa listama koje može da uradi(ne očekujem da ga kucate, ali bi verovatno trebalo da se poigrate sa listama dok niste zadovoljni njima.). Evo ide:
демолиста = ["живот", 42, "универзум", 6, "и", 9]
print "Демолиста = ",демолиста
демолиста.append("све")
print "после 'све' приказано у демолисти је сада:"
print демолиста
print "Дужина(демолиста) =", len(демолиста)
print "Демолиста.индекс(42) =", демолиста.index(42)
print "Демолиста[1] =", демолиста[1]
# Даље ћемо ставити петља кроз листу
c = 0
while c < len(демолиста):
print "демолиста[", c, "] =", демолиста[c]
c = c + 1
del демолиста[2]
print "После брисања 'универзум' демолиста је сада:"
print демолиста
if "живот" in демолиста:
print "'живот' је пронађен у демолисти"
else:
print "'живот' није пронађен у демолисти"
if "амеба" in демолиста:
print "'амеба' је пронађена у демолисти"
if "амеба" not in демолиста:
print "'амеба' није пронађена у демолисти"
демолиста.sort()
print "Сортирана демолиста је", демолиста
Izlaz je:
демолиста = ['живот', 42, 'универзум' , 6, 'и', 9] после 'све' приказано у демолисти је сада: ['живот', 42, 'универзум', 6, 'и', 9, 'све'] len(демолиста) = 7 демолиста.индекс(42) = 1 демолиста[1] = 42 демолиста[ 0 ] = живот демолиста[ 1 ] = 42 демолиста[ 2 ] = универзум демолиста[ 3 ] = 6 демолиста[ 4 ] = и демолиста[ 5 ] = 9 демолиста[ 6 ] = све После брисања 'универзум' демолиста је сада: ['живот', 42, 6, 'и', 9, 'све'] 'живот' је пронађен у демолисти 'амеба' није пронађена у демолисти Сортирана демолиста је [6, 9, 42, 'и', 'све', 'живот']
Ovaj primer koristi gomilu novih funkcija. Primetite da možete
samo print
, štampati čitavu listu. Sledeće je append
funkcija koja se koristi
za dodavanje nove stavke na kraj liste. len
vraća koliko
stavki je u listi. Važeći indeksi (kao u brojevima koji se mogu
koristiti unutar []
) liste su u rangu od 0 do len - 1
.
index
funkcija kaže gde se nalazi prva lokacija stavke
u listi. Primetite kako демолиста.index(42)
vraća 1, i
kada se pokrene демолиста[1]
vraća 42. Linija # Даље ћемо направити петљу кроз листу
je samo podsetnik programeru (takođe nazvan komentar). Pajton će ignorisati sve linije koje počinju sa #
. Sledeće linije:
c = 0
while c < len(демолиста):
print 'демолиста[', c, '] =', демолиста[c]
c = c + 1
stvaraju promenljivu c
, koja počinje na 0 i povećava se dok ne dođe do zadnjeg indeksa liste. U međuvremenu print
komanda štampa svaki element liste. del
komanda se može koristiti za brisanje datog elementa u listi. Narednih nekoliko redova koriste in
operater za testiranje da li je element u listi ili nije. sort
funkcija sortira listu. Ovo je korisno ako Vam treba
lista po redu od najmanjeg broja do najvećeg ili po abecednom redu. Zapamtite
da to uređuje listu. Ukratko, za listu, javljaju se sledeće operacije:
primer | objašnjenje |
---|---|
демолиста[2]
|
pristupa elementu sa indekom 2 |
демолиста[2] = 3
|
postavlja element sa indeksom 2 da bude 3 |
del демолиста[2]
|
briše element sa indeksom 2 |
len(демолиста)
|
vraća dužinu liste демолиста
|
"вредност" in демолиста
|
je Tačno ako je "vrednost" element u демолиста
|
"вредност" not in демолиста
|
je Tačno ako "вредност" nije element u демолиста
|
демолиста.sort()
|
sortira listu демолиста
|
демолиста.index("вредност")
|
vraća indeks prvog mesta u kome se "вредност" javlja
|
демолиста.append("вредност")
|
dodaje element "вредност" na kraju liste
|
демолиста.remove("вредност")
|
otklanja prvo pojavljivanje vrednosti iz демолиста (isto kao del демолиста[демолиста.index("вредност")] )
|
Ovaj sledeći primer koristi ove funkcije na korisniji način:
мени_члан = 0
имелисте = []
while мени_члан != 9:
print "--------------------"
print "1. Штампај листу"
print "2. Додај име листи"
print "3. Обриши име из листе"
print "4. Промени члан листе"
print "9. Заврши"
мени_члан = input("Изабери члан из менија: ")
if мени_члан == 1:
садашњи = 0
if len(имелисте) > 0:
while садашњи < len(имелисте):
print садашњи, ".", имелисте[садашњи]
садашњи = садашњи + 1
else:
print "Листа је празна"
elif мени_члан == 2:
име = raw_input("Унесите име за додавање: ")
имелисте.append(име)
elif мени_члан == 3:
обр_име = raw_input("Које бисте име желели да обришете: ")
if обр_име in имелисте:
# имелисте.remove(обр_име) ће такође добро радити
члан_број = имелисте.index(обр_име)
del имелисте[члан_број]
# Код изнад само уклања прву појаву
# имена. Код испод из Гералд уклања све.
# while обр_име in имелисте:
# члан_број = имелисте.index(обр_име)
# del имелисте[члан_број]
else:
print обр_име, "није пронађено"
elif мени_члан == 4:
старо_име = raw_input("Које име бисте желели да промените: ")
if члан_број in имелисте:
члан_број = имелисте.index(старо_име)
ново_име = raw_input("Које је ново име: ")
имелисте[члан_број] = ново_име
else:
print старо_име, "није пронађено"
print "Довиђења"
I ovde je deo izlaza:
-------------------- 1. Штампај листу 2. Додај име листи 3. Обриши име из листе 4. Промени члан листе 9. Заврши Изабери члан из менија: 2 Унесите име за додавање: Џек Изабери члан из менија: 2 Унесите име за додавање: Џил Изабери члан из менија: 1 0 . Џек 1 . Џил Изабери члан из менија: 3 Које бисте име желели да обришете: Jack Изабери члан из менија: 4 Које име бисте желели да промените: Jill Које је ново име: Jill Peters Изабери члан из менија: 1 0 . Џил Питерс Изабери члан из менија: 9 Довиђења
To je bio dugačak program. Hajde da pogledamo izvorni kod. Linija имелисте = []
stvara promenljivu имелисте
listu bez članova (ili elemenata). Sledeća važna linija je while мени_члан != 9:
. Ova linija počinje petlju koja omogućava meni sistem za ovaj program. Narednih nekoliko redova prikazuju meni i odlučuju koji deo programa je za pokretanje.
Sekcija
садашњи = 0
if len(имелисте) > 0:
while садашњи < len(имелисте):
print садашњи, ".", имелисте[садашњи]
садашњи = садашњи + 1
else:
print "Листа је празна"
prolazi kroz listu i štampa svako ime. len(имелисте)
kazuje koliko je stavki na listi. Ako len
vreti 0
, onda je lista prazna.
Zatim, nekoliko linija kasnije, naredba имелисте.append(име)
ase pojavljuje. Koristi append
funkciju da doda član na kraj liste. Skočite dve linije dole, i primetite ovaj deo koda:
члан_број = имелисте.index(обр_име)
del члан_број[имелисте]
Ovde index
funkcija je korišćena za pronalaženje vrednosti indeksa koji će biti korišćen kasnije za brisanje člana. del имелисте[члан_број]
se koristi za brisanje elemenata iz liste.
Sledeća sekcija
старо_име = raw_input("Које име бисте желели да промените: ")
if старо_име in имелисте:
старо_име = имелисте.index(старо_име)
ново_име = raw_input("Које је ново име : ")
имелисте[члан_број] = ново_име
else:
print старо_име, "није пронађено"
koristi index
za pronalaženje члан_број
i onda stavlja ново_име
gde je старо_име
bilo.
Čestitam, sa listama ispod pojasa, sada znate dovoljno o jeziku da biste uradili izračunavanja koja računar može da uradi (ovo je tehnički poznato kao Turingova-potpunost). Naravno, postoje još mnoge karakteristike koje se koriste da bi vaš život napravile lakšim.
Primeri
[uredi]test.py
## Овај програм покреће тест знања
# Прво се узима тест питања
# Касније ће бити модификован за коришћење датотеке УИ.
def узми_питање():
# приметити како се подаци чувају као листе листи
return [["Које боје је дневно небо по ведром дану? ", "плаве"],
["Шта је одговор на живот, универзум и све? ", "42"],
["Шта има пет слова за замку миша? ", "мачка"]]
# Ово ће тестирати једно питање
# потребно једно питање
# враћа True уколико је корисник откуцао тачан одговор, у супротном False
def провери_питање(питање_и_одговор):
# вади питање и одговор из листе
# Ово ће проћи кроз сва питања
def покрени_тест(питање):
if len(питање) == 0:
print "Није дато ниједно питање."
# return(враћање) постоји у функцији
return
индекс = 0
добар = 0
while индекс < len(питање):
# Провери питање
if провери_питање(питање[индекс]):
добар = добар + 1
индекс = индекс + 1
# идите на следеће питање
else:
индекс = индекс + 1
# приметити редослед израчунавања, прво вишеструко, затим подељено
print "Имате", добар * 100 / len(питање),\
"% добрих од", len(питање)
# сада да покренемо питања
покрени_тест(узми_питање())
Vrednosti True
i False
pokazuju na 1 i 0. Oni se često koriste u proveravanju razuma, uslovi petlje itd. Saznaćete više o tome malo kasnije (poglavlje Bulovi izrazi).
Izlaz niza:
Које боје је дневно небо по ведром дану?зелено Нетачно, одговор је: blue Шта је одговор на живот, универзум и све?42 Тачно Шта има пет слова за замку миша?мачка Тачнопитање = питање_и_одговор[0] одговор = питање_и_одговор[1] # поставља питање кориснику дат_одговор = raw_input(питање) # упоређује одговор корисника са одговором тестера if одговор == дат_одговор: print "Тачно" return True else: print "Нетачно, одговор је:", одговор return False
Имате 66 % добрих од 3
Vežbe
[uredi]Povećajte test.py program tako da meni daje mogućnost uzimanja testa, pregled liste pitanja i odgovora, i mogućnost da izađete. Takođe, dodajte novo pitanje za postavljanje, "Koju buku pravi zaista napredna mašina?" sa odgovorom "ping".
Povećajte test.py program tako da meni daje mogućnost uzimanja testa, pregled liste pitanja i odgovora, i mogućnost da izađete. Takođe, dodajte novo pitanje za postavljanje, "Koju buku pravi zaista napredna mašina?" sa odgovorom "ping".
## Овај програм покреће тест знања
питања = [["Које боје је дневно небо по ведром дану? ", "плаве"],
["Шта је одговор на живот, универзум и све? ", "42"],
["Шта има пет слова за замку миша? ", "мачка"],
["Коју буку прави заиста напредна машина?", "пинг"]]
# Ово ће тестирати једно питање
# потребно једно питање
# враћа True уколико је корисник откуцао тачан одговор, у супротном False
def провери_питање(питање_и_одговор):
# извући питање и одговор из листе
питање = питање_и_одговор[0]
одговор = питање_и_одговор[1]
# поставља питање кориснику
дат_одговор = raw_input(питање)
# упоређује одговор корисника са одговором тестера
if одговор == дат_одговор:
print "Тачно"
return True
else:
print "Нетачно, одговор је:", одговор
return False
# Ово ће проћи кроз сва питања
def покрени_тест(питање):
if len(питање) == 0:
print "Није дато ниједно питање."
# return(враћање) постоји у функцији
return
индекс = 0
добар = 0
while индекс < len(питање):
# Провери питање
if провери_питање(питање[индекс]):
добар = добар + 1
индекс = индекс + 1
# идите на следеће питање
else:
индекс = индекс + 1
# приметити редослед израчунавања, прво вишеструко, затим подељено
print "Имате", добар * 100 / len(питање),\
"% добрих од", len(питање)
#показује списак питања и одговора
def прикажипитања(питање):
q = 0
while q < len(питање):
a = 0
print "Q:" , питање[q][a]
a = 1
print "A:" , питање[q][a]
q = q + 1
# хајде да дефинишемо функцију менија
def menu():
print "-----------------"
print "Мени:"
print "1 - Узми тест"
print "2 - Погледајте листу питања и одговора"
print "3 - Погледај мени"
print "5 - Заврши"
print "-----------------"
избор = "3"
while избор != "5":
if избор == "1":
покрени_тест(питање)
elif избор == "2":
прикажипитања(питање)
elif избор == "3":
menu()
print
избор = raw_input("Изаберите опцију из менија изнад: ")