You are on page 1of 17

Pętle w Pythonie: while

1 while <warunek>: # test pętli


while 2 blok kodu: wykonanie iteracji
Sprawdzany jest warunek pętli, jeśli jest False,
pętla zostaje zakończona, a sterowanie przeskakuje
do następnej instrukcji w programie (po pętli).
False
Warunek warunek niespełniony
Jeśli warunek jest True, zestaw instrukcji wewnątrz
wyjście z pętli pętli zostanie wykonany, a następnie przeskoczy na
początek pętli w celu następnej iteracji.
True In[3]:
1 i = 1
2 while i < 3:
blok kodu 3 print(i)
4 i += 1

Out[3]: 1 1
2 2
Wyk. 6: Informatyka Geodezyjna - pętla while 5/22
Przykłady pętli while - pętla nieskończona - while True:

Pętla while ... True: (tzw. pętla nieskończona) wykorzystywana jest w sytuacjach kiedy
nie znamy momentu zakończenia (nie znamy liczby iteracji), np. przy pobieraniu danych
wejściowych w oczekiwaniu na podanie komendy równej warunkowi stopu pętli.
Pętla nieskończona powinna zawierać instrukcje kontrolną break, która przerwie jej
działanie.
1 counter = 0
2 while True: # pętla nieskonczona
3 counter += 1
4 if counter > 10:
5 break

Wyk. 6: Informatyka Geodezyjna - pętla while 6/22


Przykłady pętli while – pętla nieskończona – while True:
In[4]:
1 lista = []
2 print("Podaj liczby całkowite, które chcesz umieścić w liście.")
3 print("Wpisz ’stop’ aby zakończyć")
4 while True:
5 wejscie = input()
6 if wejscie == ’stop’:
7 break
8 lista.append(int(wejscie))
9 print("Twoja lista:" , lista)

Out[4]: 1 3
2 33
3 333
4 stop
5 Twoja lista: [3, 33, 333]

Wyk. 6: Informatyka Geodezyjna - pętla while 7/22


Przykłady pętli while – iteracja po elementach sekwencji

W celu iteracji po elementach sekwencji należy wykorzystać indeksowanie, a liczbę


elementów można srawdzić za pomocą metody len().
In[5]:
1 L = [1, 2, 3, 4]
2 i = 0 # index
3 while i < len(L):
4 print(L[i])
5 i += 1

Out[5]: 1 1
2 2
3 3
4 4

Wyk. 6: Informatyka Geodezyjna - pętla while 8/22


Przykłady pętli while - iteracja po elementach sekwencji

Gdy sekwencja typu lista jest testowana w kontekście boolowskim, to jeśli lista zawiera
elementy otrzymujemy True, a jeśli lista jest pusta otrzymujemy False.
Metoda pop pobiera element i usuwa go z listy, więc po pobraniu wszystkich elementów
lista jest pusta, a jest fałszywe, i pętla się kończy.
In[6]:
1 a = [’foo’, ’bar’, ’baz’]
2 while a:
3 print(a.pop(-1))

Out[6]: 1 baz
2 bar
3 foo

Wyk. 6: Informatyka Geodezyjna - pętla while 9/22


Przykłady pętli while - zbieżność rozwiązania
Iteracje w celu osiągnięcia konwergencji (zbieżność) rozwiązania.
Zbieżność można sprawdzić sprawdzając różnicę między bieżącą wartością z, a jej
poprzednią wartością. Ta różnica to wartość dodawana przy każdej iteracji, czyli f z/df z.
In[7]:
1 n = 9 # max. liczba iteracji
2 z = 4 #
3 fz = z ** 4 - 1 # funkcja f(z)
4 dfz = 4 * z ** 3 # pierwsza pochodna f(z)
5 while n > 0:
6 fz = z ** 4 - 1 # f(z)
7 dfz = 4 * z ** 3 # pierwsza pochodna f(z)
8 z = z - fz / dfz # metoda Newton-Raphson
9 if abs(fz / dfz)<0.25: # koniec: z converged
10 break
11 print(’iter: ’, n, round(z,3), round(fz / dfz,3) )
12 n-=1

Wyk. 6: Informatyka Geodezyjna - pętla while


Out[7]: 10/22
Pętle zagnieżdżone (ang. nested loops)

Zagnieżdżone pętle (ang. nested loops) while w Pythonie, wykorzystywane są jeżeli chcemy
wykonać kilkukrotnie nieznaną liczbę iteracji z różnymi warunkami.
In[8]:
1 i = 2 Out[8]: 1 2 - liczba pierwsza
2 while(i < 10): 2 3 - liczba pierwsza
3 j = 2 3 5 - liczba pierwsza
4 while(j <= (i/j)): 4 7 - liczba pierwsza
5 if not(i % j): 5 11 - liczba pierwsza
6 break 6 13 - liczba pierwsza
7 j = j + 1 7 17 - liczba pierwsza
8 if (j > i/j) : 8 19 - liczba pierwsza
9 print(i, "- liczba pierwsza")
10 i = i + 1

Wyk. 6: Informatyka Geodezyjna - pętla while 11/22


Wyrażenie else dla pętli while

Po pętli while można umieścić instrukcje else. Kod pod instrukcją else wykonywany jest
tylko gdy pętla jest "wyczerpana". Instrukcja else nie wykona się gdy przerwiemy przejścia
instrukcją break lub gdy zostanie zgłoszony wyjątek (ang. exception raised).
In[9]: In[10]:
1 a=3 1 a=3
2 while(a>0): 2 while(a>0):
3 print(a) 3 print(a)
4 a-=1 4 if a<3:
5 else: 5 break
6 print(’0 osiągniete’) 6 a-=1
7 else:
Out: 1 3 8 print(’0 osiągniete’)
2 2
3 1 Out: 1 3
4 0 osiągniete 2 2

Wyk. 6: Informatyka Geodezyjna - pętla while 12/22


Instrukcje kontrolne w pętli while
continue break
Kończy przebieg aktualnej iteracji pętli i Powoduje zakończenie pętli, kod po tej
rozpoczyna kolejną iterację. instrukcji w pętli nie zostanie wykonany.
In[11]: In[12]:
1 counter = 0 1 counter = 0
2 while True: 2 while True:
3 counter += 1 3 counter += 1
4 if counter%2 == 0: 4 if counter > 4:
5 continue 5 break
6 if counter > 6: 6 print(counter)
7 break
8 print(counter)

Wyk. 6: Informatyka Geodezyjna - pętla while 13/22


Instrukcje kontrolne w pętli while
continue break
Kończy przebieg aktualnej iteracji pętli i Powoduje zakończenie pętli, kod po tej
rozpoczyna kolejną iterację. instrukcji w pętli nie zostanie wykonany.
In[13]: In[14]:
1 counter = 0 1 counter = 0
2 while True: 2 while True:
3 counter += 1 3 counter += 1
4 if counter%2 == 0: 4 if counter > 4:
5 continue 5 break
6 if counter > 6: 6 print(counter)
7 break
8 print(counter)
Out: 1 1
2 2
3 5
Wyk. 6: Informatyka Geodezyjna - pętla while 13/22
Instrukcje kontrolne w pętli while
continue break
Kończy przebieg aktualnej iteracji pętli i Powoduje zakończenie pętli, kod po tej
rozpoczyna kolejną iterację. instrukcji w pętli nie zostanie wykonany.
In[15]: In[16]:
1 counter = 0 1 counter = 0
2 while True: 2 while True:
3 counter += 1 3 counter += 1
4 if counter%2 == 0: 4 if counter > 4:
5 continue 5 break
6 if counter > 6: 6 print(counter)
7 break
Out: 1 1
8 print(counter)
2 2
Out: 1 1 3 3
2 2 4 4
3 5
Wyk. 6: Informatyka Geodezyjna - pętla while 13/22
Walrus operator (operator morsa)

Dodano nową składnię i funkcjonalność operatora :=, operator ten jest nazywany
operatorem morsa (ang. walrus operator) ze względu na składniowe podobieństwo do
oczu i kłów morsa. Składnia:
1 NAME := expression

Operator morsa umożliwia przypisanie i zwrócenie wartości w tym samym wyrażeniu. Na


przykład, jeśli chcesz przypisać zmienną i wydrukować jej wartość, zwykle robisz coś
takiego:
Bez operatora morsa: Z operatorem morsa:
In[17]: In[18]:
1 walrus = False 1 print(walrus := True)
2 print(walrus)
Out[18]: 1 True
Out[17]: 1 False

Wyk. 6: Informatyka Geodezyjna - pętla while 14/22


Walrus operator (operator morsa) – przykład
Poniższy kod prosi użytkownika o podanie danych wejściowych, dopóki nie wpisze "quit".
Powtarzamy input() i musimy dodać current() do listy, zanim o to zapytamy:
1 inputs = list()
2 current = input("Write something: ")
3 while current != "quit":
4 inputs.append(current)
5 current = input("Write something: ")

Alternatywa z operatorem morsa:


1 inputs = list()
2 while (current := input("Write something: ")) != "quit":
3 inputs.append(current)

Wyk. 6: Informatyka Geodezyjna - pętla while 16/22


Walrus operator (operator morsa) – przykład
1 inputs = list()
2 current = input("Write something: ")
3 while current != "quit":
4 inputs.append(current)
5 current = input("Write something: ")
1 inputs = list()
2 while True:
3 current = input("Write something: ")
4 if current == "quit":
5 break
6 inputs.append(current)
1 inputs = list()
2 while (current := input("Write something: ")) != "quit":
3 inputs.append(current)

Wyk. 6: Informatyka Geodezyjna - pętla while 17/22


Walrus operator (operator morsa) – użycie
Użycie operatora morsa w pętli:
1 inputs = list()
2 while (current := input("Write something: ")) != "quit":
3 inputs.append(current)

Użycie operatora morsa w instrukcji warunkowej:


1 a = [1, 2, 3, 4]
2 if (n := len(a)) > 3:
3 print(f"List is too long ({n} elements, expected <= 3)")

Wyk. 6: Informatyka Geodezyjna - pętla while 18/22


Pętla do-while w Pythonie - raczej jej odpowiednik

Odpowiednik do-while w Pythonie: do-while w C:


In[19]: In[20]:
1 i = 1 1 int i = 1;
2 while True: 2 do{
3 print(i) 3 printf("%d\n", i);
4 i += 1 4 i = i + 1;
5 if i > 3: 5 } while(i <= 3);
6 break
Out: 1 1
Out: 1 1 2 2
2 2 3 3
3 3

Wyk. 6: Informatyka Geodezyjna - pętla while 19/22


Podsumowanie

Instrukcja break powoduje natychmiastowe wyjście z pętli (znajdziemy się poniżej całej
instrukcji pętli), natomiast continue przeskakuje z powrotem na górę pętli (znajdziemy
się tuż przed kolejnym elementem pobieranym w while ).
Część else w pętlach while zostanie wykonana raz, kiedy pętla się kończy — o ile
kończy się normalnie, bez trafienia na instrukcję break. Instrukcja break powoduje
natychmiastowe wyjście z pętli i pominięcie części else (o ile jest ona w ogóle obecna).
Jeśli można zamiast while należy używać prostych pętli for. Prosta pętla for (na
przykład for x in seq:) jest prawie zawsze łatwiejsza do zapisania w kodzie i szybsza
do wykonania od pętli licznika opartego na while. Ponieważ Python wewnętrznie
obsługuje indeksowanie dla prostego for, czasami pętla taka może być nawet dwa razy
szybsza od odpowiadającej jej pętli while.

Wyk. 6: Informatyka Geodezyjna - pętla while 20/22

You might also like