← Lekcje
Python · lekcja 05

Instrukcja warunkowa if

Program, który podejmuje decyzję

  1. Program Szarlotka: od specyfikacji do listy kroków
  2. Funkcja int(), czyli liczba zamiast tekstu
  3. Schemat if i else, blok instrukcji i wcięcie
  4. Warunek jako zdanie logiczne: porównania, „nie”, „lub”, „i”

Podręcznik: s. 97–99 oraz dodatki 5, 6 i 7 (s. 220–224).

Rozgrzewka · 3 minuty

Co pamiętacie z lekcji 4?

Wracamy do działań, które Python wykonuje na liczbach.

  1. Czym różnią się wyniki 7 / 2, 7 // 2 i 7 % 2?
  2. Ile wynosi 6 / 2 i jakiego typu jest ten wynik?
  3. Co wypisze print(2 + 3 * 4) i dlaczego?
docs.python.org/3/tutorial/introduction.html (rozdz. 3.1.1, operatory arytmetyczne) · podręcznik Informatyka na czasie 2, s. 227 (dodatek 8)
Część 1 · Specyfikacja i lista kroków

Czy starczy na szarlotkę?

Dane: liczba jabłek zebranych przez Anię i Wojtka wprowadzona z klawiatury.
Wynik: informacja, czy suma zebranych jabłek wystarczy na szarlotkę, lub komunikat o tym, że liczba jabłek jest niewystarczająca.

  1. Zapytaj Anię o to, ile ma jabłek. Zapamiętaj tę liczbę.
  2. Zapytaj Wojtka o to, ile ma jabłek. Zapamiętaj tę liczbę.
  3. Oblicz sumę liczb z kroków 1 i 2. Zapamiętaj tę sumę.
  4. Jeśli suma jest liczbą mniejszą niż 15, to wypisz informację, że jabłek jest za mało na szarlotkę. W przeciwnym razie wypisz informację, że liczba jabłek jest wystarczająca.
Podręcznik Informatyka na czasie 2, s. 97–98 (6.3 Tworzymy własne programy użytkowe, program Szarlotka, ramka „Specyfikacja” i lista kroków)
Część 1 · Symulacja

Sprawdzamy algorytm zanim powstanie kod

Symulacja to przejście listy kroków ołówkiem, dla przykładowych liczb. Jeśli w algorytmie jest błąd, tu go widać, a poprawka nic nie kosztuje.

WyjścieWejścieDziałania
Aniu! Ile masz jabłek?4
Wojtku! Ile masz jabłek?5
4 + 5 = 9
Czy 9 < 15
Jabłek jest za mało.
Podręcznik Informatyka na czasie 2, s. 98 (6.3 Tworzymy własne programy użytkowe, tab. 6.1 „Symulacja algorytmu Szarlotka”)
Część 2 · Kod źródłowy

Program Szarlotka

 1.  print("Aniu, ile masz jabłek? ")
 2.  ania_apples = int(input())
 3.  print("Wojtku, ile masz jabłek? ")
 4.  wojtek_apples = int(input())
 5.
 6.  total_apples = ania_apples + wojtek_apples
 7.  if total_apples < 15:
 8.      print("Jabłek jest za mało na szarlotkę.")
 9.  else:
10.      print("Jabłek wystarczy na szarlotkę.")

Linie 1.–4. to pytania i odpowiedzi, linia 6. liczy sumę, a linie 7.–10. wybierają komunikat.

Podręcznik pisze na s. 99, że instrukcja warunkowa jest „w liniach od 8. do 11.”, choć program ma tylko 10 linii. Nawet książki trzeba testować.

Podręcznik Informatyka na czasie 2, s. 98 (6.3 Tworzymy własne programy użytkowe, kod źródłowy programu Szarlotka) · numeracja linii jak w listingu, tekst podręcznika s. 99 podaje 8–11
Część 2 · Typy danych

Funkcja int(): liczba, nie tekst

Funkcja input zawsze oddaje napis, czyli ciąg znaków. Napisy Python skleja, a nie dodaje. Funkcja int (od angielskiego integer, liczba całkowita) zamienia taki napis na liczbę.

Bez int(): to napisy ania_apples = input() "4" + "5" wynik: "45" Z int(): to liczby ania_apples = int(input()) 4 + 5 wynik: 9

Typ mówi, co wolno zrobić z wartością. int to liczby całkowite (4), float to liczby z częścią ułamkową (2.45), str to napisy ("ABC"). Zapisy 2 i 2.0 to dwie różne rzeczy.

Podręcznik Informatyka na czasie 2, s. 99 (6.3 Tworzymy własne programy użytkowe, funkcja int, ramka „Warto wiedzieć”) oraz s. 223 (dodatek 6 „Typy danych w języku Python”)
Część 2 · Instrukcja warunkowa

Dwie drogi: if i else

if total_apples < 15: warunek prawdziwy warunek fałszywy blok po if, z wcięciem Jabłek jest za mało blok po else, z wcięciem Jabłek wystarczy

Wykonuje się zawsze dokładnie jedna z dwóch dróg, nigdy obie. Blok instrukcji to kolejne linijki wyróżnione wcięciem: domyślnie cztery spacje. Wcięcie zastępuje w Pythonie nawiasy, więc mówi, gdzie blok się zaczyna i kończy.

Podręcznik Informatyka na czasie 2, s. 99 (6.3 Tworzymy własne programy użytkowe, schemat ogólny instrukcji warunkowej, blok instrukcji, ramka „Warto wiedzieć” o czterech spacjach)
Część 3 · Zdanie logiczne

Warunek to zdanie logiczne

Zdanie logiczne to takie, któremu da się jednoznacznie przypisać prawdę albo fałsz. „Liczba 8 jest liczbą pierwszą” jest fałszywe, „2 + 2 < 5” prawdziwe. Python porównuje wartości tymi samymi znakami co matematyka, tylko zapisanymi po swojemu.

matematyka Python matematyka Python = == != > > < < >= <=

Ciekawostka: prawda i fałsz mają w informatyce swojego patrona. Angielski matematyk George Boole (1815–1864) w książce „An Investigation of the Laws of Thought” z 1854 roku pokazał, że na zdaniach prawdziwych i fałszywych da się liczyć jak na liczbach. Dlatego typ z dwiema wartościami nazywa się dziś bool.

Podręcznik Informatyka na czasie 2, s. 220–221 (dodatek 5 „Logika matematyczna i operatory logiczne”, zdania logiczne, tabela operatorów porównań) · ciekawostka: pl.wikipedia.org/wiki/George_Boole
Część 3 · Operatory logiczne

Nie, lub, i

Warunki da się łączyć. Trzy spójniki wystarczą na prawie wszystko, a Python zapisuje je zwykłymi angielskimi słowami.

SpójnikZapisKiedy całość jest prawdą
zaprzeczenie (negacja)notgdy warunek po nim jest fałszywy: dla x równego 3 zapis not x == 4 jest prawdą
alternatywa (lub)orgdy choć jeden z warunków jest prawdą; fałszem jest tylko wtedy, gdy oba są fałszywe
koniunkcja (i)andtylko wtedy, gdy oba warunki są prawdą naraz: dla x równego 3 i y równego 2 zapis x < 5 and y > 1 jest prawdą

Zaprzeczeniem warunku x < 4 jest x >= 4, a nie x > 4: samą czwórkę też trzeba przypisać do jednej z dwóch dróg.

Podręcznik Informatyka na czasie 2, s. 220–222 (dodatek 5 „Logika matematyczna i operatory logiczne”, zaprzeczenie, alternatywa, koniunkcja, tabela operatorów logicznych w Pythonie)
Ćwiczenie · na kartce · 10 minut

Ćwiczenie: prześledź program

  1. Podpisz kartkę i przerysuj dwa razy tabelę z prawej (wzór tab. 6.1).
  2. Wypełnij ją tak, jak wykona to program, dla zestawu A (6 i 7 jabłek) oraz zestawu B (8 i 9).
  3. Na dole zapisz własny warunek na dwie szarlotki: nowa linia 7. i jedno zdanie, co się zmieni.
Wyjście    | Wejście | Działania
-----------+---------+----------
           |         |
           |         |
           |         |
           |         |
           |         |

Dla chętnych (dom): przepisz program do pliku apple_pie.py i uruchom go dla trzech par liczb, wyniki zapisz w komentarzu na końcu pliku.

Podręcznik Informatyka na czasie 2, s. 98–99 (tab. 6.1, kod programu Szarlotka, ćwiczenie 4)
Część 3 · Pytania kontrolne

Trzy pytania na koniec

  1. Dlaczego liczbę wpisaną przez użytkownika trzeba przepuścić przez funkcję int, zanim się ją doda do innej?
  2. Po czym Python poznaje, które linijki należą do bloku po if, a które do bloku po else?
  3. Jak brzmi zaprzeczenie warunku total_apples < 15 i przy jakiej liczbie jabłek program wykona instrukcję po else?
Podręcznik Informatyka na czasie 2, s. 98–99 (6.3 Tworzymy własne programy użytkowe) i s. 220–221 (dodatek 5)
Część 3 · Podsumowanie

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Jeden warunek, dwie drogiReguły firmowe to ciągi warunków: wysokość rabatu, taryfa za przesyłkę, prawo do zniżki. Python ma na to elif, skrót od angielskiego „else if”; części elif może być dowolnie wiele, a else jest opcjonalne.rozszerzane
int() na tym, co wpisał użytkownikFormularz na stronie sprawdza pola w przeglądarce, a potem serwer sprawdza je jeszcze raz, bo dane z przeglądarki mogą przyjść dowolne.rozszerzane
Wcięcie robione ręcznieWcięcia i odstępy ustawia automat przy zapisie pliku, żeby cały zespół miał kod sformatowany tak samo.narzędzia
Próg 15 wpisany w kodProgi i limity trzyma się w ustawieniach albo w bazie, bo zmieniają się częściej niż program. Zmiana progu nie powinna wymagać poprawiania kodu.zmienione
elif: docs.python.org/3/tutorial/controlflow.html