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
17A 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
2Opró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 + 10
1
2
3
4Przykł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 + 10
1
2
3
4Break 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
0Pythonotka 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ę:)



Opublikuj komentarz