Program „Zbiór jabłek”: specyfikacja i lista kroków z powtarzaniem
Pętla while: powtarzaj, dopóki warunek jest prawdziwy
Jeden brakujący nawias w podręczniku i co robi z programem
Zadania ze strony 102: od treści zadania do listy kroków i kodu
Rozgrzewka · 3 minuty
Co pamiętacie z lekcji 6?
Do czego w programie służy słowo elif?
Czym różni się warunek połączony słowem and od warunku z or?
Po czym Python poznaje, które linijki należą do bloku instrukcji po if?
Część 1 · Zbiór jabłek
Nie wiemy z góry, ile razy zapytamy
Ania i Wojtek zbierają jabłka u sadownika. Mają uzbierać wspólnie 60 kg, co według pracodawcy odpowiada 300 jabłkom stosownej wielkości. Przynoszą je partiami, po kilkanaście albo kilkadziesiąt sztuk. Program ma pytać o kolejne partie tak długo, aż suma wyniesie 300 lub więcej.
Podręcznik Informatyka na czasie 2, s. 99–100 (6.3 Tworzymy własne programy użytkowe, opis zadania, ramka „Specyfikacja”, lista kroków)
Część 1 · Symulacja
Sprawdzamy algorytm na kartce
Zanim napiszemy kod, przechodzimy algorytm ręcznie. Każdy wiersz to jedno podejście z jabłkami. „NIE” w ostatniej kolumnie oznacza, że warunek przestał być prawdziwy i algorytm przechodzi do kroku 5.
Liczba jabłek przy bieżącym podejściu
Suma jabłek
Czy wartość sumy jest mniejsza niż 300?
–
0
TAK
55
55
TAK
51
106
TAK
63
159
TAK
55
214
TAK
52
266
TAK
50
316
NIE
Podręcznik Informatyka na czasie 2, s. 100 (6.3 Tworzymy własne programy użytkowe, tabela 6.2 „Symulacja algorytmu Zbiór jabłek”)
Część 2 · Znajdź błąd
Ten kod nie ruszy
Tak wygląda program „Zbiór jabłek” wydrukowany w podręczniku na stronie 100. Przepisany dosłownie nie da się uruchomić: jedna linijka ma usterkę.
1. total = 0
2. while total < 300:
3. count = int(input("Ile jabłek przynieśliście? ")
4. total += count
5. print("Brawo! Uzbieraliście wymaganą liczbę jabłek. ")
Która to linijka i czego w niej brakuje?
Podręcznik Informatyka na czasie 2, s. 100 (6.3 Tworzymy własne programy użytkowe, kod źródłowy programu „Zbiór jabłek”)
Część 2 · Wersja, która działa
Poprawiony kod i jego przebieg
1. total = 0
2. while total < 300:
3. count = int(input("Ile jabłek przynieśliście? "))
4. total += count
5. print("Brawo! Uzbieraliście wymaganą liczbę jabłek. ")
Ile jabłek przynieśliście? 65
Ile jabłek przynieśliście? 71
Ile jabłek przynieśliście? 73
Ile jabłek przynieśliście? 75
Ile jabłek przynieśliście? 70
Brawo! Uzbieraliście wymaganą liczbę jabłek.
>>>
Zapis total += count z linijki 4. znaczy: weź poprzednią wartość zmiennej total, zwiększ ją o aktualną wartość zmiennej count i tę sumę zapamiętaj jako nową wartość zmiennej total. Tekst pytania jest w środku input, więc kursor czeka zaraz za znakiem zapytania.
Podręcznik Informatyka na czasie 2, s. 100–101 (6.3 Tworzymy własne programy użytkowe, kod źródłowy i rys. 6.6 „Przykładowy przebieg działania programu Zbiór jabłek”) · poprawiony listing, w podręczniku brak nawiasu
Część 2 · Pętla while
Powtarzaj, dopóki warunek jest prawdziwy
Schemat ogólny: while warunek:, a pod spodem instrukcje z wcięciem. Wszystkie instrukcje za dwukropkiem i wyróżnione wcięciem będą powtarzane tak długo, dopóki warunek jest prawdziwy.
Podręcznik Informatyka na czasie 2, s. 101 (6.3 Tworzymy własne programy użytkowe, budowa pętli while) i s. 225 (dodatek 7 Podstawowe typy instrukcji, składnia while)
Część 2 · Kiedy pętla się nie kończy
Warunek musi kiedyś przestać być prawdziwy
Pętli while używamy wtedy, gdy nie znamy z góry liczby powtórzeń. O programie mówimy, że się „zapętlił”, gdy przez błąd wykonuje instrukcje pętli w nieskończoność.
Ciekawostka: nie da się napisać programu, który dla dowolnego innego programu z góry odpowie, czy ten się zatrzyma. To problem stopu, a Alan Turing udowodnił w 1937 roku, że ogólnego rozwiązania nie ma.
Podręcznik Informatyka na czasie 2, s. 100 (6.3, ramka „Warto wiedzieć” o zapętleniu) i s. 225 (dodatek 7, kiedy stosuje się while) · ciekawostka: en.wikipedia.org/wiki/Halting_problem
Część 3 · Drugi przykład
Ta sama pętla, inne zadanie
name = "Joanna"
guess = ""
i = 0
print("Spróbuj odgadnąć moje imię")
while guess != name:
i = i + 1
print("Próba", i, ": ", end="")
guess = input()
print("Brawo! Udało ci się odgadnąć moje imię za", i, "razem.")
Tu też nie wiadomo z góry, ile będzie powtórzeń: pętla działa, dopóki wpisana próba różni się od szukanego imienia.
Operatory przydatne w zadaniach:
!= jest różne od
** potęgowanie: 2 ** 3 daje 8
// dzielenie całkowite: 3 // 2 daje 1
% reszta z dzielenia: 3 % 2 daje 1
Podręcznik Informatyka na czasie 2, s. 225 (dodatek 7 Podstawowe typy instrukcji, przykład użycia pętli while) i s. 227 (dodatek 8 Operatory i funkcje matematyczne, operatory arytmetyczne)
Ćwiczenie · na kartce · 12 minut
Ćwiczenie: tabela i własne zadanie
Podpisz kartkę. Przepisz tabelę z prawej i uzupełnij ją dla partii jabłek: 70, 80, 65, 90.
Wybierz jedno zadanie ze strony 102: 2. imię i ulubiony kolor, 3. czy dwie liczby są różne, 4. wartość pieniędzy w skarbonce.
Zapisz dla niego listę kroków (3 do 5) i szkic kodu (3 do 6 linijek). Nazwy zmiennych bez polskich znaków.
Podręcznik Informatyka na czasie 2, s. 101 (ćwiczenie 5) i s. 102 (Zadania 2., 3., 4., poziom jednej gwiazdki) · wzór tabeli: tab. 6.2 ze s. 100
Część 3 · Pytania kontrolne
Trzy pytania na koniec
Instrukcja if i pętla while mają warunek. Czym się w takim razie różnią?
Co stanie się z programem, gdy warunek pętli while nigdy nie przestanie być prawdziwy?
Zapis total += count da się rozpisać dłużej. Jak?
Podręcznik Informatyka na czasie 2, s. 99–101 (6.3 Tworzymy własne programy użytkowe, ramka „Zapamiętaj”)
Część 3 · Podsumowanie
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
Pętla kończy się, gdy suma sięgnie 300
Serwery i gry mają pętlę, która ma się nie kończyć: czeka na kolejne żądanie albo klatkę obrazu. W Pythonie to pętla zdarzeń, a uruchamia ją run_forever.
nadal w użyciu
Zmienne śledzone ręcznie w tabeli
Program zatrzymuje się w wybranej linijce, a wartości zmiennych widać na ekranie. Robi to debuger w edytorze.
narzędzia
Brak nawiasu widać przy uruchomieniu
Edytor sprawdza składnię w tle i podkreśla brakujący nawias przed uruchomieniem.
narzędzia
while jako sposób na powtarzanie
Gdy liczba powtórzeń jest znana, używa się pętli for. while zostaje tam, gdzie tej liczby nie znamy.
rozszerzane
Zapętlony program zatrzymuje człowiek
Do zadań dokłada się limit czasu i licznik prób, żeby zadanie samo się przerwało.
rozszerzane
run_forever: docs.python.org/3/library/asyncio-eventloop.html · opis pętli while: docs.python.org/3/reference/compound_stmts.html