Python pętle - Avendi
Szybki kontakt




W programowaniu pętla to sekwencja instrukcji, która jest powtarzana:

  • aż do osiągnięcia przez program określonego warunku np. program może prosić użytkownika o podanie hasła wyświetlając napis „Podaj hasło”. Napis będzie wyświetlany dotąd, aż użytkownik poda odpowiednie hasło.
  • określoną ilość razy np. program może wyświetlić 3 razy napis „Uwaga”

Rodzaje pętli w Pythonie

Python obsługuje dwa rodzaje pętli:

  • pętla while
  • pętla for

Pętla while

Pętla while służy do wielokrotnego wykonywania bloku instrukcji dotąd, aż warunek zostanie spełniony. Gdy sprawdzany w pętli warunek staje się fałszywy (zostanie spełniony), wykonywana jest linia kodu występująca bezpośrednio po pętli.

Przykład 1
W przykładzie:

  • do zmiennej o nazwie „cyfra” przypisujemy wartość 1
  • tworzymy pętlę while, w której przy każdym obrocie do zmiennej „cyfra” dodajemy jedynkę. Przy każdym obrocie pętli aktualna cyfra zostanie zwiększona o 1, a gdy osiągnie wartość równą 6, pętla przestanie się wykonywać
  • za pomocą funkcji print() znajdującej się w pętli, po każdym obrocie pętli wyświetlamy aktualny wynik
  • bezpośrednio po pętli podana jest druga funkcja print(), za pomocą której wyświetlamy napis „Podaj inną cyfrę”. Funkcja wyświetlająca napis „Podaj inną cyfrę” uruchomi się od razu jak warunek sprawdzany w pętli while stanie się fałszywy.
  • cyfra = 1
    while cyfra < 6:
        print('Bieżąca cyfra wynosi:', cyfra)
        cyfra = cyfra + 1
    print('Podaj inną cyfrę')
    
    wynik:
    Bieżąca cyfra wynosi: 1
    Bieżąca cyfra wynosi: 2
    Bieżąca cyfra wynosi: 3
    Bieżąca cyfra wynosi: 4
    Bieżąca cyfra wynosi: 5
    Podaj inną cyfrę
    

    Poniżej opis poszczególnych fragmentów podanego w przykładzie kodu:

    Python pętla while

Blok while możemy umieścić w jednym wierszu rozdzielając składowe średnikami:

Przykład 2

cyfra = 1
while cyfra < 6: print('Bieżąca cyfra wynosi:', cyfra); cyfra = cyfra + 1

Pętla while z instrukcją else

Za blokiem kodu zawierającym pętlę możemy użyć instrukcji „else”. Jeśli jej użyjemy, w momencie gdy warunek w pętli while staje się fałszywy wykonywana jest klauzula znajdująca się w instrukcji „else”. Wykona się ona zawsze jeśli z pętli nie wyskoczymy przez break lub return.

Przykład 3
W poniższym przykładzie, przy każdym obrocie pętli za pomocą funkcji print() drukowany jest napis „Bieżąca cyfra wynosi:” i podawana jest wartość cyfry zwiększona w pętli o 1. W momencie gdy cyfra osiągnie wartość 6, warunek zawarty w pętli, że ma być ona mniejsza od 6, staje się fałszywy. Program zaczyna wykonywać instrukcję „else” i za pomocą funkcji print() drukuje napis „Cyfra równa się” oraz podaje wartość 6. Dopiero po wykonaniu instrukcji „else” wykonuje się instrukcja znajdująca się poza pętlą i za pomocą kolejnej funkcji print() drukowany jest napis „Podaj inną cyfrę”.

cyfra = 1
while cyfra < 6:
    print('Bieżąca cyfra wynosi:', cyfra)
    cyfra = cyfra + 1
else:
    print('Cyfra równa się', cyfra)
print('Podaj inną cyfrę')

wynik:
Bieżąca cyfra wynosi: 1
Bieżąca cyfra wynosi: 2
Bieżąca cyfra wynosi: 3
Bieżąca cyfra wynosi: 4
Bieżąca cyfra wynosi: 5
Cyfra równa się 6
Podaj inną cyfrę

Pętla for

Pętla for służy w Pythonie do iteracji po sekwencji (np. lista, krotka tuple, łańcuch string) lub innych iterowalnych obiektach. Iteracja to powtarzanie tej samej operacji w pętli określoną liczbę razy lub aż do momentu, gdy spełniony zostanie określony warunek.

Za pomocą pętli for możemy wykonać daną instrukcje określoną liczbę razy.

Użycie pętli for z obiektem typu lista

Przykład 4
W przykładzie:

  • do zmiennej o nazwie „owoce” przypisujemy listę owoców
  • używamy pętli for do iteracji po liście „owoce”
  • tworzymy zmienną o nazwie „owoc” w pętli. Pętla przechodzi po liście owoców zawartych w zmiennej „owoce”. Za każdym obrotem uruchamia funkcję print(), za pomocą której drukuje stały napis „Uczeń zjadł:” i przypisuje do tego napisu jeden owoc.
  • owoce = ["jabłko", "gruszkę", "banany"] 
    for owoc in owoce: 
        print("Uczeń zjadł:", owoc) 
    
    wynik:
    Uczeń zjadł: jabłko
    Uczeń zjadł: gruszkę
    Uczeń zjadł: banany
    

Przykład 5
W przykładzie:

  • do zmiennej Suma_sprzedaży przypisujemy wartość zero
  • do zmiennej Sprzedaż przypisujemy listę z wartościami sprzedaży
  • w pętli for do zmiennej Suma_sprzedaży dodajemy wartości znajdujące się na liście.
  • Suma_sprzedaży = 0
    for Sprzedaż in [100.50, 200.00, 300.00]: 
         Suma_sprzedaży += Sprzedaż
         print('Sprzedaż narastająco', Suma_sprzedaży)
    print("Poprawić sprzedaż")
    
    wynik:
    Sprzedaż narastająco 100.5
    Sprzedaż narastająco 300.5
    Sprzedaż narastająco 600.5
    Poprawić sprzedaż
    

    Poniżej opisane są poszczególne fragmenty podanego w przykładzie kodu:

    Python pętla for

Szczegółowe informacje dotyczące list znajdziesz w artykule Python lista

Użycie pętli for z obiektem typu krotka (tuple)

Obiektu krotka używamy, jeśli jakieś elementy są w programie na stałe np. pory roku, miesiące, dni tygodnia. Szczegółowe informacje dotyczące krotek znajdziesz w artykule Python krotka

Przykład 6
W przykładzie:

  • do zmiennej o nazwie „miesiące” przypisujemy listę miesięcy
  • używamy pętli for do iteracji po zmiennej „miesiące”
  • tworzymy zmienną o nazwie „miesiąc” w pętli. Pętla przechodzi po liście miesięcy zawartych w zmiennej „miesiące”. Za każdym obrotem uruchamia funkcję print(), za pomocą której drukuje stały napis „Przychody firmy w:” i przypisuje do tego napisu jeden miesiąc.
  • miesiące = ("styczeń", "luty", "marzec", "kwiecień",
                "maj","czerwiec", "lipiec", "sierpień",
                "wrzesień", "październik", "listopad","grudzień") 
    for miesiąc in miesiące: 
        print("Przychody firmy w:", miesiąc) 
    

    wynik:
    Przychody firmy w: styczeń
    Przychody firmy w: luty
    Przychody firmy w: marzec
    Przychody firmy w: kwiecień
    Przychody firmy w: maj
    Przychody firmy w: czerwiec
    Przychody firmy w: lipiec
    Przychody firmy w: sierpień
    Przychody firmy w: wrzesień
    Przychody firmy w: październik
    Przychody firmy w: listopad
    Przychody firmy w: grudzień

Przykład 7
Aby wydrukować np. tylko miesiące z drugiego kwartału użyjemy opcji wykrajania (ang. slicing) z tekstów przy użyciu indeksów. W przykładzie wybieramy z tuple miesiące kwiecień, maj, czerwiec. Wpisujemy od 3 do 6 gdyż w Pythonie indeksowanie zaczyna się od zera. Styczeń ma indeks zero a kwiecień indeks 3.

miesiące = ("styczeń", "luty", "marzec", "kwiecień",
            "maj","czerwiec", "lipiec", "sierpień",
            "wrzesień", "październik", "listopad","grudzień") 
for miesiąc in miesiące[3:6]: 
    print("Przychody firmy w:", miesiąc) 

wynik:
Przychody firmy w: kwiecień
Przychody firmy w: maj
Przychody firmy w: czerwiec

Użycie pętli for z obiektem typu tekst (string)

Przykład 8
W przykładzie do zmiennej „słowo” przypisujemy słowo „Banana”. Następnie tworzymy pętlę, która iteruje się po słowie „Banana” i za każdym obrotem drukuje jedną literę używając funkcji print().

słowo = "Banana"
for litery in słowo : 
    print(litery) 

wynik:
B
a
n
a
n
a

Przykład 9
W przykładzie:

  • za pomocą funkcji input() prosimy użytkownika o podanie jakiegoś słowa
  • za pomocą funkcji print() wyświetlamy napis „Oto poszczególne litery Twojego słowa:”
  • za pomocą pętli for i funkcji print() drukujemy listę liter zawartych w podanym przez użytkownika słowie
  • word = input("Wprowadź jakieś słowo:")
    print("Oto poszczególne litery Twojego słowa:")
    for letter in word:
        print(letter)
    

Przykład 10
W przykładzie:

  • do zmiennej „adres” przypisujemy adres
  • tworzymy pętlę i umieszczamy w niej funkcję isnumeric(). Przy każdym obrocie pętli, program sprawdzi, czy znak w kodzie pocztowym jest liczbą. Jeśli znak będzie liczbą zostanie wydrukowany za pomocą funkcji print().
  • adres = "Warszawa 00-222"
    for kod in adres:
        if kod.isnumeric():
            print(kod)
    
    wynik:
    0
    0
    2
    2
    2
    

    Aby wydrukować kod pocztowy w jednej linii do funkcji print() dodajemy parametr „end”. Parametr ten przyjmuje domyślną wartość nowej linii. W przykładzie domyślny znak nowej linii nadpisujemy spacją.

    adres = "Warszawa 00-222"
    for kod in adres:
        if kod.isnumeric():
            print(kod, end = " ") 
    
    wynik:
    0 0 2 2 2 
    

Użycie pętli for z obiektem typu słownik (dictionary)

Przykład 11
W przykładzie tworzymy obiekt typu słownik i przypisujemy do niego państwa oraz ich stolice. Następnie za pomocą pętli i zawartej w niej funkcji print() drukujemy miasta wraz z ich stolicami.

stolice = {}
stolice['Polska'] = 'Warszawa'
stolice['Niemcy'] = 'Berlin'
stolice['Austria'] = 'Wiedeń'
for kraj in stolice:
    print(kraj)

wynik:
Polska
Niemcy
Austria

Użycie pętli for z funkcją range()

Funkcja range() zwraca szczególny typ obiektu jakim jest generator. Generator tworzy liczby całkowite. Po utworzeniu generatora możemy wykorzystać go w pętli.

Funkcja range() posiada 3 argumenty: wartość początkowa, wartość końcowa, krok o jaki zmienia się wartość z każdym obrotem pętli. Jeśli zmiana następuje co 1, nie musimy podawać trzeciego argumentu.

Przykład 12
W poniższym przykładzie sumujemy liczby od 1 do n włącznie. Jako n ustawiamy liczbę 7. Wartość początkowa (przypisana do zmiennej „suma”) wynosi 0, wartość końcowa (przypisana do zmiennej „n”) wynosi 7, a zmiana następuje co 1.

suma = 0
n = 7
for i in range(1, n + 1):
    suma += i
print(suma)

wynik: 28

Przykład 13
W poniższym przykładzie za pomocą funkcji range() wygenerujemy cyfry 0,2,4 gdyż jako:

  • wartość początkową ustawiamy zero
  • wartość końcową ustawiamy 6
  • krok, o jaki zmienia się wartość ustawiamy na 2
  • Range() generuje sześć cyfr (od zera do piątki). Dlatego szóstka nie pojawia się w wyniku.

    for i in range(0, 6, 2):
        print(i)
    
    #wynik
    0
    2
    4
    

Przykład 14
Aby ustawić kolejność liczb od największych do najmniejszych zmieniamy argumenty w funkcji range() następująco.

for i in range(6, 0, -2):
    print(i)

#wynik
6
4
2

Funkcja range() generuje sześć cyfr (od szóstki do jedynki). Dlatego zero nie pojawia się w wyniku.

Instrukcja break

Za pomocą instrukcji break wychodzimy z najbliższej pętli while lub for.

Przykład 15
W przykładzie:

  • do zmiennej „lista_miast” przypisujemy miasta Kraków, Warszawa, Poznań
  • w pętli for umieszczamy instrukcje break oraz if – pętla zostanie przerwana instrukcją break, jeśli miastem jest Warszawa
  • za pomocą funkcji print() drukujemy wszystkie miasta, które są przed miastem Warszawa. Miasta, które są po Warszawie się nie wydrukują, gdyż po dotarciu pętlą do słowa „Warszawa” wykonywanie pętli zostało przerwane i uruchomiła się funkcja print()
  • lista_miast = ("Kraków", "Warszawa", "Poznań")
    for miasto in lista_miast:
        if miasto == "Warszawa":
           break
        print(miasto)
    

    wynik: Kraków

Przykład 16
W przykładzie:

  • do zmiennej „licznik” przypisujemy wartość zero
  • tworzymy pętlę while i za każdym obrotem pętli zwiększamy licznik o 1
  • kiedy w zmiennej „licznik” pojawi się wartość 3 pętla zostanie przerwana
  • licznik = 0
    while True:
        print(licznik),
        licznik += 1
        if licznik >= 3:
            break
    
    wynik:
    0
    1
    2
    

Instrukcja continue

Za pomocą instrukcji continue przechodzimy do następnego kroku w pętli.

Przykład 17
W przykładzie:

  • do zmiennej „kod” przypisujemy znaki 12F45
  • za pomocą pętli for pobieramy kolejne znaki ze zmiennej „kod” i przypisujemy je do zmiennej „znak”
  • w instrukcji if sprawdzamy warunek, czy pobrany znak jest cyfrą 2. Jeśli jest znakiem 2 pomijamy go i bierzemy kolejny znak ze zmiennej „kod”
  • kod = "12F45"
    for znak in kod:
        if znak == "2":
            continue
        print(znak)
    
    wynik:
    1
    F
    4
    5
    

Przykład 18
W przykładzie:

  • do zmiennej „cel” przypisujemy wartość 1000
  • tworzymy pętlę while, w której przy każdym obrocie do wartości w zmiennej „cel” dodajemy 100. Pętla ma się wykonywać dotąd, aż wartość w zmiennej „cel” osiągnie wysokość 1500
  • w pierwszej instrukcji if sprawdzamy, czy wartość wynosi 1300. Jeśli tak, drukujemy napis „87% celu osiągnięto” i kontynuujemy wykonywanie pętli za pomocą instrukcji „continue”
  • w drugiej instrukcji if sprawdzamy czy cel wynosi 1500. Jeśli tak, przerywamy pętlę
  • cel = 1000
    while cel < 1500:
        cel += 100
        if cel== 1300:
            continue
            print('87% celu osiągnięto')
        if cel == 1500:
            break
    print('Cel osiągnięty:',cel)
    

Pętle zagnieżdżone

Pętla zagnieżdżona jest to pętla, która znajduje się w innej pętli.

Przykład 19
W przykładzie:

  • do zmiennej „kolory” przypisujemy listę kolorów
  • do zmiennej „marki” przypisujemy listę marek samochodów
  • w pierwszej pętli for program wyciąga pierwszy element z kolekcji kolorów tj. kolor czerwony i uruchamia środek pętli, czyli drugą pętlę for, za pomocą której przegląda marki samochodów znajdujących się w zmiennej „marki”
  • w drugiej pętli for znajduje się funkcja print(), za pomocą której drukowany jest kolor i marka
  • kolory = ["czerwony", "czarny"]
    marki = ["Opel", "Mercedes"]
    
    for kolor in kolory:
        for marka in marki:
            print(kolor, marka)
    
    wynik:
    czerwony Opel 
    czerwony Mercedes
    czarny Opel
    czarny Mercedes
    

    W kolejnych obrotach pętli będą wyświetlane (drukowane) następujące informacje:

  • pierwszy obrót: czerwony Opel
  • drugi obrót: czerwony Mercedes
  • trzeci obrót: czarny Opel
  • czwarty obrót: czarny Mercedes

Pętle nieskończone

Jeśli napiszemy program, w którym warunek nigdy nie może zostać spełniony powstanie pętla nieskończona,

while True:
    print("Pętla nieskończona")

Aby przerwać taki program naciśnij klawisze Ctrl-C.

Jeśli informacje z artykułu były dla Ciebie przydatne, napisz o tym w komentarzu i udostępnij artykuł. Otrzymasz od nas mailem 5 zadań z rozwiązaniami, na których będziesz mógł przećwiczyć pętle.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.