7C: Pętle

Lekcja 7 składa się z trzech części A, B, C, które można wykonać w dowolnej kolejności.

Do tej pory uczyliśmy się podstawowych poleceń programowania (n.p. przypisywania wartości, drukowania) oraz sposobu sprawdzania, które instrukcje są wykonywane przy użyciu instrukcji if. W tej lekcji wprowadzamy pętle (nazywane powtórzeniami lub iteracją): sposób na robienie przez komputer tego samego (lub podobnych rzeczy) w kółko. Na przykład, sprawdzanie pisowni każdego słowa w dokumencie byłoby wykonywane za pomocą pętli. Opisujemy dwa rodzaje pętli Pythona w tej lekcji: pętle while i pętle for.

Pętle while

Instrukcja while powtarza fragment kodu w kółko, tak długo, dopóki jakiś warunek jest prawdziwy. Oto przykład:

Pierwsza linia to while «warunek»:, gdzie «warunek» jest wyrażeniem, które zwraca True lub False (wyrażenie typu boolowskiego, podobnie jak if).

Oto ogólna struktura:

  • Pierwsza linia to while «warunek»:, gdzie «warunek» jest wyrażeniem, które zwraca True lub False (wyrażenie typu boolowskiego, podobnie jak if).
  • Następnie, wstawimy wcięty blok (znów, jak np. w instrukcja if) składający się z wyrażeń, które chcemy powtarzać w kółko. Nazywamy to ciałem.
  • Kiedy program jest uruchomiony, poniższe jest powtarzane:
    • O Warunek jest testowany; jeśli warunek jest True, wtedy ciało jest wykonywane, potem powtarzamy wszystko od góry; gdy warunek zostanie oszacowany jako False, pętla zostanie zatrzymana.

W powyższym przykładzie powtarzamy ciało pętli, aż timeLeft nie będzie większa niż 0.

Zadanie na kodowanie : Odliczanie
Zmodyfikuj powyższy przykład tak, aby otrzymać program odliczający, w którym licząc od 1 do 10 drukujemy Odpalenie!
Możesz wprowadzić dane dla programu w poniższym polu.

Z użyciem pętlami łatwo jest napisać program, który działa w nieskończonej pętli.
Przykład
Infinite loop
Otrzymasz błąd "Time Limit Exceeded" (Przekroczono limit czasu), ponieważ nasz serwer internetowy CS Circles wymusza limit czasu; po upływie 1 sekundy program zostaje zakończony. Jeśli uruchomiłbyś program w domu, to cały czas by działał (dopóki nie zmusiłbyś go do zakończenia, zazwyczaj, poprzez naciśnięcie klawiszy Ctrl-C). 

Pętle for

W Pythonie jest też inny rodzaj pętli zwanej pętlą for. W wielu sytuacjach może być użyty którykolwiek rodzaj pętli (for/while), a jeden jest prostszy od drugiego, więc dobrze jest wiedzieć, jak używać obu. Pętla for jest tak zbudowana, że łatwo poruszać się w określonym zakresie liczb (lub jak zobaczymy w późniejszej lekcji, po dowolnej liście danych).

Poniżej przykład pętli for.

Ogólna struktura numerycznej pętli for

dla «variableName» w zakresie («startValue», «tailValue»):
  «wciety blok poleceń, nazywamy"ciałem" pętli»
Jak zwykle, blok ciała może składać się z wielu linii, a wszystkie te linie mają mieć wcięcie tej samej wielkości. Najpierw ciało pętli jest wykonywane ze zmienną variableName ustawioną na wartość startValue. Następnie powtarzane jest ze zmienną variableName ustawioną na wartość startValue+1, a następnie z wartością startValue+2 itd. To trwa aż variableName przyjmie wartość tailValue-1 i wtedy pętla zostanie zatrzymana.

Pętla kończy się dla zmiennej tailValue-1, a nie tailValue!
Przykład

Oto przykład pętli for wewnątrz innej pętli for.

Przykład
Ten kod drukuje kwadrat 5 × 5 składający się z jedynek.
Uwaga: gdy pomnożymy liczbę X przez dziesięć i dodamy 1, dodajemy cyfrę 1 na końcu X. Na przykład (1867 * 10) + 1 = 18671.

Zadanie na kodowanie : Jeden trójkąt
Zmodyfikuj poprzedni program na dwa sposoby. Najpierw zamiast kwadratu, wydrukuj trójkąt w kształcie: ◤. Potem, zamiast zawsze generować 5 wierszy, spowoduj, aby wydruk przyjmował rozmiar podany w input(). Na przykład, jeśli wejście wynosi 3, to wyjście powinno być:

111
11
1
Kliknij, aby uzyskać wskazówkę. 
Możesz wprowadzić dane dla programu w poniższym polu.

Instrukcje break i continue

Instrukcja break jest jak wyjście awaryjne z pętli while lub for: break powoduje natychmiastowy skok do poleceń, które znajdują się po części z ciałem pętli. Oto przykład przy użycia break: odczytuje wszystkie linie wejściowe, dopóki nie odczyta "END".

Przykład
Wszystkie linie wejścia w pętli

Polecenie continue pozwala pominąć resztę pętli, a następnie, powtórzyć instrukcje ciała w kolejnej rundzie (zazwyczaj nazywamy to następną "iteracją").

Przykład

Oto zwizualizowany przykład, który łączy break and continue. Czy możesz przewidzieć, co wyjdzie?

Ćwiczenia

Zadanie na kodowanie : Spis Kwadratów
Kwadraty liczb są liczbami całkowitymi postaci K × K, np. 9 jest kwadratem liczby 3, ponieważ 3 × 3 = 9. Napisz program, który na wejściu odczytuje liczbę całkowitą n a na wyjściu wyświetla rosnąco wszystkie dodatnie kwadraty liczb mniejsze niż n; każda liczba w jednej linii. Na przykład, jeśli na wejściu będzie 16, wtedy poprawne wyjście to:

1
4
9
Wskazówka
Możesz wprowadzić dane dla programu w poniższym polu.

Zadanie na kodowanie : Pomijanie
Rozszerzmy przykład "Wszystkie lnie wejścia w pętli" (już dla ciebie skopiowaliśmy) dodając nową funkcjonalność: każda linia równa SKIP nie powinna być drukowana i nie powinna powodować zwiększania licznika. Uruchom program, aby zobaczyć przykład.Wskazówka
Możesz wprowadzić dane dla programu w poniższym polu.

Zadanie na kodowanie : Znajdowanie czynników
Jeśli a × b = n, to a × b nazywamy faktoryzacją n (rozkładem na czynniki). W tym ćwiczeniu napiszesz program, który na wejściu pobiera dodatnią liczbę całkowitą n, a na wyjściu podaje rozkład na czynniki liczby n; zadanie należy wykonać zgodnie z poniższym formatowaniem dla n = 10.

1 times 10 equals 10
2 times 5 equals 10
5 times 2 equals 10
10 times 1 equals 10
Wskazówka
Możesz wprowadzić dane dla programu w poniższym polu.