You are on page 1of 85

Informatyka Geodezyjna -

wykłady/ćwiczenia, rok akad. 2020-2021


Wyk. 5: Python - pętla for

Kinga Węzka
kinga.wezka@pw.edu.pl
Katedra Geodezji i Astronomii Geodezyjnej
Plan
1. Sterowanie wykonywaniem programu
Pętle w Pythonie
2. Pętla for
Obiekty iterowalne (iteratory)
3. Przykłady użycia pętli for
Przykłady użycia pętli for - iteracja po łańcuchu znaków
Przykłady użycia pętli for - iteracja po listach
Przykłady użycia pętli for - iteracja po słownikach
Przykłady użycia pętli for - zip - przechodzenie równoległe
Przykłady użycia pętli for - enumerate - generowanie wartości przesunięcia i elementów
4. Wynik wykonania pętli for – zasięg wyniku działania pętli
5. Pętle zagnieżdżone (ang. nested loops)
6. Listy i Słowniki składane (ang. list and dict comprehension)
7. Wyrażenie else dla pętli for
8. Instrukcje kontrolne w pętli for
9. Podsumowanie: funkcje często używane z iteratorami
Wyk. 5: Informatyka Geodezyjna - pętla for 2/36
Sterowanie wykonywaniem programu

Instrukcje warunkowe: if/elif/else


Instrukcje kontrolne: break, continue i pass
Pętle: for while

Wyk. 5: Informatyka Geodezyjna - pętla for 3/36


Sterowanie wykonywaniem programu

Instrukcje warunkowe: if/elif/else


Instrukcje kontrolne: break, continue i pass
Pętle: for while

Wyk. 5: Informatyka Geodezyjna - pętla for 3/36


Sterowanie wykonywaniem programu

Instrukcje warunkowe: if/elif/else


Instrukcje kontrolne: break, continue i pass
Pętle: for while

Wyk. 5: Informatyka Geodezyjna - pętla for 3/36


Sterowanie wykonywaniem programu

Instrukcje warunkowe: if/elif/else


Instrukcje kontrolne: break, continue i pass
Pętle: for while

Wyk. 5: Informatyka Geodezyjna - pętla for 3/36


Pętle w Pythonie

W Pythonie używane są dwa rodzaje pętli: for i while


for : "przebiega" przez podany zbiór danych, element-po-elemencie. Pętli używamy jeżeli
wiemy ile iteracji chcemy wykonać - znamy liczbę iteracji (nawet jeśli możesz to wcześniej
zatrzymać)
while: wykonuje się dopóki pewien warunek logiczny jest spełniony. Pętli używamy jeżeli
nie wiemy kiedy się ona zakończy (nie znamy liczby iteracji) natomiast znamy jakiś
specyficzny warunek który powinien zatrzymać iteracje.

Wyk. 5: Informatyka Geodezyjna - pętla for 4/36


Pętle w Pythonie

W Pythonie używane są dwa rodzaje pętli: for i while


for : "przebiega" przez podany zbiór danych, element-po-elemencie. Pętli używamy jeżeli
wiemy ile iteracji chcemy wykonać - znamy liczbę iteracji (nawet jeśli możesz to wcześniej
zatrzymać)
while: wykonuje się dopóki pewien warunek logiczny jest spełniony. Pętli używamy jeżeli
nie wiemy kiedy się ona zakończy (nie znamy liczby iteracji) natomiast znamy jakiś
specyficzny warunek który powinien zatrzymać iteracje.

Obie pętle są używane w celu przetwarzania powtarzającej się sekcji kodu. W przeciwieństwie
do pętli for pętla while nie jest uruchamiana n-razy, ale dopóki zdefiniowany warunek nie
będzie już spełniony. Jeśli warunek jest na początku (w pierwszym przejściu) fałszywy, blok
kodu w pętli nie zostanie w ogóle wykonany.

Wyk. 5: Informatyka Geodezyjna - pętla for 4/36


Pętle w Pythonie: for

Pętla for "przebiega" przez podany zbiór danych, który jest obiektem iterowalnym lub
iteratorem (np. łańcuch znaków, lista, słownik itp.) oraz własnych typach obiektów, które
można tworzyć za pomocą klas (więcej na wykładach na temat programowanie obiektowe)
for
1 for <element> in <obiekt iterowalny>:
2 blok kodu: wykonanie dla elementu

koniec elementów
element w sekwencji
zbioru wyjście z pętli
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 5/36


Pętle w Pythonie: for

Pętla for "przebiega" przez podany zbiór danych, który jest obiektem iterowalnym lub
iteratorem (np. łańcuch znaków, lista, słownik itp.) oraz własnych typach obiektów, które
można tworzyć za pomocą klas (więcej na wykładach na temat programowanie obiektowe)
for
1 for <element> in <obiekt iterowalny>:
2 blok kodu: wykonanie dla elementu

koniec elementów
In[2]:
element w sekwencji
1 for element in [1, 2, 3]:
zbioru wyjście z pętli 2 wynik = element + 5
danych 3 print(wynik)

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 5/36


Pętle w Pythonie: for

Pętla for "przebiega" przez podany zbiór danych, który jest obiektem iterowalnym lub
iteratorem (np. łańcuch znaków, lista, słownik itp.) oraz własnych typach obiektów, które
można tworzyć za pomocą klas (więcej na wykładach na temat programowanie obiektowe)
for
1 for <element> in <obiekt iterowalny>:
2 blok kodu: wykonanie dla elementu

koniec elementów
In[3]:
element w sekwencji
1 for element in [1, 2, 3]:
zbioru wyjście z pętli 2 wynik = element + 5
danych 3 print(wynik)

Out[3]: 1 6
2 7
blok kodu 3 8

Wyk. 5: Informatyka Geodezyjna - pętla for 5/36


Obiekty iterowalne (iteratory)

Kiedy mamy kolekcję typów danych, to naturalne jest, że chcemy przeprowadzać iteracje
przechowywanych tam danych.
Typ danych umożliwiający iterację to taki, który może zwrócić pojedynczo każdy jego
element. Każdy obiekt posiadający metodę __iter__() lub każda sekwencja (na
przykład obiekt posiadający metodę __getitem__() pobierająca argumenty w postaci
liczb całkowitych, począwszy od zera) pozwala na iterację i jest iteratorem
(Summerfield, 2010, p.155).
Kiedy używamy pętli for element in iterator, Python w rzeczywistości wywołuje
funkcję iter(iteracja) w celu pobrania iteratora. Następnie w trakcie wykonywania
każdej pętli iteracji zostaje wywołana metoda iteratora – __next__() , której celem jest
pobranie kolejnego elementu. Po zgłoszeniu wyjątku StopIteration wykonywanie pętli
zostaje przerwane.

Wyk. 5: Informatyka Geodezyjna - pętla for 6/36


Obiekty iterowalne (iteratory)

Kiedy mamy kolekcję typów danych, to naturalne jest, że chcemy przeprowadzać iteracje
przechowywanych tam danych.
Typ danych umożliwiający iterację to taki, który może zwrócić pojedynczo każdy jego
element. Każdy obiekt posiadający metodę __iter__() lub każda sekwencja (na
przykład obiekt posiadający metodę __getitem__() pobierająca argumenty w postaci
liczb całkowitych, począwszy od zera) pozwala na iterację i jest iteratorem
(Summerfield, 2010, p.155).
Kiedy używamy pętli for element in iterator, Python w rzeczywistości wywołuje
funkcję iter(iteracja) w celu pobrania iteratora. Następnie w trakcie wykonywania
każdej pętli iteracji zostaje wywołana metoda iteratora – __next__() , której celem jest
pobranie kolejnego elementu. Po zgłoszeniu wyjątku StopIteration wykonywanie pętli
zostaje przerwane.

Wyk. 5: Informatyka Geodezyjna - pętla for 6/36


Obiekty iterowalne (iteratory)

Kiedy mamy kolekcję typów danych, to naturalne jest, że chcemy przeprowadzać iteracje
przechowywanych tam danych.
Typ danych umożliwiający iterację to taki, który może zwrócić pojedynczo każdy jego
element. Każdy obiekt posiadający metodę __iter__() lub każda sekwencja (na
przykład obiekt posiadający metodę __getitem__() pobierająca argumenty w postaci
liczb całkowitych, począwszy od zera) pozwala na iterację i jest iteratorem
(Summerfield, 2010, p.155).
Kiedy używamy pętli for element in iterator, Python w rzeczywistości wywołuje
funkcję iter(iteracja) w celu pobrania iteratora. Następnie w trakcie wykonywania
każdej pętli iteracji zostaje wywołana metoda iteratora – __next__() , której celem jest
pobranie kolejnego elementu. Po zgłoszeniu wyjątku StopIteration wykonywanie pętli
zostaje przerwane.

Wyk. 5: Informatyka Geodezyjna - pętla for 6/36


Obiekty iterowalne (iteratory)

Kiedy mamy kolekcję typów danych, to naturalne jest, że chcemy przeprowadzać iteracje
przechowywanych tam danych.
Typ danych umożliwiający iterację to taki, który może zwrócić pojedynczo każdy jego
element. Każdy obiekt posiadający metodę __iter__() lub każda sekwencja (na
przykład obiekt posiadający metodę __getitem__() pobierająca argumenty w postaci
liczb całkowitych, począwszy od zera) pozwala na iterację i jest iteratorem
(Summerfield, 2010, p.155).
Kiedy używamy pętli for element in iterator, Python w rzeczywistości wywołuje
funkcję iter(iteracja) w celu pobrania iteratora. Następnie w trakcie wykonywania
każdej pętli iteracji zostaje wywołana metoda iteratora – __next__() , której celem jest
pobranie kolejnego elementu. Po zgłoszeniu wyjątku StopIteration wykonywanie pętli
zostaje przerwane.

Wyk. 5: Informatyka Geodezyjna - pętla for 6/36


Przykłady pętli for - iteracja po łańcuchu znaków

Pętla po elementach łańcucha znaków Pętla po elementach łańcucha znaków z


(typ string): użyciem indeksów:
In[4]: In[5]:
1 s = "abc" 1 s = "abc"
2 for c in s: 2 for i in range(0, len(s)):
3 print(c) 3 print(s[i])

Out: 1 a Out: 1 a
2 b 2 b
3 c 3 c

Wyk. 5: Informatyka Geodezyjna - pętla for 7/36


Przykłady pętli for - iteracja po łańcuchu znaków

Pętla po elementach łańcucha znaków Pętla po elementach łańcucha znaków z


(typ string): użyciem indeksów:
In[6]: In[7]:
1 s = "abc" 1 s = "abc"
2 for c in s: 2 for i in range(0, len(s)):
3 print(c) 3 print(s[i])

Out: 1 a Out: 1 a
2 b 2 b
3 c 3 c

Wyk. 5: Informatyka Geodezyjna - pętla for 7/36


Przykłady pętli for - iteracja po łańcuchu znaków

Pętla po elementach łańcucha znaków Pętla po elementach łańcucha znaków z


(typ string): użyciem indeksów:
In[8]: In[9]:
1 s = "abc" 1 s = "abc"
2 for c in s: 2 for i in range(0, len(s)):
3 print(c) 3 print(s[i])

Out: 1 a Out: 1 a
2 b 2 b
3 c 3 c

Wyk. 5: Informatyka Geodezyjna - pętla for 7/36


Przykłady pętli for - iteracja po listach

Iteracja po elementach listy: Modyfikacja elementów listy :


In[10]: In[11]:
1 L = [1, 2, 3, 4] 1 L = [1, 2, 3, 4, 5]
2 for element in L: 2 for i in range(len(L)):
3 print(element) 3 L[i] += 1
4 print(L)
Out: 1 1
2 2 Out: 1 [2, 3, 4, 5, 6]
3 3
4 4

Wyk. 5: Informatyka Geodezyjna - pętla for 8/36


Przykłady pętli for - iteracja po listach

Iteracja po elementach listy: Modyfikacja elementów listy :


In[12]: In[13]:
1 L = [1, 2, 3, 4] 1 L = [1, 2, 3, 4, 5]
2 for element in L: 2 for i in range(len(L)):
3 print(element) 3 L[i] += 1
4 print(L)
Out: 1 1
2 2 Out: 1 [2, 3, 4, 5, 6]
3 3
4 4

Wyk. 5: Informatyka Geodezyjna - pętla for 8/36


Przykłady pętli for - iteracja po listach

Iteracja po elementach listy: Modyfikacja elementów listy :


In[14]: In[15]:
1 L = [1, 2, 3, 4] 1 L = [1, 2, 3, 4, 5]
2 for element in L: 2 for i in range(len(L)):
3 print(element) 3 L[i] += 1
4 print(L)
Out: 1 1
2 2 Out: 1 [2, 3, 4, 5, 6]
3 3
4 4

Wyk. 5: Informatyka Geodezyjna - pętla for 8/36


Przykłady pętli for - iteracja po listach

Iteracja po elementach listy: Modyfikacja elementów listy :


In[16]: In[17]:
1 L = [1, 2, 3, 4] 1 L = [1, 2, 3, 4, 5]
2 for element in L: 2 for i in range(len(L)):
3 print(element) 3 L[i] += 1
4 print(L)
Out: 1 1
2 2 Out: 1 [2, 3, 4, 5, 6]
3 3
4 4

Wyk. 5: Informatyka Geodezyjna - pętla for 8/36


Przykłady użycia pętli for - iteracja po słownikach
Iteracja po kluczach słownika: Iteracja po kluczach i wartościach słownika:
In[18]: In[20]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for key in D.keys(): 2 for key, val in D.items():
3 print(’>’, key) 3 print(key, ’>’, val)
Out: 1 > a Out: 1 a > 1
2 > b 2 b > 2

Iteracja po wartościach słownika: Iteracja po kluczach i odwołanie do wartości:


In[19]: In[21]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for val in D.values(): 2 for key in D:
3 print(’>’, val) 3 print(key, ’>’, D[key])
Out: 1 > 1 Out: 1 a > 1
2 > 2 2 b > 2
https://realpython.com/iterate-through-dictionary-python/?fbclid=
Wyk. 5: Informatyka Geodezyjna - pętla for
IwAR2RtHUvOwTnTo8IUNEIruFBGL8tj0NhAkyvZ62q6-kx_Rzkom9PTaOlyN8 9/36
Przykłady użycia pętli for - iteracja po słownikach
Iteracja po kluczach słownika: Iteracja po kluczach i wartościach słownika:
In[22]: In[24]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for key in D.keys(): 2 for key, val in D.items():
3 print(’>’, key) 3 print(key, ’>’, val)
Out: 1 > a Out: 1 a > 1
2 > b 2 b > 2

Iteracja po wartościach słownika: Iteracja po kluczach i odwołanie do wartości:


In[23]: In[25]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for val in D.values(): 2 for key in D:
3 print(’>’, val) 3 print(key, ’>’, D[key])
Out: 1 > 1 Out: 1 a > 1
2 > 2 2 b > 2
https://realpython.com/iterate-through-dictionary-python/?fbclid=
Wyk. 5: Informatyka Geodezyjna - pętla for
IwAR2RtHUvOwTnTo8IUNEIruFBGL8tj0NhAkyvZ62q6-kx_Rzkom9PTaOlyN8 9/36
Przykłady użycia pętli for - iteracja po słownikach
Iteracja po kluczach słownika: Iteracja po kluczach i wartościach słownika:
In[26]: In[28]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for key in D.keys(): 2 for key, val in D.items():
3 print(’>’, key) 3 print(key, ’>’, val)
Out: 1 > a Out: 1 a > 1
2 > b 2 b > 2

Iteracja po wartościach słownika: Iteracja po kluczach i odwołanie do wartości:


In[27]: In[29]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for val in D.values(): 2 for key in D:
3 print(’>’, val) 3 print(key, ’>’, D[key])
Out: 1 > 1 Out: 1 a > 1
2 > 2 2 b > 2
https://realpython.com/iterate-through-dictionary-python/?fbclid=
Wyk. 5: Informatyka Geodezyjna - pętla for
IwAR2RtHUvOwTnTo8IUNEIruFBGL8tj0NhAkyvZ62q6-kx_Rzkom9PTaOlyN8 9/36
Przykłady użycia pętli for - iteracja po słownikach
Iteracja po kluczach słownika: Iteracja po kluczach i wartościach słownika:
In[30]: In[32]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for key in D.keys(): 2 for key, val in D.items():
3 print(’>’, key) 3 print(key, ’>’, val)
Out: 1 > a Out: 1 a > 1
2 > b 2 b > 2

Iteracja po wartościach słownika: Iteracja po kluczach i odwołanie do wartości:


In[31]: In[33]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for val in D.values(): 2 for key in D:
3 print(’>’, val) 3 print(key, ’>’, D[key])
Out: 1 > 1 Out: 1 a > 1
2 > 2 2 b > 2
https://realpython.com/iterate-through-dictionary-python/?fbclid=
Wyk. 5: Informatyka Geodezyjna - pętla for
IwAR2RtHUvOwTnTo8IUNEIruFBGL8tj0NhAkyvZ62q6-kx_Rzkom9PTaOlyN8 9/36
Przykłady użycia pętli for - iteracja po słownikach
Iteracja po kluczach słownika: Iteracja po kluczach i wartościach słownika:
In[34]: In[36]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for key in D.keys(): 2 for key, val in D.items():
3 print(’>’, key) 3 print(key, ’>’, val)
Out: 1 > a Out: 1 a > 1
2 > b 2 b > 2

Iteracja po wartościach słownika: Iteracja po kluczach i odwołanie do wartości:


In[35]: In[37]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for val in D.values(): 2 for key in D:
3 print(’>’, val) 3 print(key, ’>’, D[key])
Out: 1 > 1 Out: 1 a > 1
2 > 2 2 b > 2
https://realpython.com/iterate-through-dictionary-python/?fbclid=
Wyk. 5: Informatyka Geodezyjna - pętla for
IwAR2RtHUvOwTnTo8IUNEIruFBGL8tj0NhAkyvZ62q6-kx_Rzkom9PTaOlyN8 9/36
Przykłady użycia pętli for - iteracja po słownikach
Iteracja po kluczach słownika: Iteracja po kluczach i wartościach słownika:
In[38]: In[40]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for key in D.keys(): 2 for key, val in D.items():
3 print(’>’, key) 3 print(key, ’>’, val)
Out: 1 > a Out: 1 a > 1
2 > b 2 b > 2

Iteracja po wartościach słownika: Iteracja po kluczach i odwołanie do wartości:


In[39]: In[41]:
1 D = {’a’:1, ’b’:2} 1 D = {’a’:1, ’b’:2}
2 for val in D.values(): 2 for key in D:
3 print(’>’, val) 3 print(key, ’>’, D[key])
Out: 1 > 1 Out: 1 a > 1
2 > 2 2 b > 2
https://realpython.com/iterate-through-dictionary-python/?fbclid=
Wyk. 5: Informatyka Geodezyjna - pętla for
IwAR2RtHUvOwTnTo8IUNEIruFBGL8tj0NhAkyvZ62q6-kx_Rzkom9PTaOlyN8 9/36
Przykłady użycia pętli for - zip - przechodzenie równoległe

Funkcja zip() pozwala na wykorzystanie pętli for do równoległego przejścia większej liczby
sekwencji.
In[42]: In[43]:
1 A = [1, 2, 3, 4] 1 A = [1, 2, 3]
2 B = [8, 8, 8, 8] 2 B = [8, 8, 8, 8, 8, 8]
3 C = [1, 1, 1, 1] 3 C = [1, 1, 1, 1, 1]
4 for a, b, c in zip(A, B, C): 4 for a, b, c in zip(A, B, C):
5 wynik = a + b + c 5 wynik = a + b + c
6 print(a,b,c, ’=’, wynik) 6 print(a,b,c, ’=’, wynik)

Wyk. 5: Informatyka Geodezyjna - pętla for 10/36


Przykłady użycia pętli for - zip - przechodzenie równoległe

Funkcja zip() pozwala na wykorzystanie pętli for do równoległego przejścia większej liczby
sekwencji.
In[44]: In[45]:
1 A = [1, 2, 3, 4] 1 A = [1, 2, 3]
2 B = [8, 8, 8, 8] 2 B = [8, 8, 8, 8, 8, 8]
3 C = [1, 1, 1, 1] 3 C = [1, 1, 1, 1, 1]
4 for a, b, c in zip(A, B, C): 4 for a, b, c in zip(A, B, C):
5 wynik = a + b + c 5 wynik = a + b + c
6 print(a,b,c, ’=’, wynik) 6 print(a,b,c, ’=’, wynik)

Out: 1 1 8 1 = 10
2 2 8 1 = 11
3 3 8 1 = 12
4 4 8 1 = 13

Wyk. 5: Informatyka Geodezyjna - pętla for 10/36


Przykłady użycia pętli for - zip - przechodzenie równoległe

Funkcja zip() pozwala na wykorzystanie pętli for do równoległego przejścia większej liczby
sekwencji.
In[46]: In[47]:
1 A = [1, 2, 3, 4] 1 A = [1, 2, 3]
2 B = [8, 8, 8, 8] 2 B = [8, 8, 8, 8, 8, 8]
3 C = [1, 1, 1, 1] 3 C = [1, 1, 1, 1, 1]
4 for a, b, c in zip(A, B, C): 4 for a, b, c in zip(A, B, C):
5 wynik = a + b + c 5 wynik = a + b + c
6 print(a,b,c, ’=’, wynik) 6 print(a,b,c, ’=’, wynik)

Out: 1 1 8 1 = 10 Out: 1 1 8 1 = 10
2 2 8 1 = 11 2 2 8 1 = 11
3 3 8 1 = 12 3 3 8 1 = 12
4 4 8 1 = 13

Wyk. 5: Informatyka Geodezyjna - pętla for 10/36


Przykłady użycia pętli for - zip - przechodzenie równoległe

Funkcja zip(i1, i2, ..., iN) - zwraca iterator krotek, używając iteratorów od i1 do iN

Tworzenie słowników za pomocą funkcji zip


In[48]:
1 keys = [’mielonka’, ’jajka’, ’tost’]
2 vals = [1, 3, 5]
3 D2 = {}
4 for (k, v) in zip(keys, vals):
5 D2[k] = v
6 print(D2)

Out: 1 {’mielonka’: 1, ’jajka’: 3, ’tost’: 5}

Wyk. 5: Informatyka Geodezyjna - pętla for 11/36


Przykłady użycia pętli for - zip - przechodzenie równoległe

Funkcja zip(i1, i2, ..., iN) - zwraca iterator krotek, używając iteratorów od i1 do iN

Tworzenie słowników za pomocą funkcji zip


In[49]:
1 keys = [’mielonka’, ’jajka’, ’tost’]
2 vals = [1, 3, 5]
3 D2 = {}
4 for (k, v) in zip(keys, vals):
5 D2[k] = v
6 print(D2)

Out: 1 {’mielonka’: 1, ’jajka’: 3, ’tost’: 5}

Wyk. 5: Informatyka Geodezyjna - pętla for 11/36


Przykłady użycia pętli for - enumerate - generator

Funkcja enumerate zwraca obiekt generatora — rodzaj obiektu obsługujący protokół iteracji
(więcej na kolejnych wykładach). W skrócie, obsługuje on metodę __next__ wywoływaną za
pomocą funkcji wbudowanej next i zwracającą za każdym przejściem pętli krotkę
(indeks, wartość).
Funkcja enumerate(i, start) używana jest w pętlach for...in .. w celu dostarczenia
sekwencji (indeks,element) krotek o indeksie startującym od zera lub od wartości start.
In[50]: In[51]:
1 L = [3, 4, 5 ] 1 L = [3, 4, 5 ]
2 for (i, e) in enumerate(L): 2 for (i, e) in enumerate(L, 10):
3 print(i, e) 3 print(i, e)
Out: 1 0 3 Out: 1 10 3
2 1 4 2 11 4
3 2 5 3 12 5

Wyk. 5: Informatyka Geodezyjna - pętla for 12/36


Wynik wykonania pętli for – zasięg wyniku działania pętli
In[52]:
1 for element in [1, 2, 3]:
2 wynik = element + 5
for 3 print(’wynik w pętli =’, wynik)
4 print(’wynik poza pętlą =’, wynik)

koniec elementów
element w sekwencji
zbioru wyjście z pętli
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 13/36


Wynik wykonania pętli for – zasięg wyniku działania pętli
In[53]:
1 for element in [1, 2, 3]:
2 wynik = element + 5
for 3 print(’wynik w pętli =’, wynik)
4 print(’wynik poza pętlą =’, wynik)

Out: 1 wynik w pętli = 6


koniec elementów
element w sekwencji 2 wynik w pętli = 7
zbioru wyjście z pętli 3 wynik w pętli = 8
danych 4 wynik poza pętlą = 8

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 13/36


Wynik wykonania pętli for – zasięg wyniku działania pętli
In[54]:
1 for element in [1, 2, 3]:
2 wynik = element + 5
for 3 print(’wynik w pętli =’, wynik)
4 print(’wynik poza pętlą =’, wynik)

Out: 1 wynik w pętli = 6


koniec elementów
element w sekwencji 2 wynik w pętli = 7
zbioru wyjście z pętli 3 wynik w pętli = 8
danych 4 wynik poza pętlą = 8

Po wyjściu z pętli mamy dostęp jedynie do


blok kodu ostatniego przetworzonego elementu: wynik = 8.
Aby mieć dostęp do wyników przetwarzania każdego
elementu, należy je "zebrać" do nowej kolekcji!

Wyk. 5: Informatyka Geodezyjna - pętla for 13/36


Wynik wykonania pętli for – "skumulowanie" wyników

In[55]:
for 1 suma = 0
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
4 suma += wynik # suma=suma+wynik
koniec elementów
element w sekwencji
5 print(’w pętli’, suma)
zbioru wyjście z pętli
6 print(’suma skumulowana:’, wynik)
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 14/36


Wynik wykonania pętli for – "skumulowanie" wyników

In[56]:
for 1 suma = 0
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
4 suma += wynik # suma=suma+wynik
koniec elementów
element w sekwencji
5 print(’w pętli’, suma)
zbioru wyjście z pętli
6 print(’suma skumulowana:’, wynik)
danych
Out: 1 w pętli 6
2 w pętli 13
3 w pętli 21
4 w pętli 30
blok kodu 5 suma skumulowana: 9

Wyk. 5: Informatyka Geodezyjna - pętla for 14/36


Wynik wykonania pętli for – "zebranie" wyników

for In[57]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.append(wynik)
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 15/36


Wynik wykonania pętli for – "zebranie" wyników

for In[58]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.append(wynik)
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych
Out: 1 [6, 7, 8, 9]

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 15/36


Wynik wykonania pętli for – "zebranie" wyników

for In[59]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.extend([wynik]) #iterowalny!
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 16/36


Wynik wykonania pętli for – "zebranie" wyników

for In[60]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.extend([wynik]) #iterowalny!
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych
Out: 1 [6, 7, 8, 9]

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 16/36


Wynik wykonania pętli for – "zebranie" wyników

for In[61]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.append([element, wynik])
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 17/36


Wynik wykonania pętli for – "zebranie" wyników

for In[62]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.append([element, wynik])
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych
Out: 1 [[1, 6], [2, 7], [3, 8], [4, 9]]

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 17/36


Wynik wykonania pętli for – "zebranie" wyników

for In[63]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.extend([element, wynik])
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 18/36


Wynik wykonania pętli for – "zebranie" wyników

for In[64]:
1 A = [] # utworzenie pustej listy
2 for element in [1, 2, 3, 4]:
3 wynik = element + 5
koniec elementów A.extend([element, wynik])
element w sekwencji
4

zbioru 5 print(A)
wyjście z pętli
danych
Out: 1 [1, 6, 2, 7, 3, 8, 4, 9]

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 18/36


Wynik wykonania pętli for – "zebranie" wyników
In[65]:
1 A = 4*[’nan’] # inicjalizacja listy
for 2 print(’przed:’, A)
3 i = 0 # inicjalizacja indeksu
4 for element in [1, 2, 3, 4]:
5 wynik = element + 5
koniec elementów
element w sekwencji
6 print(’idx’, i, ’wynik’, wynik)
zbioru wyjście z pętli
7 A[i] = wynik
danych 8 i+=1 # aktualizacja indeksu
9 print(’po :’, A)

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 19/36


Wynik wykonania pętli for – "zebranie" wyników
In[66]:
1 A = 4*[’nan’] # inicjalizacja listy
for 2 print(’przed:’, A)
3 i = 0 # inicjalizacja indeksu
4 for element in [1, 2, 3, 4]:
5 wynik = element + 5
koniec elementów
element w sekwencji
6 print(’idx’, i, ’wynik’, wynik)
zbioru wyjście z pętli
7 A[i] = wynik
danych 8 i+=1 # aktualizacja indeksu
9 print(’po :’, A)
Out: 1 przed: [’nan’, ’nan’, ’nan’, ’nan’]
2 idx 0 wynik 6
blok kodu 3 idx 1 wynik 7
4 idx 2 wynik 8
5 idx 3 wynik 9
6 po : [6, 7, 8, 9]
Wyk. 5: Informatyka Geodezyjna - pętla for 19/36
Wynik wykonania pętli for – "zebranie" wyników

for
In[67]:
1 A = set() # pusty zbioru
2 for element in set({1,2,3,4}):
koniec elementów
3 wynik = element + 5
element w sekwencji 4 A.update([wynik]) #iterowalny!
zbioru wyjście z pętli 5 print(A)
danych

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 20/36


Wynik wykonania pętli for – "zebranie" wyników

for
In[68]:
1 A = set() # pusty zbioru
2 for element in set({1,2,3,4}):
koniec elementów
3 wynik = element + 5
element w sekwencji 4 A.update([wynik]) #iterowalny!
zbioru wyjście z pętli 5 print(A)
danych
Out: 1 {8, 9, 6, 7}

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 20/36


Wynik wykonania pętli for – "zebranie" wyników

for

In[69]:
1 A = ’’ # pusty łańcuch znaków
koniec elementów
element w sekwencji
2 for element in ’łańcuch znaków’:
zbioru wyjście z pętli
3 A += ’ ’ + element
danych 4 print(A)

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 21/36


Wynik wykonania pętli for – "zebranie" wyników

for

In[70]:
1 A = ’’ # pusty łańcuch znaków
koniec elementów
element w sekwencji
2 for element in ’łańcuch znaków’:
zbioru wyjście z pętli
3 A += ’ ’ + element
danych 4 print(A)
Out: 1 ł a ńc u c h z n a k ów

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 21/36


Wynik wykonania pętli for – "zebranie" wyników

for

In[71]:
1 A = {} # pusty słownik
koniec elementów
element w sekwencji
2 for i in range(0,5):
zbioru wyjście z pętli
3 A.setdefault(’result’, [])
danych 4 A[’result’].append(i)
5 print(A)

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 22/36


Wynik wykonania pętli for – "zebranie" wyników

for

In[72]:
1 A = {} # pusty słownik
koniec elementów
element w sekwencji
2 for i in range(0,5):
zbioru wyjście z pętli
3 A.setdefault(’result’, [])
danych 4 A[’result’].append(i)
5 print(A)
Out: 1 {’result’: [0, 1, 2, 3, 4]}

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 22/36


Wynik wykonania pętli for – "zebranie" wyników

for

In[73]:
1 A = {} # pusty słownik
koniec elementów
element w sekwencji
2 for i in range(4):
zbioru wyjście z pętli
3 result = ’key’ + str(i)
danych 4 A[result] = i
5 print(A)

blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 23/36


Wynik wykonania pętli for – "zebranie" wyników

for

In[74]:
1 A = {} # pusty słownik
koniec elementów
element w sekwencji
2 for i in range(4):
zbioru wyjście z pętli
3 result = ’key’ + str(i)
danych 4 A[result] = i
5 print(A)
Out: 1 {’key0’: 0, ’key1’: 1, ’key2’: 2,
’key3’: 3}
blok kodu

Wyk. 5: Informatyka Geodezyjna - pętla for 23/36


Pętle zagnieżdżone (ang. nested loops)

Pętle zagnieżdżone (ang. nested loops), tzw. pętle w pętli), wykorzystywane są do przebiegu
po kolekcjach wielopoziomowych np. listy list, słownika którego wartości są sekwencją etc.
In[75]: In[76]:
1 A = [[’a’, ’b’], [1, 2]] 1 A = {’a’:[1,2], ’b’: [11,22]}
2 for lista in A: 2 for key, val in A.items():
3 print(’lista’, lista) 3 print(’key, val’, key, val)
4 for e in lista: 4 for e in val:
5 print(e) 5 print(e)

Wyk. 5: Informatyka Geodezyjna - pętla for 24/36


Pętle zagnieżdżone (ang. nested loops)

Pętle zagnieżdżone (ang. nested loops), tzw. pętle w pętli), wykorzystywane są do przebiegu
po kolekcjach wielopoziomowych np. listy list, słownika którego wartości są sekwencją etc.
In[77]: In[78]:
1 A = [[’a’, ’b’], [1, 2]] 1 A = {’a’:[1,2], ’b’: [11,22]}
2 for lista in A: 2 for key, val in A.items():
3 print(’lista’, lista) 3 print(’key, val’, key, val)
4 for e in lista: 4 for e in val:
5 print(e) 5 print(e)
Out: 1 lista [’a’, ’b’] Out: 1 key, val a [1, 2]
2 a 2 1
3 b 3 2
4 lista [1, 2] 4 key, val b [11, 22]
5 1 5 11
6 2 6 22

Wyk. 5: Informatyka Geodezyjna - pętla for 24/36


Listy składane (ang. list comprehension)
1 lista = [działanie for element in iterator]

Zapis w komórce In[28] jest równoważny z zapisem w komórce In[29].


Wyk. 5: Informatyka Geodezyjna - pętla for 25/36
Listy składane (ang. list comprehension)
1 lista = [działanie for element in iterator]
In[81]:
1 lista = []
2 for e in range(4):
3 wynik = e+3
4 lista.append(wynik)
5 print(lista)

Out[28]: 1 [3, 4, 5, 6]

Zapis w komórce In[28] jest równoważny z zapisem w komórce In[29].


Wyk. 5: Informatyka Geodezyjna - pętla for 25/36
Listy składane (ang. list comprehension)
1 lista = [działanie for element in iterator]
In[83]:
1 lista = []
2 for e in range(4):
3 wynik = e+3
4 lista.append(wynik)
5 print(lista)

Out[28]: 1 [3, 4, 5, 6]

In[84]:
1 lista = [e + 3 for e in range(4)]
2 print(lista)

Out: 1 [3, 4, 5, 6]

Zapis w komórce In[28] jest równoważny z zapisem w komórce In[29].


Wyk. 5: Informatyka Geodezyjna - pętla for 25/36
Listy składane (ang. list comprehension)
1 lista = [działanie for element in iteracja if warunek]

Wyk. 5: Informatyka Geodezyjna - pętla for 26/36


Listy składane (ang. list comprehension)
1 lista = [działanie for element in iteracja if warunek]
In[87]:
1 lista = []
2 for e in range(4):
3 if e >= 2:
4 wynik = e+3
5 lista.append(wynik)
6 print(lista)

Out: 1 [5, 6]

Wyk. 5: Informatyka Geodezyjna - pętla for 26/36


Listy składane (ang. list comprehension)
1 lista = [działanie for element in iteracja if warunek]
In[89]:
1 lista = []
2 for e in range(4):
3 if e >= 2:
4 wynik = e+3
5 lista.append(wynik)
6 print(lista)

Out: 1 [5, 6]

In[90]:
1 lista = [e + 3 for e in range(4) if e >= 2]
2 print(lista)

Out: 1 [5, 6]

Wyk. 5: Informatyka Geodezyjna - pętla for 26/36


Słowniki składane (ang. dictionary comprehension)
1 s = {wyrażenia_klucz:wyrażenie_wartość for klucz, wartość in iteracja}

Wyk. 5: Informatyka Geodezyjna - pętla for 27/36


Słowniki składane (ang. dictionary comprehension)
1 s = {wyrażenia_klucz:wyrażenie_wartość for klucz, wartość in iteracja}
In[93]:
1 import os
2 file_size = {}
3 for nazwa in os.listdir("."):
4 file_size[nazwa] = os.path.getsize(nazwa) # w bajtach
5 print(file_size)

Out: 1 {’zadania’: 4096, ’numbers.py’: 1350, ’utc2sow_leapsec.py’: 825,


’slad_stosu.py’: 237, ’plik1.txt’: 17}

Wyk. 5: Informatyka Geodezyjna - pętla for 27/36


Słowniki składane (ang. dictionary comprehension)
1 s = {wyrażenia_klucz:wyrażenie_wartość for klucz, wartość in iteracja}
In[95]:
1 import os
2 file_size = {}
3 for nazwa in os.listdir("."):
4 file_size[nazwa] = os.path.getsize(nazwa) # w bajtach
5 print(file_size)

Out: 1 {’zadania’: 4096, ’numbers.py’: 1350, ’utc2sow_leapsec.py’: 825,


’slad_stosu.py’: 237, ’plik1.txt’: 17}

In[96]:
1 f_s = {nazwa:os.path.getsize(nazwa) for nazwa in os.listdir(".")}

Out: 1 {’zadania’: 4096, ’numbers.py’: 1350, ’utc2sow_leapsec.py’: 825,


’slad_stosu.py’: 237, ’plik1.txt’: 17}

Wyk. 5: Informatyka Geodezyjna - pętla for 27/36


Słowniki składane (ang. dictionary comprehension)
1 s = {wyraż_klucz:wyraż_wart. for klucz, wartosc in iteracja if warunek}

Wyk. 5: Informatyka Geodezyjna - pętla for 28/36


Słowniki składane (ang. dictionary comprehension)
1 s = {wyraż_klucz:wyraż_wart. for klucz, wartosc in iteracja if warunek}
In[99]:
1 file_size = {}
2 for nazwa in os.listdir("."):
3 if os.path.isfile(nazwa):
4 file_size[nazwa] = os.path.getsize(nazwa) # w bajtach
5 print(file_size)

Out: 1 {’types_numbers.py’: 1350, ’utc2sow_leapsec.py’: 825,


’slad_stosu.py’: 237, ’plik1.txt’: 17}

Wyk. 5: Informatyka Geodezyjna - pętla for 28/36


Słowniki składane (ang. dictionary comprehension)
1 s = {wyraż_klucz:wyraż_wart. for klucz, wartosc in iteracja if warunek}
In[101]:
1 file_size = {}
2 for nazwa in os.listdir("."):
3 if os.path.isfile(nazwa):
4 file_size[nazwa] = os.path.getsize(nazwa) # w bajtach
5 print(file_size)

Out: 1 {’types_numbers.py’: 1350, ’utc2sow_leapsec.py’: 825,


’slad_stosu.py’: 237, ’plik1.txt’: 17}
In[102]:
1 f_s = {nazwa:os.path.getsize(nazwa) for nazwa in os.listdir(".")
if os.path.isfile(nazwa)}

Out: 1 {’types_numbers.py’: 1350, ’utc2sow_leapsec.py’: 825,


’slad_stosu.py’: 237, ’plik1.txt’: 17}
Wyk. 5: Informatyka Geodezyjna - pętla for 28/36
Wyrażenie else dla pętli for

Po pętli for można umieścić instrukcje else. Kod pod instrukcją else wykonywany jest tylko
gdy pętla jest "wyczerpana". Instrukcja else nie wykona się gdy przerwiemy przejścia
instrukcją break lub gdy zostanie zgłoszony wyjątek (ang. exception raised).
In[103]: In[104]:
1 for i in range(4): 1 for i in range(4):
2 print(i) 2 print(i)
3 else: 3 if i == 2:
4 print("zrobione") 4 break
5 else:
Out: 1 0 6 print("zrobione")
2 1
3 2 Out: 1 0
4 3 2 1
5 zrobione 3 2

Wyk. 5: Informatyka Geodezyjna - pętla for 29/36


Instrukcje kontrolne w pętli for
continue break
Kończy przebieg aktualnej iteracji pętli i Powoduje zakończenie pętli, kod po tej
rozpoczyna kolejną iterację. instrukcji w pętli nie zostanie wykonany.
In[105]: In[106]:
1 for i in range(10): 1 for i in range(10):
2 if i %2 != 0: 2 if i %2 != 0:
3 continue 3 break
4 print(’even’, i) 4 print(’even’, i)

Wyk. 5: Informatyka Geodezyjna - pętla for 30/36


Instrukcje kontrolne w pętli for
continue break
Kończy przebieg aktualnej iteracji pętli i Powoduje zakończenie pętli, kod po tej
rozpoczyna kolejną iterację. instrukcji w pętli nie zostanie wykonany.
In[107]: In[108]:
1 for i in range(10): 1 for i in range(10):
2 if i %2 != 0: 2 if i %2 != 0:
3 continue 3 break
4 print(’even’, i) 4 print(’even’, i)

Out: 1 even 0
2 even 2
3 even 4
4 even 6
5 even 8

Wyk. 5: Informatyka Geodezyjna - pętla for 30/36


Instrukcje kontrolne w pętli for
continue break
Kończy przebieg aktualnej iteracji pętli i Powoduje zakończenie pętli, kod po tej
rozpoczyna kolejną iterację. instrukcji w pętli nie zostanie wykonany.
In[109]: In[110]:
1 for i in range(10): 1 for i in range(10):
2 if i %2 != 0: 2 if i %2 != 0:
3 continue 3 break
4 print(’even’, i) 4 print(’even’, i)

Out: 1 even 0 Out: 1 even 0


2 even 2
3 even 4
4 even 6
5 even 8

Wyk. 5: Informatyka Geodezyjna - pętla for 30/36


Podsumowanie
Instrukcja break powoduje natychmiastowe wyjście z pętli (znajdziemy się poniżej całej
instrukcji pętli), natomiast continue przeskakuje z powrotem na górę pętli (znajdziemy
się tuż przed kolejnym elementem pobieranym w for ).
Część else w pętlach for zostanie wykonana raz, kiedy pętla się kończy — o ile kończy
się normalnie, bez trafienia na instrukcję break. Instrukcja break powoduje
natychmiastowe wyjście z pętli i pominięcie części else (o ile jest ona w ogóle obecna).
Funkcję wbudowaną range można wykorzystać w pętli for w celu zaimplementowania
ustalonej liczby powtórzeń, przejścia po wartościach przesunięć zamiast po elementach
znajdujących się na tych pozycjach, pominięcia kolejnych elementów w miarę
przechodzenia, a także modyfikacji listy w trakcie przechodzenia jej. Żadna z tych ról nie
wymaga range i w większości przypadków istnieją alternatywy — przejście samych
elementów, wycinki z trzema wartościami granicznymi, a także listy składane są obecnie
nieraz lepszymi rozwiązaniami (pomimo naturalnych upodobań byłych programistów
języka C, którzy chcą wszystko zliczać) (Lutz, 2011).
Słowniki i listy składane są elementami paradygmatu programowania funkcyjnego
oferowanego przez Python.
Wyk. 5: Informatyka Geodezyjna - pętla for 31/36
Podsumowanie
Instrukcja break powoduje natychmiastowe wyjście z pętli (znajdziemy się poniżej całej
instrukcji pętli), natomiast continue przeskakuje z powrotem na górę pętli (znajdziemy
się tuż przed kolejnym elementem pobieranym w for ).
Część else w pętlach for zostanie wykonana raz, kiedy pętla się kończy — o ile kończy
się normalnie, bez trafienia na instrukcję break. Instrukcja break powoduje
natychmiastowe wyjście z pętli i pominięcie części else (o ile jest ona w ogóle obecna).
Funkcję wbudowaną range można wykorzystać w pętli for w celu zaimplementowania
ustalonej liczby powtórzeń, przejścia po wartościach przesunięć zamiast po elementach
znajdujących się na tych pozycjach, pominięcia kolejnych elementów w miarę
przechodzenia, a także modyfikacji listy w trakcie przechodzenia jej. Żadna z tych ról nie
wymaga range i w większości przypadków istnieją alternatywy — przejście samych
elementów, wycinki z trzema wartościami granicznymi, a także listy składane są obecnie
nieraz lepszymi rozwiązaniami (pomimo naturalnych upodobań byłych programistów
języka C, którzy chcą wszystko zliczać) (Lutz, 2011).
Słowniki i listy składane są elementami paradygmatu programowania funkcyjnego
oferowanego przez Python.
Wyk. 5: Informatyka Geodezyjna - pętla for 31/36
Podsumowanie
Instrukcja break powoduje natychmiastowe wyjście z pętli (znajdziemy się poniżej całej
instrukcji pętli), natomiast continue przeskakuje z powrotem na górę pętli (znajdziemy
się tuż przed kolejnym elementem pobieranym w for ).
Część else w pętlach for zostanie wykonana raz, kiedy pętla się kończy — o ile kończy
się normalnie, bez trafienia na instrukcję break. Instrukcja break powoduje
natychmiastowe wyjście z pętli i pominięcie części else (o ile jest ona w ogóle obecna).
Funkcję wbudowaną range można wykorzystać w pętli for w celu zaimplementowania
ustalonej liczby powtórzeń, przejścia po wartościach przesunięć zamiast po elementach
znajdujących się na tych pozycjach, pominięcia kolejnych elementów w miarę
przechodzenia, a także modyfikacji listy w trakcie przechodzenia jej. Żadna z tych ról nie
wymaga range i w większości przypadków istnieją alternatywy — przejście samych
elementów, wycinki z trzema wartościami granicznymi, a także listy składane są obecnie
nieraz lepszymi rozwiązaniami (pomimo naturalnych upodobań byłych programistów
języka C, którzy chcą wszystko zliczać) (Lutz, 2011).
Słowniki i listy składane są elementami paradygmatu programowania funkcyjnego
oferowanego przez Python.
Wyk. 5: Informatyka Geodezyjna - pętla for 31/36
Podsumowanie
Instrukcja break powoduje natychmiastowe wyjście z pętli (znajdziemy się poniżej całej
instrukcji pętli), natomiast continue przeskakuje z powrotem na górę pętli (znajdziemy
się tuż przed kolejnym elementem pobieranym w for ).
Część else w pętlach for zostanie wykonana raz, kiedy pętla się kończy — o ile kończy
się normalnie, bez trafienia na instrukcję break. Instrukcja break powoduje
natychmiastowe wyjście z pętli i pominięcie części else (o ile jest ona w ogóle obecna).
Funkcję wbudowaną range można wykorzystać w pętli for w celu zaimplementowania
ustalonej liczby powtórzeń, przejścia po wartościach przesunięć zamiast po elementach
znajdujących się na tych pozycjach, pominięcia kolejnych elementów w miarę
przechodzenia, a także modyfikacji listy w trakcie przechodzenia jej. Żadna z tych ról nie
wymaga range i w większości przypadków istnieją alternatywy — przejście samych
elementów, wycinki z trzema wartościami granicznymi, a także listy składane są obecnie
nieraz lepszymi rozwiązaniami (pomimo naturalnych upodobań byłych programistów
języka C, którzy chcą wszystko zliczać) (Lutz, 2011).
Słowniki i listy składane są elementami paradygmatu programowania funkcyjnego
oferowanego przez Python.
Wyk. 5: Informatyka Geodezyjna - pętla for 31/36
Podsumowanie
Instrukcja break powoduje natychmiastowe wyjście z pętli (znajdziemy się poniżej całej
instrukcji pętli), natomiast continue przeskakuje z powrotem na górę pętli (znajdziemy
się tuż przed kolejnym elementem pobieranym w for ).
Część else w pętlach for zostanie wykonana raz, kiedy pętla się kończy — o ile kończy
się normalnie, bez trafienia na instrukcję break. Instrukcja break powoduje
natychmiastowe wyjście z pętli i pominięcie części else (o ile jest ona w ogóle obecna).
Funkcję wbudowaną range można wykorzystać w pętli for w celu zaimplementowania
ustalonej liczby powtórzeń, przejścia po wartościach przesunięć zamiast po elementach
znajdujących się na tych pozycjach, pominięcia kolejnych elementów w miarę
przechodzenia, a także modyfikacji listy w trakcie przechodzenia jej. Żadna z tych ról nie
wymaga range i w większości przypadków istnieją alternatywy — przejście samych
elementów, wycinki z trzema wartościami granicznymi, a także listy składane są obecnie
nieraz lepszymi rozwiązaniami (pomimo naturalnych upodobań byłych programistów
języka C, którzy chcą wszystko zliczać) (Lutz, 2011).
Słowniki i listy składane są elementami paradygmatu programowania funkcyjnego
oferowanego przez Python.
Wyk. 5: Informatyka Geodezyjna - pętla for 31/36
Funkcje często używane z iteratorami

Na podstawie (Summerfield, 2010, tab. 3.4 ):


a + b – zwraca sekwencje, która jest konkatenacją sekwencji s i t
s * n – zwraca sekwencje, która wielokrotnością (n) sekwencji s
x in i – zwraca wartość True, jeśli element x znajduje się w iteracji. Do odwrócenia
sprawdzenia należy użyć operatora not in
all(i) – zwraca wartość True, jeśli każdy element iteracii i przyjmuje wartość True.
any(i) – zwraca wartość True, jeśli dowolny element iteracii i przyjmuje wartość True
enumerate(i, start) – funkcja używana w pętlach for...in .. w celu dostarczenia
sekwencji (indeks, element) krotek o indeksie rozpoczynającym się od zera lub wartości
start.
len(x) – zwraca wielkość x. Jeżeli x jest kolekcją, wówczas oznacza to liczbę elementów.
Jeżeli x jest ciągiem tekstowym, oznacza to liczbę znaków

Wyk. 5: Informatyka Geodezyjna - pętla for 32/36


Funkcje często używane z iteratorami

max(i, klucz) – zwraca największy element w iteracji i lub element z największą


wartością klucz(element), jeśli podano klucz
min(i, klucz) – zwraca najmniejszy element w iteracji i lub element z największą
wartością klucz(element), jeśli podano klucz
range(poczatek, koniec, interwal) – zwraca liczbę całkowitą iteratora. Jeżeli
podano jeden argument (koniec), iterator bedzie w przedziale od 0 do koniec 1. W
przypadku dwóch argumentów (poczqtek, koniec) iterator będzie w przedziale od
poczqtek do koniec. Po podaniu trzech argumentów iterator bedzie w przedziale od
początek do koniec w krokach o wartości krok.
reversed(i) – zwraca iterator, który zwraca elementy iteratora i w odwrotnej kolejności.
sorted(i, key, reverse) - zwraca listę elementów iteratora i w kolejności sortowania.
Argument key służy do podania wzorca DSU (Decorate, Sort, Undecorate). Jeżeli
argument reverse ma wartość True, sortowanie będzie przeprowadzone odwrotnie

Wyk. 5: Informatyka Geodezyjna - pętla for 33/36


Funkcje często używane z iteratorami

sum(i, start) - zwraca sumę elementów w iteracji i plus początek (którego wartość
domyślna wynosi 0). Iterator i nie może zawierać ciągów tekstowych.
zip(i1, i2, ..., iN) - zwraca iterator krotek, używając iteratorów od i1 do iN.

Wyk. 5: Informatyka Geodezyjna - pętla for 34/36


Literatura

M. Lutz. Python. Wprowadzenie. Helion, 2011.


M. Summerfield. Python 3. Kompletne wprowadzenie do programowania. Wydanie II. 2010.

Wyk. 5: Informatyka Geodezyjna - pętla for 35/36


Dziękuje za uwagę

Kinga Węzka kinga.wezka@pw.edu.pl

Wyk. 5: Informatyka Geodezyjna - pętla for 36/36

You might also like