Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Aktualizacja: 11.09.2024

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Klasa III

Python: pętle

SPIS TREŚCI

Co to jest pętla?

Pętla (ang. loop) jest fragmentem kodu programu, który jest kolejno powtarzany. Komputer rozpoczyna wykonanie pierwszej instrukcji w pętli i kontynuuje kolejno, aż do wykonania ostatniej instrukcji w pętli. Następnie komputer wraca na początek pętli. Takie wykonanie instrukcji nosi nazwę obiegu:

Pętla może wykonywać dowolną liczbę takich obiegów. Dzięki pętlom komputer może wielokrotnie powtarzać wykonywanie określonych instrukcji.


Na początek:  podrozdziału   strony 

Pętla warunkowa while

Wykonywanie obiegów pętli zwykle uzależnione jest od spełnienia pewnego warunku. W przeciwnym razie komputer wykonywałby obiegi w nieskończoność. Pętla o takich własnościach nazywa się pętlą nieskończoną (ang. infinite loop lub endless loop). Pętlą warunkową (ang. conditional loop) jest pętla while. Składnia tej pętli jest następująca:


 
Python
...
while warunek:
    inst_1
    inst_2
    ...
    inst_n
...

warunek : dowolne wyrażenie, które daje w wyniku wartość True/różną od zera lub False/równą zero.
inst_x : instrukcje wewnątrz obiegu pętli.

Działanie jest następujące:

Komputer najpierw oblicza warunek umieszczony za while. Jeśli warunek jest prawdziwy (wartość logiczna True lub dowolna wartość różna od zera), to komputer wykona obieg pętli (instrukcje z odstępem inst_1 ... inst_n), po czym wróci na początek pętli, komputer ponownie wyliczy wartość warunku i  cykl się powtórzy. Jeśli warunek jest fałszywy (wartość logiczna False lub dowolna wartość równa zero), to komputer nie wykona obiegu, lecz przejdzie do pierwszej instrukcji po pętli while.

Oto przykład użycia pętli while:

Python
# Suma liczb naturalnych

maxs = int(input("max suma < ? "))
s = 0 # zerujemy sumę
i = 1 # pierwsza liczba naturalna
while s + i < maxs:
    s += i # suma
    i += 1 # następna liczba
print("suma =", s)

Zadania

  1. Przerób program tak, aby liczył sumę liczb nieparzystych.
  2. Przerób program tak, aby liczył sumę liczb parzystych.
  3. Przerób program tak, aby liczył sumę wielokrotności liczby 3.

Na początek:  podrozdziału   strony 

Pętla iteracyjna for

Przedstawiona w poprzednim rozdziale pętla warunkowa while jest pętlą ogólną. W programowaniu często są przydatne pętle specjalizowane, które wykonują określoną liczbę obiegów (oczywiście da się je zrealizować za pomocą while, ale wymaga to dłuższego kodu, a programiści nie są fanami dodatkowej pracy). Przykładem takiej pętli jest pętla for. W języku Python pętla ta posiada kilka postaci. Zacznijmy od najprostszej:
Python
...
for i in range(liczba):
    inst_1
    inst_2
    ...
    inst_n
...
i : to zmienna licznikowa, która przyjmuje kolejne wartości określane przez funkcję range( ).
range( ): tzw. funkcja zakresu, która dla każdego obiegu generuje wartość dla zmiennej i.

Funkcja range(liczba) generuje ciąg liczb kolejno od 0 do liczba -1. Na przykład:

range(5) → 0 1 2 3 4
range(3) → 0 1 2
range(10) → 0 1 2 3 4 5 6 7 8 9

Oto przykład:

Python
# Liczby naturalne

for i in range(100):
    print(i, end=" ")
print()

Parametr, który przekazujemy do funkcji range( ) nazywa się tu stopem. Liczby generowane są kolejno od zera i kończą się na wartości bezpośrednio mniejszej od stopu. Zapamiętaj, iż stop jest granicą, którą generowane liczby nigdy nie przekroczą.

Jeśli do funkcji range( ) przekażemy dwa parametry, to pierwszy będzie określał start generowanego ciągu, a drugi będzie stopem:

range(2, 8) → 2 3 4 5 6 7
range(-3, 3) → -3 -2 -1 0 1 2
range(6,11) → 6 7 8 9 10

Uwaga, jeśli start jest mniejszy lub równy stop, to nie zostanie wygenerowany żaden ciąg i pętla nie wykona ani jednego obiegu. Pobaw się poniższym programem:

Python
# Ciąg kolejnych liczb całkowitych

start = int(input("start = ? "))
stop  = int(input("stop  = ? "))
print()
for i in range(start, stop):
    print(i, end=" ")
print()

Funkcja range( ) przyjmuje jeszcze trzeci parametr, w tym przypadku określa on krok, z którym będą generowane kolejne wartości ciągu:

range(start, stop, krok):
range(2, 12, 2) → 2 4 8 10
range(5, 0, -1) → 5 4 3 2 1
range(-3, -10, -1) → -3 -4 -5 -6 -7 -8 -9

Uruchom poniższy program:

Python
# Ciąg kolejnych liczb

start = int(input("start = ? "))
stop  = int(input("stop  = ? "))
krok  = int(input("krok  = ? "))
print()
for i in range(start, stop, krok):
    print(i, end=" ")
print()

Podsumowanie

range(stop) :
0 1 2 ... stop-1

range(start, stop) :
start, start+1 ... stop-1

range(start, stop, krok) :
start, start+krok, ... - ciąg kończy się tuż przed osiągnięciem lub przekroczeniem stop

Zadania

  1. Wygeneruj wszystkie liczby nieparzyste w zadanym przedziale <a, b>.
  2. Policz wszystkie wielokrotności liczby 3 w zadanym przedziale <a, b>.
  3. Wygeneruj ciąg znaków X o zadanej długości.

Na początek:  podrozdziału   strony 

Rozkazy break i continue

Czasem zdarza się, iż chcemy zakończyć wykonywanie obiegów pętli, gdy pojawi się określona sytuacja. Na przykład utworzymy pętlę, która będzie odczytywała kolejne imiona i zliczała je, aż do momentu, gdy użytkownik wprowadzi pusty tekst (tzn. naciśnie sam klawisz Enter – w takim przypadku polecenie input( ) zwraca tekst pusty). Wtedy pętla zakończy się. Wykorzystamy tutaj pętlę nieskończoną, którą będziemy przerywali rozkazem break. Rozkaz ten kończy pętlę i przechodzi do pierwszej instrukcji za pętlą.

Python
# Zliczanie imion

n = 0 # liczba imion
while True: # pętla nieskończona
    imie = input("Imię = ")
    if imie == "": break
    n += 1 # zliczamy imiona
print()
print("Liczba imion =",n)

Czasem zdarza się, iż chcemy zakończyć wykonywanie bieżącego obiegu pętli i przejść do następnego, gdy wystąpi określona sytuacja. Poniższy program wyświetla kolejne liczby całkowite od zera do zadanej granicy za wyjątkiem liczb będących wielokrotnościami liczby 5. Wyświetlane liczby są zliczane i sumowane. Do przerywania obiegu pętli używamy rozkazu continue. Rozkaz ten kończy obieg i przechodzi do bezpośrednio następnego.

Python
# Liczby naturalne
# bez wielokrotności 5

n = int(input("max = "))
c = 0 # licznik liczb
s = 0 # suma liczb
for i in range(n + 1):
    if i % 5 == 0: continue
    print(i, end=" ")
    c += 1
    s += i
print()
print()
print("Ilość =", c)
print("Suma  =", s)

Podsumowanie

break : przerywa wykonywanie pętli.
continue : przerywa wykonywanie bieżącego obiegu pętli i przechodzi do następnego obiegu.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.