Tartományok

A (szám)tartomány is iterálható:

>>> for i in range(3):
...     print(i)
... 
0
1
2

Ahogyan a fenti példa mutatja, a tartomány jobbról nyílt.

A tartomány alapértelmezett kezdőértéke 0:

>>> range(3)
range(0, 3)

A stringeknél, illetve listáknál látott módon most is megadhatunk lépésközt:

>>> for i in range(0, 12, 3):
...     print(i)
... 
0
3
6
9

Tartomány és lista közötti értékadás

A python nyelv egyik jellegzetes konstrukciója az egysoros ciklus. Az alábbi példa egy tartomány elemeiből épít listát:

>>> lst= [i for i in range(3)]
>>> lst
[0, 1, 2]

Index szerinti iteráció

A tartományokat stringek esetén, listák esetén is felhasználhatjuk index szerinti iterációhoz:

>>> str= 'Énókhé'
>>> for i in range(len(str)):
...     print(i, str[i])
... 
0 É
1 n
2 ó
3 k
4 h
5 é

>>> lst= ['Semé', 'Noéé', 'Lámekhé', 'Mathuséláé', 'Énókhé', 'Járedé', 'Mahalaléelé', 'Kajnáné', 'Énósé', 'Sethé', 'Ádámé', ]
>>> for i in range(0, len(lst), 2):
...     print(i, lst[i])
... 
0 Semé
2 Lámekhé
4 Énókhé
6 Mahalaléelé
8 Énósé
10 Ádámé

A len() függvény a szó hétköznapi jelentése szerint adja meg a hosszt (hatkarakteres stringnél hatot, 11-elemű listánál 11-et); ennek kapcsán érdemes megfigyelni, hogy a jobbról nyitottan értendő range szép összhangban van a string karaktereinek, illetve a lista elemeinek indexelésével.

A print parancs alapértelmezés szerint szóközzel választja el a kiíratott értékeket, de ez a sep paraméterrel megváltoztatható:

>>> for i in range(0, len(lst), 2):
...     print(i, lst[i], sep=': ')
... 
0: Semé
2: Lámekhé
4: Énókhé
6: Mahalaléelé
8: Énósé
10: Ádámé

A fentieket a Céllövészet című feladathoz felhasználva (inf_e_20140513_i_04):

print('1. feladat')

print('A verseny.txt állomány adatainak olvasása…')
file  = open('inf_e_20140513_i_04_verseny.txt')
l_vers= []
line  = file.readline()
line  = file.readline()
while line != '':
    l_vers+= [line[:-1]]
    line   = file.readline()

print('2. feladat')

for i in (range(len(l_vers))):
    if '++' in l_vers[i]:
        print(i+1, end=' ')
print()

Vegyük észre, hogy az állomány olvasásának elején két .readline() utasítást adtunk ki: az elsővel beolvassuk a (számunkra felesleges) kezdősort, melyet rögtön el is dobunk.

Figyeljük meg továbbá , hogy a felhasználó számára az indexek eggyel növelt értékét írtuk ki, hogy a hétköznapi gondolkodás egy alapú számozásához igazodjunk.

Az utolsóként kiírt elemet (is) szóköz követi: ez persze felesleges, de (többnyire) nem látszik; utána (az ismétlés befejeződése után) viszont (többnyire) sort kell emelnünk.

Gyakorló feladat (Robot)

  • inf_e_20081031_m_04_01
  • inf_e_20081031_m_04_2a