Pętle w Pythonie
Po siedmiu częściach tutoriali z programowania w Pythonie w końcu zaczyna się prawdziwe programowanie;)
Żeby nie było – wcale nie budowałem napięcia, uważam, że podstawy podane w poprzednich wpisach na prawdę się przydadzą i pomogą w dalszej nauce Pythona.
Uwaga!
Od tego odcinka przestaję podawać kod w stylu IDLE (z „>>> ” na początku linii z kodem). Zakładam już, że po tych kliku odcinkach rozróżniacie linie kodu od np. wyników printa). Dzięki temu łatwiej też skopiować sobie kod
i wkleić do IDLE czy PyCharma.
Czym są te magiczne pętle?
Otóż pętle, to takie konstrukcje w języku programowania, które pozwalają powtarzać te same instrukcje wiele razy. Na przykład jeżeli mamy listę z cenami w PLN i chcielibyśmy je przeliczyć na EUR. Bez użycia pętli trzeba przeliczyć każdy element listy „ręcznie”:
przelicznik = 0.22
# podajemy ceny w PLN
ceny = [12, 5.5, 18]
# tworzymy pustą tablicę na nowe ceny
nowe_ceny = []
# przeliczamy każdy element mnożąc przez przelicznik PLN->EUR
nowe_ceny[0] = ceny[0] * przelicznik
nowe_ceny[1] = ceny[1] * przelicznik
nowe_ceny[2] = ceny[2] * przelicznik
print(nowe_ceny)
[2.64, 1.21, 3.96]
Ok, ceny przeliczone, wszystko się zgadza. A co jeśli mamy hurtownię i będziemy mieli 10, 100, 100000 cen do przeliczenia?
Pętla for
Pierwszym z typów pętli jest pętla for
– świetnie nadaje się ona do obrabiania list i innych typów danych o z góry określonym rozmiarze. Jak na przykład lista z wcześniejszego akapitu:
przelicznik = 0.22
ceny = [12, 5.5, 18]
# tworzymy pustą tablicę na nowe ceny
nowe_ceny = []
for x in ceny:
nowe_ceny.append(x * przelicznik)
print(nowe_ceny)
[2.64, 1.21, 3.96]
Czyli przechodzimy od pierwszego elementu przez całą listę ceny, aktualny element umieszczamy w zmiennej x i wykonujemy z nim instrukcje do końca bloku (pamiętajmy, że w Pythonie decydują o tym wcięcia, nie ma średników i nawiasów klamrowych – działanie for
kończy się razem z wcięciem 🙂
Powyższy for
możemy rozpisać tak:
- weź pierwszy element ceny i zapisz go w x (teraz x = 12)
- Dodaj cenę pomnożoną przez przelicznik (x * przelicznik) do listy nowe_ceny (teraz nowe_ceny[0] = 12 * 0.22)
- jeżeli jest kolejny element na liście to znowu zapisz go w x (teraz x = 5.5)
- Dodaj cenę pomnożoną przez przelicznik (x * przelicznik) do listy nowe_ceny (teraz nowe_ceny[1] = 5.5 * 0.22)
- jeżeli jest kolejny element na liście to znowu zapisz go w x (teraz x = 18)
- Dodaj cenę pomnożoną przez przelicznik (x * przelicznik) do listy nowe_ceny (teraz nowe_ceny[2] = 18 * 0.22)
- jeżeli jest kolejny element na liście to znowu zapisz go w x – nie ma kolejnego elementu, kończymy pętlę.
Range – jeżeli chcielibyśmy wykonać coś po prostu x razy
Listy listami – a co jeżeli chcielibyśmy na przykład zapytać użytkownika o 3 liczby? Z pomocą przychodzi funkcja range()
, która zwraca nam kolejne liczby z zadanego przedziału. Przy czym można ją wywołać na dwa sposoby:
range(x)
– zwróci nam liczby od 0 do x-1range(x, y)
– zwróci nam liczby od x do y-1range(x, y, z)
– zwróci nam liczby od x do y-1 z odstępem z
Przykłady:
# range(x) z jednym parametrem
for liczba in range(5):
print(liczba)
0
1
2
3
4
# range(x,y)
for liczba in range(5,11):
print(liczba)
5
6
7
8
9
10
# range(x,y,z)
for liczba in range(5,20,3):
print(liczba)
5
8
11
14
17
A czy range()
może zwrócić listę w odwróconej kolejności? Może – dalej jest to od-do, ale trzeci parametr podajemy ujemny:
for liczba in range(10,0,-2):
print(liczba)
10
8
6
4
2
Oprócz odliczania możemy na przykład użyć tej pętli do pobrania od użytkownika określonej liczby danych. Przy okazji jest sposobność użycia wiedzy zdobytej w poprzednich rozdziałach – dodaję stosowne przypomnienia w komenatrzach:
# tworzymy pustą listę na imiona
imiona = []
print("Podaj 3 imiona:")
# tworzymy pętlę - 3 razy zapytamy o kolejne imię - range(3) daje nam 0, 1, 2
for nr_imienia in range(3):
# do listy imiona dodajemy wynik funkcji input (a ta przy zapytaniu
# wyświetla podaną kombinację imienia oraz aktualnego numeru
imiona.append(input("Imię " + str(nr_imienia) + ": "))
# wyświetlamy wypełnioną listę
print(imiona)
Podaj 3 imiona:
Imię 0: Zenek
Imię 1: Aldona
Imię 2: Karyna
['Zenek', 'Aldona', 'Karyna']
Pętla while
Innym typem pętli w Pythonie jest pętla while
– od for
różni się tym, że nie musimy znać ilości powtórzeń. Instrukcje w niej zawarte będą się wykonywały dopóki będzie spełniony określony przez nas warunek podany zaraz po instrukcji (lub zostanie przerwana za pomocą break
– o czym napiszę dalej):
Przykład 1 – wykonuj pętlę tak długo jak wynik porównania będzie prawdziwy:
a = 0
# powtarzaj pętlę dopóki a jest mniejsze od 5 (a < 5 daje True jeżeli prawdziwe)
while a < 5:
print(a)
a = a + 1
0
1
2
3
4
Przykład 2 – wykonuj pętlę dopóki zmienna petla_aktywna jest True:
petla_aktywna = True
licznik = 0
while petla_aktywna:
if licznik >= 5:
petla_aktywna = False
else:
print(licznik)
licznik = licznik + 1
0
1
2
3
4
Break i continue
Tymi instrukcjami możemy modyfikować bieg pętli:
break
– przerywa pętlę całkowicie (pętlę, nie cały program – instrukcje znajdujące się po pętli zostaną wykonane)continue
– przerywa aktualny przebieg pętli i zaczyna kolejną (jeżeli aktualna nie była ostatnią)
Przykład zastosowania obu powyższych instrukcji:
imiona = []
imie = ''
print('Podaj imiona (napisz koniec, żeby przerwać:')
while imie != 'koniec':
imie = input('Imię: ')
# jeżeli imię = koniec, to wywołujemy instrukcję break
# i wychodzimy z pętli
if imie == 'koniec':
break
# jeżeli chcemy przerwać tylko aktualną pętlę
# i zacząć kolejną od nowa - używamy continue
if imie == 'Juzef':
print('Serio? Podaj poprawne')
continue
imiona.append(imie)
print(imiona)
Program będzie pytał o imię dopóki użytkownik nie wpisze koniec – jeżeli tak się stanie – pętla zostanie przerwana za pomocą komendy break
, a program będzie kontynuowany od miejsca za pętlą (wiersz 16 kodu (a nawet 17:)).
Drugą modyfikacją biegu pętli będzie prośba o poprawienie błędnie wpisanego imienia Józef. Jeżeli użytkownik wpisze przez u zamiast ó – zostanie wyświetlona prośba o poprawkę i program po komendzie continue
wróci do początku pętli:
Podaj imiona (napisz koniec, żeby przerwać:
Imię: Heniek
Imię: Zenek
Imię: Juzef
Serio? Podaj poprawne
Imię: Józef
Imię: koniec
['Heniek', 'Zenek', 'Józef']
Tak dla całkowitej jasności obrazkiem się posłużę – niebieskie linie pokazują dokąd zaprowadzą na break
i continue
. Zieloną linią otoczyłem ciało pętli.

Instrukcji tych możemy używać w obu rodzajach pętli.
Pass
Instrukcja, która właściwie nic nie robi. Bardziej jako ciekawostkę umieszczam – czasami jest tak, że coś musimy w kodzie umieścić zanim napiszemy następną instrukcję. Na przykład chcemy zadeklarować pustą pętlę – taką na przyszłość, żeby wiedzieć gdzie ją chcemy mieć, chociaż jej kodu jeszcze nie napisaliśmy. W C++ czy Javie można było wstawić po prostu { } i po temacie, ale nie w Pythonie:)
Jeżeli napiszemy pierwszy wiersz pętli i nie będzie pod nią żadnej instrukcji – Python zwróci nam błąd. Ale jak pod spodem damy samo pass
– program się uruchomi choć nic się w tej pętli nie zadzieje.
Pętle zagnieżdżone
Tak jest – pętle można zagnieżdżać. Przydaje się to na przykład przy pracy z dwuwymiarowymi listami.
Tutaj mamy dwuwymiarową listę – liczby są zapisane parami, a my wyłuskamy z niej pojedyncze elementy:
lista = [[1,2],[3,4],[5,6],[7,8],[9,0]]
print("Przed wyłuskaniem:")
print(lista)
print("Po wyłuskaniu:")
for x in lista:
for y in x:
print(y)
Przed wyłuskaniem:
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
Po wyłuskaniu:
1
2
3
4
5
6
7
8
9
0
Pythonotka z tego odcinka:

Fiu fiu, ale się napisałem dzisiaj. Mam nadzieję, że wszystkie najważniejsze informacje dotyczące pętli w Pythonie zamieściłem. A jak nie zamieściłem, to z pewnością zrobię aktualizację:)