PYTHON

PYTHON Pętle zagnieżdżone

Pętle zagnieżdżone to takie, gdzie wewnątrz jednej pętli znajduje się kolejna. Pętle zagnieżdżać można dowolnie – wewnątrz pętli while może znajdować się zarówno pętla while, jak i for, podobnie z pętlą for.

Prześledźmy to na prostym przykładzie:

x = 3
y = 4
z = y
while x > 0 :
    while z > 0 :
        print(x,"|",z)
        z = z - 1
    z = y
    x = x - 1

Wnętrze zewnętrznej pętli while oddalone jest od lewej strony na 1 tabulator, wewnętrznej na 2 tabulatory.

Zewnętrzna pętla operuje na zmiennej x, która początkowo ma wartość 3, następnie z każdym obiegiem jest mniejsza o 1, aż do osiągnięcia wartości 1.

Wewnętrzna pętla operuje na zmiennej z, która za początkową wartość przyjmuje wartość y, czyli 4, w każdym obiegu pętli zmniejsza się o 1, aż do 1.

Wypisanie na ekran następuje w wewnętrznej pętli, a wypisywane są pary wartości x oraz z.

  1. Następuje pierwszy obieg zewnętrznej pętli – wartość x = 3
  2. Rozpoczyna się wewnętrzna pętla, wartość z = 4
  3. Wypisanie na ekran 3 | 4
  4. Kolejny obieg wewnętrznej pętli, wypisanie na ekran 3 | 3
  5. itd…

Efekt:

3 | 4
3 | 3
3 | 2
3 | 1
2 | 4
2 | 3
2 | 2
2 | 1
1 | 4
1 | 3
1 | 2
1 | 1

Przejdźmy do konkretniejszych przykładów – za pomocą zagnieżdżonych pętli while oraz for zrobimy sprawdzenie, czy liczby z zadanego przedziału są liczbami pierwszymi.

Jednak żeby zacząć, musimy opracować program, który sprawdzi nam, czy zadana pojedyncza liczba jest liczbą pierwszą.

while

liczba_do_sprawdzenia = 13
aktualny_dzielnik = 2
czy_pierwsza = True

while aktualny_dzielnik < liczba_do_sprawdzenia :
    if liczba_do_sprawdzenia%aktualny_dzielnik == 0 :
        czy_pierwsza = False
        break
    aktualny_dzielnik += 1
if czy_pierwsza == True :
    print(liczba_do_sprawdzenia,"jest liczbą pierwszą")

Liczba do sprawdzenia: 13, startowy dzielnik: 2,  w każdym obiegu pętli będziemy go zwiększać, aż do uzyskania 12. Jeśli liczba nie podzieli się bez przez żaden z kolejnych dzielników, znaczy, że mamy do czynienia z liczbą pierwszą.

 

Przejdźmy zatem do rozszerzenia naszego programu o sprawdzenie wielu liczb naraz, np. z zakresu 10 – 100:

zakres_od = 10
zakres_do = 100
liczba_do_sprawdzenia = zakres_od

while liczba_do_sprawdzenia <= zakres_do :
    aktualny_dzielnik = 2
    czy_pierwsza = True
    
    while aktualny_dzielnik < liczba_do_sprawdzenia :
        if liczba_do_sprawdzenia%aktualny_dzielnik == 0 :
            czy_pierwsza = False
            break
        aktualny_dzielnik += 1
    if czy_pierwsza == True :
        print(liczba_do_sprawdzenia,"jest liczbą pierwszą")
    liczba_do_sprawdzenia += 1

Do poprzedniej wersji programu dodaliśmy zakres od i zakres do, natomiast aktualną liczbę do sprawdzenia ustawiliśmy na tę samą wartość co zakres od. Pętla zewnętrzna przechodzi kolejno po liczbach z zakresu, pętla wewnętrzna sprawdza czy liczba jest liczbą pierwszą.

 

for

Wersja dla pojedynczej wartości:

liczba_do_sprawdzenia = 13
startowy_dzielnik = 2
czy_pierwsza = True

for aktualny_dzielnik in range(startowy_dzielnik,liczba_do_sprawdzenia) :
    if liczba_do_sprawdzenia%aktualny_dzielnik == 0 :
        czy_pierwsza = False
        break
if czy_pierwsza == True :
    print(liczba_do_sprawdzenia,"jest liczbą pierwszą")

Oraz dla liczb z zakresu:

zakres_od = 10
zakres_do = 100
liczba_do_sprawdzenia = zakres_od

for liczba_do_sprawdzenia in range(zakres_od,zakres_do+1) :
    startowy_dzielnik = 2
    czy_pierwsza = True

    for aktualny_dzielnik in range(startowy_dzielnik,liczba_do_sprawdzenia) :
        if liczba_do_sprawdzenia%aktualny_dzielnik == 0 :
            czy_pierwsza = False
            break
    if czy_pierwsza == True :
        print(liczba_do_sprawdzenia,"jest liczbą pierwszą")