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".

Rešenja

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("Изаберите опцију из менија изнад: ")

Šablon:Vodič za Pajton 2.6/Navigation