Водич за Пајтон 2.6/Листе

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

Променљиве са више од једне вредности[уреди]

Већ сте видели редне променљиве које имају једну вредност. Међутим, друге променљиве врсте могу да приме више од једне вредности. Најједноставнији тип је такозвана листа. Овде је пример где се листе користе:

који = input("Који месец (1-12)? ")
месеци = ['Јануар', 'Фебруар', 'Март', 'Април', 'Мај', 'Јун', 'Јул',
          'Август', 'Септембар', 'Октобар', 'Новембар', 'Децембар']

if 1 <= који <= 12:
    print "Месец је", месеци[који - 1]

а пример излаза:

Који месец (1-12)? 3
Месец је Март

Ово је пример да су месеци листа. месеци су дефинисани линијама месеци = ['Јануар', 'Фебруар', 'Март', 'Април', 'Мај', 'Јун', 'Јул', и 'Август', 'Септембар', 'Октобар', 'Новембар', 'Децембар'] (имајте на уму да се \ такође може користи да подели дугу колону, али то није неопходно у овом случају, јер је Пајтон довољно интелигентан да схвати да све у загради иде заједно). [ и ] почињу и завршавају листу са зарезима(,) који раздвајају предмете у листи. Листа се користи у месеци[који - 1]. Списак се састоји од ставки које се одбројавају са почетком у 0. Другим речима, ако желите Јануар користићете месеци[0]. Дајте списак бројева и да се врати вредност која се складишти на тој локацији.

Изјава if 1 <= који <= 12: биће тачна ако је који између 1 и 12 (другим речима то је оно што бисте очекивали ако бисте га видели у алгебри).

Листе се може посматрати као низ кутија. Свака кутија има другачију вредност. На пример, кутије створене од стране демолиста = ['живот', 42, 'универзум', 6, 'и', 9] би изгледале овако:

број кутије 0 1 2 3 4 5
демолиста "живот" 42 "универзум" 6 "и" 9

Свака кутија је означена бројем тако да ће изјава демолиста[0] дати 'живот', демолиста[1] ће дати 42 и тако даље демолиста[5] даје 9.

Више карактеристика листи[уреди]

Следећи пример служи само да покаже много других ствари са листама које може да уради(не очекујем да га куцате, али би вероватно требало да се поиграте са листама док нисте задовољни њима.). Ево иде:

демолиста = ["живот", 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 "Сортирана демолиста је", демолиста

Излаз је:

демолиста =  ['живот', 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, 'и', 'све', 'живот']

Овај пример користи гомилу нових функција. Приметите да можете само print, штампати читаву листу. Следеће је append функција која се користи за додавање нове ставке на крај листе. len враћа колико ставки је у листи. Важећи индекси (као у бројевима који се могу користити унутар []) листе су у рангу од 0 до len - 1. index функција каже где се налази прва локација ставке у листи. Приметите како демолиста.index(42) враћа 1, и када се покрене демолиста[1] враћа 42. Линија # Даље ћемо направити петљу кроз листу је само подсетник програмеру (такође назван коментар). Пајтон ће игнорисати све линије које почињу са #. Следеће линије:

c = 0
while c < len(демолиста):
    print 'демолиста[', c, '] =', демолиста[c]
    c = c + 1

стварају променљиву c, која почиње на 0 и повећава се док не дође до задњег индекса листе. У међувремену print команда штампа сваки елемент листе. del команда се може користити за брисање датог елемента у листи. Наредних неколико редова користе in оператер за тестирање да ли је елемент у листи или није. sort функција сортира листу. Ово је корисно ако Вам треба листа по реду од најмањег броја до највећег или по абецедном реду. Запамтите да то уређује листу. Укратко, за листу, јављају се следеће операције:

пример објашњење
демолиста[2] приступа елементу са индеком 2
демолиста[2] = 3 поставља елемент са индексом 2 да буде 3
del демолиста[2] брише елемент са индексом 2
len(демолиста) враћа дужину листе демолиста
"вредност" in демолиста је Тачно ако је "вредност" елемент у демолиста
"вредност" not in демолиста је Тачно ако "вредност" није елемент у демолиста
демолиста.sort() сортира листу демолиста
демолиста.index("вредност") враћа индекс првог места у коме се "вредност" јавља
демолиста.append("вредност") додаје елемент "вредност" на крају листе
демолиста.remove("вредност") отклања прво појављивање вредности из демолиста (исто као del демолиста[демолиста.index("вредност")])

Овај следећи пример користи ове функције на кориснији начин:

мени_члан = 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 "Довиђења"

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

--------------------
1. Штампај листу
2. Додај име листи
3. Обриши име из листе
4. Промени члан листе
9. Заврши

Изабери члан из менија: 2
Унесите име за додавање: Џек

Изабери члан из менија: 2
Унесите име за додавање: Џил

Изабери члан из менија: 1
0 . Џек
1 . Џил

Изабери члан из менија: 3
Које бисте име желели да обришете: Jack

Изабери члан из менија: 4
Које име бисте желели да промените: Jill
Које је ново име: Jill Peters

Изабери члан из менија: 1
0 . Џил Питерс

Изабери члан из менија: 9
Довиђења

То је био дугачак програм. Хајде да погледамо изворни код. Линија имелисте = [] ствара променљиву имелисте листу без чланова (или елемената). Следећа важна линија је while мени_члан != 9:. Ова линија почиње петљу која омогућава мени систем за овај програм. Наредних неколико редова приказују мени и одлучују који део програма је за покретање.

Секција

садашњи = 0
if len(имелисте) > 0:
    while садашњи < len(имелисте):
        print садашњи, ".", имелисте[садашњи]
        садашњи = садашњи + 1
else:
    print "Листа је празна"

пролази кроз листу и штампа свако име. len(имелисте) казује колико је ставки на листи. Ако len врети 0, онда је листа празна.

Затим, неколико линија касније, наредба имелисте.append(име) aсе појављује. Користи append функцију да дода члан на крај листе. Скочите две линије доле, и приметите овај део кода:

члан_број = имелисте.index(обр_име)
del члан_број[имелисте]

Овде index функција је коришћена за проналажење вредности индекса који ће бити коришћен касније за брисање члана. del имелисте[члан_број] се користи за брисање елемената из листе.

Следећа секција

старо_име = raw_input("Које име бисте желели да промените: ")
if старо_име in имелисте:
    старо_име = имелисте.index(старо_име)
    ново_име = raw_input("Које је ново име : ")
    имелисте[члан_број] = ново_име
else:
   print старо_име, "није пронађено"

користи index за проналажење члан_број и онда ставља ново_име где је старо_име било.

Честитам, са листама испод појаса, сада знате довољно о језику да бисте урадили израчунавања која рачунар може да уради (ово је технички познато као Турингова-потпуност). Наравно, постоје још многе карактеристике које се користе да би ваш живот направиле лакшим.

Примери[уреди]

тест.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(питање)

# сада да покренемо питања

покрени_тест(узми_питање())

Вредности True и False показују на 1 и 0. Они се често користе у проверавању разума, услови петље итд. Сазнаћете више о томе мало касније (поглавље Булови изрази).

Излаз низа:

Које боје је дневно небо по ведром дану?зелено
Нетачно, одговор је: blue
Шта је одговор на живот, универзум и све?42
Тачно
Шта има пет слова за замку миша?мачка
Тачнопитање = питање_и_одговор[0]
   одговор = питање_и_одговор[1]
   # поставља питање кориснику
   дат_одговор = raw_input(питање)
   # упоређује одговор корисника са одговором тестера
   if одговор == дат_одговор:
       print "Тачно"
       return True
   else:
       print "Нетачно, одговор је:", одговор
       return False
Имате 66 % добрих од 3

Вежбе[уреди]

Повећајте тест.py програм тако да мени даје могућност узимања теста, преглед листе питања и одговора, и могућност да изађете. Такође, додајте ново питање за постављање, "Коју буку прави заиста напредна машина?" са одговором "пинг".

Решења

Повећајте тест.py програм тако да мени даје могућност узимања теста, преглед листе питања и одговора, и могућност да изађете. Такође, додајте ново питање за постављање, "Коју буку прави заиста напредна машина?" са одговором "пинг".

## Овај програм покреће тест знања

питања = [["Које боје је дневно небо по ведром дану? ", "плаве"],
             ["Шта је одговор на живот, универзум и све? ", "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("Изаберите опцију из менија изнад: ")

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