Vodič za Pajton 2.6/Rečnici

Izvor: Викикњиге

Ovo poglavlje je o rečnicima. Ako otvorite rečnik, treba da primetite da se svaki ulaz sastoji iz sva dela, od reči i njene definicije. Reč je ključ za pronalaženje značenja reči, šta ta reč znači smatra se vrednošču tog ključa. U Pajtonu, rečnici imaju ključ i vrednost. Ključevi se koriste za pronalaženje vrednosti. Ovde je primer rečnika u korišćenju:

def штампај_мени():
    print '1. Штампај речник'
    print '2. Додај дефиницију'
    print '3. Обриши реч'
    print '4. Потражи реч'
    print '5. Изађи'
    print

речи = {}
мени_избор = 0
штампај_мени()

while мени_избор != 5:
    menu_choice = input("Укуцајте број (1-5): ")
    if мени_избор == 1:
        print "Дефиниција:"
        for x in речи.keys():
            print x, ": ", речи[x]
        print
    elif мени_избор == 2:
        print "Додај дефиницију"
        име = raw_input("Реч: ")
        значење = raw_input("Дефиниција: ")
        речи[име] = значење
    elif мени_избор == 3:
        print "Обриши реч"
        име = raw_input("Реч: ")
        if име in речи:
            del речи[име]
            print име, " је обрисано."
        else:
            print име, " није пронађено."
    elif мени_избор == 4:
        print "Потражи реч"
        име = raw_input("Реч: ")
        if име in речи:
            print "Дефинифија ", име, " је: ", речи[име]
        else:
            print "Нема дефиниције за ", име, " није пронађена."
    elif мени_избор != 5:
        штампај_мени()

I ovde je izlaz:

1. Штампај речник
2. Додај дефиницију
3. Обриши реч
4. Потражи реч
5. Изађи

Укуцајте број (1-5): 2
Додај дефиницију
Реч: Пајтон
Дефиниција: Змија, програмски језик, Британска комедија.
Укуцајте број (1-5): 2
Додај дефиницију
Реч: Речник
Дефиниција: Књига у којој су речи дефинисане.
Укуцајте број (1-5): 1
Дефиниција:
Пајтон: Змија, програмски језик, Британска комедија.
Речник: Књига у којој су речи дефинисане.

Укуцајте број (1-5): 4
Потражи реч
Реч: Пајтон
дефиниција Пајтон је: Змија, програмски језик, Британска комедија.
Укуцајте број (1-5): 3
Обриши реч
Реч: Речник
Речник је обрисано.
Укуцајте број (1-5): 1
Дефиниција:
Пајтон: Змија, програмски језик, Британска комедија.
Укуцајте број (1-5): 5

Ovaj program je sličan listi imena iz prethodnog poglavlja o listama (napomenuti da liste koriste indekse a rečnici ne). Evo kako program radi:

  • Prvo je funkcija штампај_мени definisana. штампај_мени samo štampa meni koji je kasnije korišćen dva puta u programu.
  • Sledeća je linija koja smešno izgleda речи = {}. Cela ova linija govori Pajtonu da je речи rečnik.
  • Narednih nekoliko redova samo prave da meni radi.
for x in речи.keys():
    print x, ": ", речи[x]
  • Ovo ide kroz rečnik i štampa sve informacije. Funkcija речи.keys() vraća listu koja je onda korišćena od strane for petlje. Lista vraćena od strane keys() nije u svakom konkretnom redu pa ako to želite po abecednom redu morate sortirati. Slično listama, naredba речи[x] se koristi za pristup određenom članu rečnika. Naravno u ovom slučaju x je niz.
  • Sledeće linija речи[име] = значење dodaje reč i definiciju u rečnik. Ako име već postoji u rečniku зналење zamenjuje ono što je bilo pre.
if име in речи:
    del речи[име]
  • Vidi da li je ime u rečima i uklonite ga ako jeste. Izraz име in речи vraća tačno ako je име ključ u речи u suprotnom vraća netačno. Linija del речи[име] briše ključ име i vrednost u vezi sa tim ključem.
if име in речи:
    print "Дефиниција ", име, " је: ", речи[име]
  • Check to see if words has a certain key and if it does prints out the definition associated with it.
  • Lastly if the menu choice is invalid it reprints the menu for your viewing pleasure.

Rekapitulacija: Rečnici imaju ključeve i vrednosti. Ključevi mogu biti nizovi ili brojevi. Ključevi ukazuju na vrednosti. Vrednosti mogu biti bilo koji tip promenljive (uključujući liste ili čak rečnike (ovi rečnici ili liste naravno mogu da sadrže rečnike ili same liste (strašno? :-) )). Evo primera upotrebe liste u rečniku:

макс_тачка = [25, 25, 50, 25, 100]
задаци = ['hw ch 1', 'hw ch 2', 'квиз   ', 'hw ch 3', 'тест']
студенти = {'#Макс': макс_тачка}

def штампај_мени():
    print "1. Додај студента"
    print "2. Обриши студента"
    print "3. Штампај оцене"
    print "4. Сними оцене"
    print "5. Штампај Мени"
    print "6. Излаз"

def штампај_све_оцене():
    print '\t',
    for i in range(len(задаци)):
        print задаци[i], '\t',
    print
    кључеви = студенти.кључеви()
    кључеви.sort()
    for x in кључеви:
        print x, '\t',
        оцене = студенти[x]
        штампај_оцене(оцене)

def штампај_оцене(оцене):
    for i in range(len(оцене)):
        print оцене[i], '\t', '\t',
    print

штампај_мени()
мени_избор= 0
while мени_избор != 6:
    print
    мени_избор = input("Избор Менија (1-6): ")
    if мени_избор == 1:
        име= raw_input("Студент за додавање: ")
        студент[име] = [0] * len(макс_тачка)
    elif мени_избор == 2:
        име= raw_input("Студент за брисање: ")
        if име in студент:
            del студент[име]
        else:
            print "Студент:", име, "није пронађен"
    elif мени_избор == 3:
        штампај_све_оцене()
    elif мени_избор == 4:
        print "Сачувај оцену"
        име = raw_input("Студент: ")
        if име in студент:
            оцене = студент[име]
            print "Укуцајте број оцене за снимање"
            print "Укуцајте 0 (нула) за излаз"
            for i in range(len(задаци)):
                print i + 1, задаци[i], '\t',
            print
            штампај_оцене(оцене)
            која = 1234
            while која!= -1:
                која = input("Промени коју оцену: ")
                која = која - 1
                if 0 <= која < len(оцене):
                    оцена = input("Оцена: ")
                    оцене[која] = оцена
                elif која != -1:
                    print "Лош број оцене"
        else:
            print "Студент није пронађен"
    elif мени_избор != 6:
        штампај_мени()

i ovde je jednostavan izlaz:

1. Додај студента
2. Обриши студента
3. Штампај оцене
4. Сачувај оцену
5. Штампај Мени
6. Излаз

Мени избро (1-6): 3
       hw ch 1         hw ch 2         квиз            hw ch 3         тест 
#Макс   25              25              50              25              100 

Мени избор (1-6): 5
1. Додај студента
2. Обриши студента
3. Штампај оцене
4. Сачувај оцену
5. Штампај Мени
6. Излаз

Мени избор (1-6): 1
Додај студента: Бил

Мени избор (1-6): 4
Сачувај оцену
Студент: Бил
Укуцајте број оцене за снимање
Укуцајте 0 (нула) за излаз
1   hw ch 1     2   hw ch 2     3   квиз        4   hw ch 3     5   тест 
0               0               0               0               0 
Промени коју оцену: 1
Оцена: 25
Промени коју оцену: 2
Оцена: 24
Промени коју оцену: 3
Оцена: 45
Промени коју оцену: 4
Оцена: 23
Промени коју оцену: 5
Оцена: 95
Промени коју оцену: 0

Мени избор (1-6): 3
       hw ch 1         hw ch 2         квиз            hw ch 3         тест 
#Макс    25              25              50              25              100
Бил    25              24              45              23              95 

Мени избор (1-6): 6

Evo kako program radi. U osnovi, promenljiva студент je rečnik sa ključevima kao naziv studenata i vrednosti ljihovih ocena. Prve dve linije stvaraju dve liste. Sledeća linija студент = {'#Макс': макс_тачка} stvara novi rečnik sa ključem {#Макс} i vrednost je postavljena na [25, 25, 50, 25, 100], jer to je ono što je макс_тачка bila kada je zadatak napravljen (ja koristim ključ #Макс otkad je # sortirano ispred bilo kojih slovnih znakova). Sledeće je штампај_мени definisano. Sledeća funkcija штампај_све_оцене je definisana u linijama:

def штампај_све_оцене():
    print '\t',
    for i in range(len(задаци)):
        print задаци[i], '\t',
    print
    кључеви = студенти.keys()
    кључеви.sort()
    for x in кључеви:
        print x, '\t',
        оцене = студенти[x]
        штампај_оцене(оцене)

Obratite pažnju kako su se prvo ključevi izmakli od студенти rečnika sa кључеви funkcijom u liniji књучеви = студенти.keys(). кључеви je lista tako sve funkcije za liste mogu da se koristi na njoj. Sledeće, ključevi su sortirani кључеви.sort() pošto je to lista. for se koristi da ide kroz sve ključeve. Ocene se čuvaju kao liste unutar rečnika, tako da je dodeljivanje оцене = студенти[x] daje listu оцене koja je sortirana pod ključem x. Funkcija штампај_оцене štampa listu i definiše je nekoliko linija kasnije.

Kasnije linije programa sprovode različite opcije menija. Linija студенти[име] = [0] * len(макс_тачка) dodaje studenta na ključ njegovog imena. Oznaka [0] * len(макс_тачка) stvara listu nula koja je iste dužine kao lista макс_тачка.

Unos obriši studenta samo briše studenta na sličan način telefonskom imeniku. Izbor čuvanje ocena je malo složeniji. Ocene su preuzete u redu оцене = студенти[име] i dobijaju referencu ocene učenika име. Ocena je onda sačuvana u liniji оцене[која] = оцена. Možda ste primetili da оцене nikad nije stavljeno unutar rečnika studenti (kao ni студенти[име] = оцене). Razlog za izjave koja nedostaje je da je оцене drugi naziv za студенти[име] pa je menjanje оцене menja студенти[оцене].

Rečnici obezbeđuju jednostavan način da se povežu ključevi i vrednosti. Ovo se može koristiti za lako praćenje podataka koji cu vezani za različite ključeve.

Šablon:Vodič za Pajton 2.6/Navigation