rrogacz.pl
ikony programów
Python pętle

Pętla while

Pętla while w Python działa na takiej samej zasadzie jak w języku C++. Pętla ta powtarza instrukcje należące do jej bloku, tak długo, jak długo prawdziwy jest warunek (warunki) do niej przyporządkowany. Tworząc pętle while: musisz zadbać, aby liczba jej wywołań była skończona.

Struktura pętli while:

while warunek:
    instrukcja_1_bloku_while
    instrukcja_2_bloku_while
    instrukcja_3_bloku_while
    .....

Przykład 1

Napisz program, który wyświetli 20 kolejnych dodatnich liczb całkowitych.

x = 1
while x <= 20: # dopóki warunek będzie prawdziwy, powtórz poniższe instrukcje
    print(x)   # wypisz wartość zmiennej x
    x+=1       # zwiększ wartość zmiennej x o 1

Przykład 2

Wyznacz sumę cyfr podanej liczby naturalnej.

suma = 0
liczba = int(input("Podaj liczbę: "))
while liczba > 0:
    suma += liczba % 10 # podaj ostatnią cyfrę
    liczba //= 10       # usuń ostatnią cyfrę
print(suma)             # wypisz sumę cyfr liczby x

Przykład 3

Wypisz liczby podzielne przez 3, których reszta z dzielenia przez 7 wynosi 2 w zakresie <0..200>

liczba = 0
while liczba <=200:
    if liczba % 3 == 0 and liczba % 7 == 2:
        print(liczba)
    liczba+=1

Pętla while - else

Podobnie jak w instrukcji warunkowej, możemy zastosować alternatywę dla sytuacji, gdy warunek będzie fałszywy. Zasada działania samej pętli while jest taka sama jak w przypadku bez else.

Struktura pętli while else:

while warunek:
    instrukcja_1_bloku_while
    instrukcja_2_bloku_while
    instrukcja_3_bloku_while
    .....
else:
    intrukcja_1_dla_bloku_else
    intrukcja_2_dla_bloku_else
    intrukcja_3_dla_bloku_else
    .....

Przykład 4

Napisz program, który dla danego przedział [a..b] wypisze liczby naprzemiennie: a, b, a+1, b-1, ... np. dla przedziału [4..10] program powinien wypisać: 4 10 5 9 6 8 7.

a = int(input("Podaj początek przedziału: "))
b = int(input("Podaj koniec przedziału: "))
while a < b:
    print(a)
    print(b)
    a += 1
    b -= 1
else:
    if a == b:
        print(a)

Pętla for

Pętla for w języku Python, powtarza blok instrukcji określoną ilość razy. Podczas jej tworzenia, możemy określić ile razy ma się ona wykonać oraz co jaką wartość ma się zmieniać licznik.

Licznik pętli jest zmienną, która steruje pętlą.

Konstrukcja pętli for wygląda następująco:

for bierzacy_element in zbiór:
    instrukcja_1_pętli_for
    instrukcja_2_pętli_for
    instrukcja_3_pętli_for
    ....

Przykład 5

Wypisz wszystkie liczby naturalne w porządku rosnącym z przedziału [0..10].

for i in range(11):
    print(i)
Wyjście
0
1
2
3
4
5
6
7
8
9
10

Wyjaśnienie.

Funkcja range(n) zwraca kolejne liczby całkowite z przedziału [0..n-1] (od zera do n - 1).

Przykład 6

Wypisz wszystkie liczby naturalne w porządku rosnącym z przedziału [2..10].

for i in range(2, 11):
    print(i)
Wyjście
2
3
4
5
6
7
8
9
10

Wyjaśnienie.

Funkcja range(a, b) zwraca kolejne liczby całkowite z przedziału [a..b-1].

Przykład 7

Wypisz wszystkie liczby naturalne parzyste w porządku rosnącym z przedziału [4..12].

for i in range(2, 13, 2):
    print(i)
Wyjście
2
4
6
8
10
12

Wyjaśnienie.

Funkcja range(a, b, progres) zwraca rosnący zbiór liczb całkowitych z przedziału [a, b - 1], począwszy od liczby a, a każda następna jest o progres większa (mniejsza) od poprzedniej.

Przykład 8

Wypisz wszystkie elementy listy: ["Adam", "Iwona", "Kamila", "Marcin"].

lista = ["Adam", "Iwona", "Kamila", "Marcin"]
for imie in lista:
    print(imie)
Wyjście
Adam
Iwona
Kamila
Marcin

Instrukcja break

Wywołanie instrukcji break w pętli while lub for spowoduje natychmiastowe jej przerwanie.

Przykład 9

Napisz program, który wypisze wszystkie naturalne dzielniki podanej liczby naturalnej dodatniej.

x = int(input("Podaj liczbę: "))
for i in range(1, x):
    if i > x//2: # jeśli przekroczymy wartość połowy liczby x, to nie ma co dalej szukać
        break
    if x % i == 0:
        print(i)
print(x)
Przykładowe wejście/wyjście
Podaj liczbę: 45
1
3
5
9
15
45

Instrukcja continue

Wywołanie instrukcji continue w pętli while lub for spowoduje ponowienie działania pętli, pomijając instrukcje należące do bloku pętli, znajdujące się poniżej instrukcji continue.

Przykład 10

Napisz program, który wypisze wszystkie całkowite nieparzyste liczby z przedziału [a..b].

a = int(input("Podaj początek przedziału: "))
b = int(input("Podaj koniec przedziału: "))

for i in range(a, b+1):
    if i % 2 == 0: # jeśli liczba jest parzysta to uruchamiamy kolejną iterację pętli
        continue
    print(i)
Przykładowe wejście/wyjście
Podaj początek przedziału: 3
Podaj koniec przedziału: 10
3
5
7
9

zadania

  1. Wyświetl na ekranie 10 kolejnych parzystych liczb całkowitych począwszy od 2.
    Uwaga: Aby wyświetlić wartości i jednym wierszu w instrukcji print należy dodać element end="znak" co spowoduje wyświetlanie zmiennych w jednym wierszu oddzielonych podanym znakiem.
    Zastosowanie pętli while
    i=2
    n=1
    while n<=10:
        print(i, end=" ")
        i+=2
        n+=1
    -----------------------------------------	
    wynik:
    2 4 6 8 10 12 14 16 18 20
    Zastosowanie pętli for
    i=2
    for n in range(10):
        print(i, end=" ")
        i+=2
    -----------------------------------------	
    wynik:
    2 4 6 8 10 12 14 16 18 20
  2. Napisz program, który wyświetli malejąco liczby od zadanej przez użytkownika do zera.
    Liczby oddzielone są przecinkiem i spacją.
    Po zerze nie ma przecinka. Np. Dla n=5 otrzymujemy: 5, 4, 3, 2, 1, 0
    n = int(input("Zaczynamy od n="))
    for i in range(n, -1, -1):
        if i > 0:
            print(i, end=", ")
        else:
            print(i)
    -----------------------------------------	
    wynik:
    Zaczynamy od n=12
    12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
    
  3. Program wyświetla 5 liczb nieparzystych począwszy od wartości podanej przez użytkownika. Program sprawdza, czy użytkownik wprowadził liczbę nieparzystą, jeśli nie rozpoczyna od liczby następnej.
    n = int(input("Podaj wartość początkową: "))
    if n % 2 == 0:
        n+=1
    for i in range(5):
        print(n)
        n+=2
    -----------------------------------------	
    wynik:
    Podaj wartość początkową: 4
    5
    7
    9
    11
    13
    
  4. Podaj wyniki mnożenia liczb w zakresie 4x4
    for i in range(1,5):
        for j in range(1,5):
            print(i,"*",j,"=",i*j)
    -----------------------------------------	
    wynik:
    1 * 1 = 1
    1 * 2 = 2
    1 * 3 = 3
    1 * 4 = 4
    2 * 1 = 2
    2 * 2 = 4
    2 * 3 = 6
    2 * 4 = 8
    3 * 1 = 3
    3 * 2 = 6
    3 * 3 = 9
    3 * 4 = 12
    4 * 1 = 4
    4 * 2 = 8
    4 * 3 = 12
    4 * 4 = 16
    	
    
  5. Oblicz ilość cegieł w piramidzie o podstawie 10 x 10 cegieł
    suma=0
    for i in range(1,11):
        suma += i*i
    print("Ilość cegieł wynosi: ", suma)
    -----------------------------------------	
    wynik:
    Ilość cegieł wynosi:  385
    
    
  6. Pracownik przez X miesięcy odkłada co miesiąc Y zł.
    W każdym miesiącu z całej odłożonej na tą chwilę kwoty uzyskuje 8% odsetek.
    Jaką kwotę zgromadzi pracownik ?
    Dane podaje użytkownik.
    x = int(input("Podaj ilość miesięcy: "))
    y = int(input("Podaj kwotę: "))
    kwota = 0
    for m in range(x):
        kwota += y
        kwota += kwota*0.08
    print("Zgromadzone środki: ", round(kwota, 2))
    -----------------------------------------	
    wynik:
    Podaj ilość miesięcy: 1
    Podaj kwotę: 100
    Zgromadzone środki:  108.0
    
    Podaj ilość miesięcy: 2
    Podaj kwotę: 100
    Zgromadzone środki:  224.64
    
    Podaj ilość miesięcy: 3
    Podaj kwotę: 100
    Zgromadzone środki:  350.61
    
    
  7. Oblicz ilość cegieł w ścianie o podstawie X cegieł, wysokości Y rzędów cegieł, gdzie każdy kolejny stawiany rząd cegieł jest o Z cegieł krótszy od poprzedniego (niższego).
    Przykładowo:
    Dla x=5, y=4, z=2 - kolejne warstwy (od dołu) mają odpowiednio: 5, 3, 1 (czwartej warstwy już nie ma) zatem ilość cegieł wynosi 9.
    Ale dla x=5, y=2, z=2 ilość cegieł wynosi 8.
    x = int(input("Podaj ilość cegieł w podstawie: "))
    y = int(input("Podaj wysokość ściany: "))
    z = int(input("Podaj o ile cegieł mniej jest w kolejnej warstwie: "))
    
    suma = 0
    while x > 0 and y > 0:
        suma += x
        x -= z
        y -= 1
    print("Ilość cegieł ścianie wynosi: ", suma)
    -----------------------------------------	
    wynik:
    Podaj ilość cegieł w podstawie: 5
    Podaj wysokość ściany: 4
    Podaj o ile cegieł mniej jest w kolejnej warstwie: 2
    Ilość cegieł ścianie wynosi:  9
    
    Podaj ilość cegieł w podstawie: 5
    Podaj wysokość ściany: 2
    Podaj o ile cegieł mniej jest w kolejnej warstwie: 2
    Ilość cegieł ścianie wynosi:  8
    	
    
  8. Algorytm oblicza silnię wprowadzonej przez użytkownika liczby.
    silnia(n) = 1•2•3•...•n.
    silnia(0) = 1
    n = int(input("Podaj wartość n: "))
    wynik = 1
    if n > 1:
        for i in range(2, n+1):
            wynik *= i
    print("Silna ", n, " wynosi ", wynik)
    -----------------------------------------	
    wynik:
    Podaj wartość n: 0
    Silna  0  wynosi  1
    
    Podaj wartość n: 2
    Silna  2  wynosi  2
    
    Podaj wartość n: 3
    Silna  3  wynosi  6
    
    Podaj wartość n: 5
    Silna  5  wynosi  120
    	
    
  9. Utwórz figurę przedstawioną na rysunku poniżej.
    Ilość wierszy i kolumn jest jednakowa, podaję ją użytkownik.
    Przykład dla n=10
        ----------
        |oooooooo|
        |oooooooo|
        |oooooooo|
        |oooooooo|
        |oooooooo|
        |oooooooo|
        |oooooooo|
        |oooooooo|
        ----------	
    n = int(input("Podaj n="))
    
    for i in range(n):
        for j in range(n):
            if i == 0 or i == n-1:
                print("-", end="")
            else:
                if j == 0 or j == n-1:
                    print("|", end="")
                else:
                    print("o", end="")
        print("")
    -----------------------------------------	
    wynik:
    Podaj n=5
    -----
    |ooo|
    |ooo|
    |ooo|
    -----
    
    	
    
  10. Napisz program, który sprawdzi, czy podana liczba może należeć do zbioru liczb z zadanego systemu.
    Np. liczba 374533 może należeć do zbioru liczb ósemkowych i wyższych, ale już do siódemkowych i niższych nie gdyż występuje tu cyfa 7, która nie należy do tego zbioru.
    Zakładamy zakres zbiorów od dwójkowych do dziewiątkowych.
    liczba = int(input("Podaj liczbę: "))
    system = int(input("Podaj system liczbowy: "))
    
    print("Liczba", liczba, end="")
    while liczba > 0:
        cyfra = liczba % 10
        if cyfra >= system:
            print(" nie", end="")
            break
        liczba //= 10
    print(" należy do zbioru liczb", system)
    -----------------------------------------	
    wynik:
    Podaj liczbę: 345723
    Podaj system liczbowy: 7
    Liczba 345723 nie należy do zbioru liczb 7
    
    Podaj liczbę: 317414775
    Podaj system liczbowy: 8
    Liczba 317414775 należy do zbioru liczb 8
    	
    
  11. Wyświetl 10 liczb podzielnych przez k zaczynając od n.
    Wartości k oraz n wprowadza użytkownik (prompt).
    przykład:
        Wartości początkowe: n=3, k=4
    
        Liczby podzielne przez 4 zaczynamy od 3
        1. liczba 4
        2. liczba 8
        3. liczba 12
        4. liczba 16
        5. liczba 20
        6. liczba 24
        7. liczba 28
        8. liczba 32
        9. liczba 36
        10. liczba 40	
    
    n = int(input("Zaczynamy od n="))
    k = int(input("Liczby podzielne przez k="))
    nstart = n #zapamiętujemy wartość początkową
    
    if n % k != 0:
        n = n + (k - n % k) # obliczamy wartość początkową
    
    print("Liczby podzielne przez", k, " zaczynamy od", nstart)  
    for i in range(10):
        print(i+1,". liczba",n)
        n += k  
    -----------------------------------------	
    wynik:
    Zaczynamy od n=5
    Liczby podzielne przez k=4
    Liczby podzielne przez 4  zaczynamy od 5
    1 . liczba 8
    2 . liczba 12
    3 . liczba 16
    4 . liczba 20
    5 . liczba 24
    6 . liczba 28
    7 . liczba 32
    8 . liczba 36
    9 . liczba 40
    10 . liczba 44
    	
    
Projekt i wykonanie: Ryszard Rogacz© 1999−2025