Zanka for - primeri uporabe

Zanka for - primeri uporabe

Avtor: Gorazd Novak

Zanka while in for

Zanki for kot tudi while je skupna ena značilnost:

Obe zanki uporabimo, kadar želimo, da se odsek kode izvede večkrat zaporedoma. Tako za eno kot drugo velja tipična sestava in sicer: - odsek kode, ki se ponavlja - pogoj za vstop in ponavljanje zanke.

Tipična struktura while zanke:

while (pogoj) # dokler velja nek pogoj
...
    nek programski stavek  # naj se izvajajo programski stavki
...

Lastnosti zanke while:

  • Zanka se izvaja tako dolgo, dokler je pogoj izpolnjen
  • pogoj se preverja na začetku zanke
  • Če želimo, da se bo zanka while iztekla (da se ne bo izvajala v nedogled), mora biti v pogoju ena ali več spremenjlivk, ki jo (ali več njih) v telesu zanke spreminjamo.

Tipična struktura zanke for:

for (neka spremenljivka zaporedoma zavzame vse vrednosti v neki strukturi, ki deluje kot ponovnik)
...
    programski stavki
...

Lastnosti (prednosti) zanke for:

  • imamo neko spremenljivko, ki zavzame vse vrednosti nekega seznama
  • bolj razumljiv in 'naravno' zapisan program, zato je manj napak pri pisanju

Primerjava s predstavljenimi primeri

Poglejmo primer:

Denimo, da bi radi izpisali števila od 1 do 10. Zanko while že znamo uporabiti.

stevec = 1
while stevec <= 10:
    print (stevec)
    stevec = stevec + 1

Izpis:
1
2
3
4
...
10 

Zanka for

for stevec in range(1, 11): # števec zavzame vsako vrednost med 1 in 10
    print (stevec) # za vsako vrednost se izvede izpis znotraj for zanke

...in razlaga:

  • spremenljivka stevec hrani trenutno vrednost v pretekanju zanke
  • argumenta funkcije range sta 1 in 11, kar pomeni, da smo naredili ponovnik, ki vsebuje vsa števila od 1 do 10.
  • S funkcijo range, kateri podamo začetno in končno vrednost, naredimo spremenljivko, ki zaporedoma vrača števila od 1 do 10 (do n -1), torej zadnje vrednosti (končna vrednost v funkcij range) ne zavzame.

še o funkciji range:

range 'zna' ustvariti ponovnik, torej nekaj, iz česar zaporedoma dobivamo neke vrednosti.

V prejšnjem primeru ustvari seznam števil v določenem intervalu. Zato potrebuje funkcija range najmanj 2 argumenta: začetek in konec. Če je kot argument podana samo ena vrednost, ki ne sme biti 0, razume funkcija to kot končni argument in je vrednost 0 privzeta kot začetni argument.

Uporabimo lahko tudi argument korak, ki je opcijski. Vrednost tega pomeni, kako naj se preteka indeks v seznamu; če je ta 1, preteče vsak indeks, če je 2, vsak drugi itd. Lahko je tudi negativen, pri tem moramo paziti le, da sta argumenta začetek in konec ustrezno postavljena, torej obrnjena. Če korak ni podan, ima privzeto vrednost 1.

Naloga 1

Zdaj pa s pomočjo zanke for napišimo funkcijo, ki bo izpisala vsote vseh zaporednih števil v intervalu, ki ga določi uporabnik. Torej, ne le končne vsote, temveč vsote vseh zaporednih števil, ki se nahajajo znotraj intervala. Na primer za števila od 0 do 5 bo program izpisal

0
1
3
6
10

Pri tem nam dobro služi že omenjena in pri zanki for pogosto uporabljena funkcija range.

Funkcija:

vsota = 0
for i in range (5):
    vsota = vsota + i
    print (vsota)

Kako funkcija pripelje do rešitve, bo predstavljeno v animaciji

Naprej

Naloga 1 - animacija

Naloga 2

Imamo seznam, v katerem so znamke avtomobilov. Z zanko for se bomo sprehodili po vseh elementih seznama, torej lahko dostopamo do vsakega niza, ki predstavlja znamko avtomobila. Z nekaj primeri bom pokazal, kaj lahko s temi nizi naredimo.

avti = ['Alfa Romeo', 'Audi', 'Aston Martin', 'BMW', 'Bugatti',
        'Cadillac', 'Chevrolet', 'Chrysler', 'Citroen', 'Dacia',
        'Daewoo', 'Daihatsu','Ferrari', 'Fiat', 'Ford', 'Honda',
        'Hyundai', 'Jaguar', 'Kia', 'Leksus', 'Mercedes', 'Mini',
        'Mitshubishi', 'Nissan', 'Opel','Peugeot', 'Porsche', 'Renault',
        'Saab', 'Seat', 'Škoda', 'Suzuki','Toyota', 'Volvo', 'VW'])

Vemo že, da je seznam sestavljen iz elementov, ki so lahko posamezni znaki, bodisi števila, bodisi nizi. V našem primeru predstavlja niz ime znamke avtomobila. Torej se lahko z zanko for enostavno sprehodimo po elementih seznama.

Seznam je kar dolg, me prav zanima koliko je avtomobilov, pa poglejmo:

 >>> len (avti)
35
>>> 

Preprosta funkcija len je torej 'preštela' elemente seznama.

Poleg tega, da lahko z zanko for v našem primeru preletimo vse znamke avtomobilov, lahko tudi z indeksiranjem dostopamo do posameznih elementov znotraj niza, torej do posameznih črk v imenu znamke.

Primer

Kako dostopati do 3. črke 5. avtomobila? Ker se indeksi začnejo z 0, to pomeni, da za peti avtomobil nahaja na četrtem indeksu, znotraj niza ima tretja črka indeks 2.

 >>> len (avti)
35
>>> avti [4][2]
'g'
>>>  

Torej tretja črka petega avtomobila je g.

Naloga 2 - nadaljevanje

Zanima nas na primer, koliko avtomobilov je v seznamu, ki se začnejo z določeno črko. Za ta primer uporabimo spet zanko for.

# Najprej bomo uporabnika pozvali, da izbere začetno črko
crka = input("Vpiši inicialko željenega avta z veliko črko: ")

# pred zanko dodamo del stavka
print ("\nAvtomobili s to začetnico so: ")

# for zanka
for ime in range (len(avti)): # sprehodimo se po dolžini celotnega seznama
    if avti [ime][0] == crka: # če je znotraj imena znamke avtomobila
                              # na prvem mestu (indeks 0) izbrana črka
        izbrani = avti[ime]   # bomo ta niz (znamko) izbrali
        print (izbrani)       # in izpisali
        # znotraj zanke se bodo izpisali vsi avtomobili, ki ustrezajo pogoju

Še izvedba programa:
>>>
Vpiši inicialko željenega avta z veliko črko: C

Avtomobili s to začetnico so:
Cadillac
Chevrolet
Chrysler
Citroen
>>> 

Naloga 3

Še malo se poigrajmo z obstoječim seznamom avtomobilov.

Testnim voznikom vsak teden naključno določajo avtomobile, ki jih bodo tisti teden veselo preiskušali.

Pomagajmo jim in jim napišemo program, ki bo voznikom naključno izbral 3 avtomobile.

V ta namen lahko uporabimo metodo za premešanje elementov seznama.

Na naslednji strani si poglejmo postopek.

Naloga 3 - nadaljevanje

Primer kode za naključen izbor avtomobilov

import random # Uvozimo random
random.shuffle(avti) # in še modul za premešanje elementov seznama

# za preglednejši potek programa poglejmo še premešan seznam
print ("Premešan seznam avtomobilov je : \n")
print (avti)

print ("\nZa testiranje ti je program izbral naslednje 3 avtomobile: ")
# Ena od možnosti za naključen izbor treh znamk avtomobilov je da
# izberemo prve tri v premešanem seznamu.

for i in range (0,3): # v zanki se sprehodimo le po prvih treh elementih
    print ('- ', avti[i]) # in te avte izpišemo
print ("Pa srečno vožnjo!")

Še izvedba programa:

Premešan seznam avtomobilov je :

['Ford', 'Renault', 'BMW', 'Audi', 'Citroen', 'Daewoo', 'Kia', 'Opel', 'Saab', 'Suzuki', 'Mitshubishi', 'Jaguar', .....]

Za testiranje ti je program izbral naslednje 3 avtomobile:
-  Ford
-  Renault
-  BMW
Pa srečno vožnjo!
>>> 

Vprašanje 1

Kakšen je rezultat po izvedbi spodnje kode?

x = sum(range(5))
print (x)

4
5
15
Program javi napako!
10

Pravilno

Res je. Funkcija računa vsoto od prvega elementa dalje, torej sešteje števila 0, 1, 2, 3 in 4. Naprej

Napačno

Ne bo držalo, poskusi znova.

Nazaj

Vprašanje 2

Katere vrednosti so izpisane po spodnjih dveh zankah?

 for i in range(2):
    print (i)

for i in range(4,6):
    print (i)

Preveri

Pravilno

Res je. V prvem primeru je podan le končni argument, torej začnemo z 0 in končamo z 1 (končni - 1), v drugem pa sta začetni argument (4) ter končni - 1 (5). Naprej

Napačno

Napačno. Poglejte si, kakšni so argumenti pri funkciji range.

Nazaj

Vprašanje 3

Kakšen je izpis po izvedbi naslednjih ukazov na danem seznamu?

avomobili = ['Mitshubishi', 'Nissan', 'Opel','Peugeot', 'Porsche', 'Renault']
izpis = avtomobili [0][:2] + avtomobili [1][2:4] + ' ' + avtomobili [4][:]
izpis

izpis 

Preveri

Res je!

Konec!

Odgovor ni pravilen.

Nazaj

0%
0%