Водич за Пајтон 2.6/Речници

Извор: Викикњиге
Пређи на навигацију Пређи на претрагу

Ово поглавље је о речницима. Ако отворите речник, треба да приметите да се сваки улаз састоји из сва дела, од речи и њене дефиниције. Реч је кључ за проналажење значења речи, шта та реч значи сматра се вредношчу тог кључа. У Пајтону, речници имају кључ и вредност. Кључеви се користе за проналажење вредности. Овде је пример речника у коришћењу:

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:
        штампај_мени()

И овде је излаз:

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

Овај програм је сличан листи имена из претходног поглавља о листама (напоменути да листе користе индексе а речници не). Ево како програм ради:

  • Прво је функција штампај_мени дефинисана. штампај_мени само штампа мени који је касније коришћен два пута у програму.
  • Следећа је линија која смешно изгледа речи = {}. Цела ова линија говори Пајтону да је речи речник.
  • Наредних неколико редова само праве да мени ради.
for x in речи.keys():
    print x, ": ", речи[x]
  • Ово иде кроз речник и штампа све информације. Функција речи.keys() враћа листу која је онда коришћена од стране for петље. Листа враћена од стране keys() није у сваком конкретном реду па ако то желите по абецедном реду морате сортирати. Слично листама, наредба речи[x] се користи за приступ одређеном члану речника. Наравно у овом случају x је низ.
  • Следеће линија речи[име] = значење додаје реч и дефиницију у речник. Ако име већ постоји у речнику зналење замењује оно што је било пре.
if име in речи:
    del речи[име]
  • Види да ли је име у речима и уклоните га ако јесте. Израз име in речи враћа тачно ако је име кључ у речи у супротном враћа нетачно. Линија del речи[име] брише кључ име и вредност у вези са тим кључем.
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.

Рекапитулација: Речници имају кључеве и вредности. Кључеви могу бити низови или бројеви. Кључеви указују на вредности. Вредности могу бити било који тип променљиве (укључујући листе или чак речнике (ови речници или листе наравно могу да садрже речнике или саме листе (страшно? :-) )). Ево примера употребе листе у речнику:

макс_тачка = [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:
        штампај_мени()

и овде је једноставан излаз:

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

Ево како програм ради. У основи, променљива студент је речник са кључевима као назив студената и вредности љихових оцена. Прве две линије стварају две листе. Следећа линија студент = {'#Макс': макс_тачка} ствара нови речник са кључем {#Макс} и вредност је постављена на [25, 25, 50, 25, 100], јер то је оно што је макс_тачка била када је задатак направљен (ја користим кључ #Макс откад је # сортирано испред било којих словних знакова). Следеће је штампај_мени дефинисано. Следећа функција штампај_све_оцене је дефинисана у линијама:

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

Обратите пажњу како су се прво кључеви измакли од студенти речника са кључеви функцијом у линији књучеви = студенти.keys(). кључеви је листа тако све функције за листе могу да се користи на њој. Следеће, кључеви су сортирани кључеви.sort() пошто је то листа. for се користи да иде кроз све кључеве. Оцене се чувају као листе унутар речника, тако да је додељивање оцене = студенти[x] даје листу оцене која је сортирана под кључем x. Функција штампај_оцене штампа листу и дефинише је неколико линија касније.

Касније линије програма спроводе различите опције менија. Линија студенти[име] = [0] * len(макс_тачка) додаје студента на кључ његовог имена. Ознака [0] * len(макс_тачка) ствара листу нула која је исте дужине као листа макс_тачка.

Унос обриши студента само брише студента на сличан начин телефонском именику. Избор чување оцена је мало сложенији. Оцене су преузете у реду оцене = студенти[име] и добијају референцу оцене ученика име. Оцена је онда сачувана у линији оцене[која] = оцена. Можда сте приметили да оцене никад није стављено унутар речника студенти (као ни студенти[име] = оцене). Разлог за изјаве која недостаје је да је оцене други назив за студенти[име] па је мењање оцене мења студенти[оцене].

Речници обезбеђују једноставан начин да се повежу кључеви и вредности. Ово се може користити за лако праћење података који цу везани за различите кључеве.

Шаблон:Водич за Пајтон 2.6/Navigation