LEKCJA 4. Łączymy warunki i pętle – projektowanie i testowanie rozwiązania

Temat 1/ Klasa 3/ Lekcja 4

1. Program jako rozwiązanie problemu

Potrafimy już:

  • pobierać dane,
  • wykonywać obliczenia,
  • stosować warunki,
  • stosować pętle.

Teraz będziemy je łączyć.

Zanim napiszemy program, przygotujemy plan rozwiązania.


2. Przykładowy problem

Użytkownik podaje pięć liczb. Program ma policzyć, ile spośród nich jest dodatnich.

Nie zaczynamy od pisania kodu.

Najpierw analizujemy problem.

Dane

Pięć liczb.

Wynik

Liczba wartości dodatnich.

Co musi zrobić program?

  1. Utworzyć licznik wartości dodatnich.
  2. Pięć razy pobrać liczbę.
  3. Sprawdzić, czy liczba jest większa od zera.
  4. Jeżeli tak – zwiększyć licznik.
  5. Po zakończeniu pętli wyświetlić wynik.

3. Licznik

Potrzebujemy zmiennej:

ile_dodatnich = 0

Na początku nie znaleźliśmy jeszcze żadnej liczby dodatniej, dlatego wartość wynosi 0.

Jeżeli znajdziemy liczbę dodatnią:

ile_dodatnich = ile_dodatnich + 1

czyli zwiększamy licznik o jeden.


4. Gotowy program

ile_dodatnich = 0
for i in range(5):
liczba = float(input("Podaj liczbę: "))
if liczba > 0:
ile_dodatnich = ile_dodatnich + 1
print("Liczb dodatnich:", ile_dodatnich)

Zwróć uwagę na wcięcia.

Instrukcja:

if liczba > 0:

znajduje się wewnątrz pętli, ponieważ każdą podaną liczbę trzeba sprawdzić.


5. Testujemy program

Załóżmy, że podamy:

2
-3
7
0
5

Liczby dodatnie to:

2
7
5

Program powinien więc wyświetlić:

Liczb dodatnich: 3

6. Co to jest błąd programu?

Błąd programistyczny to sytuacja, w której program:

  • nie daje się uruchomić,
  • zatrzymuje się podczas działania,
  • albo działa, ale daje nieprawidłowy wynik.

Nie każdy błąd wygląda tak samo.

Błąd składni

if liczba > 0
print("Dodatnia")

Brakuje :.

Błąd działania

liczba = int(input("Podaj liczbę: "))
wynik = 10 / liczba

Dla liczba = 0 wystąpi problem z dzieleniem przez zero.

Błąd logiczny

if liczba < 0:
print("Liczba dodatnia")

Program może się uruchomić, ale jego logika jest błędna.


7. Debugowanie

Debugowanie to wyszukiwanie i poprawianie błędów w programie.

Dobrą metodą jest:

  1. przeczytać komunikat o błędzie,
  2. sprawdzić wskazaną linię,
  3. przeanalizować wartości zmiennych,
  4. poprawić program,
  5. ponownie go uruchomić.

8. Dane testowe trzeba dobierać świadomie

Dla programu sprawdzającego liczby dodatnie nie wystarczy wpisać:

1
2
3
4
5

Warto sprawdzić różne przypadki:

2
-4
0
8
-1

Dzięki temu testujemy:

  • liczbę dodatnią,
  • liczbę ujemną,
  • zero.

9. Przykład – liczenie wyników spełniających warunek

Problem:

Użytkownik podaje cztery wyniki testu. Program ma policzyć, ile wyników wynosi co najmniej 50 punktów.

Plan:

  1. ustaw licznik zaliczonych wyników na 0,
  2. cztery razy pobierz wynik,
  3. sprawdź, czy wynik jest większy lub równy 50,
  4. jeżeli tak – zwiększ licznik,
  5. wyświetl liczbę zaliczonych wyników.

Program:

zaliczone = 0
for i in range(4):
punkty = int(input("Podaj wynik: "))
if punkty >= 50:
zaliczone = zaliczone + 1
print("Liczba zaliczonych wyników:", zaliczone)

Zadanie podsumowujące

Użytkownik podaje pięć temperatur.

Program powinien policzyć, ile z nich było poniżej 0°C.

Najpierw:

  1. zaplanuj rozwiązanie,
  2. napisz własny program,
  3. przetestuj go w IDLE,
  4. dopiero później wybierz odpowiedź.

A

mroz = 0
for i in range(5):
temperatura = float(input("Podaj temperaturę: "))
if temperatura < 0:
mroz = mroz + 1
print("Temperatur poniżej zera:", mroz)

B

mroz = 0
for i in range(5):
temperatura = float(input("Podaj temperaturę: "))
if temperatura > 0:
mroz = mroz + 1
print("Temperatur poniżej zera:", mroz)

C

mroz = 0
for i in range(5):
temperatura = float(input("Podaj temperaturę: "))
if temperatura < 0:
mroz = 1
print("Temperatur poniżej zera:", mroz)

D

mroz = 0
for i in range(4):
temperatura = float(input("Podaj temperaturę: "))
if temperatura < 0:
mroz = mroz + 1
print("Temperatur poniżej zera:", mroz)

Wskazówka

Sprawdź trzy elementy:

  • ile razy wykonywana jest pętla,
  • jaki warunek oznacza „poniżej zera”,
  • czy licznik jest zwiększany, czy tylko ustawiany na 1.

Odpowiedź

Prawidłowa odpowiedź: A.

Program pięć razy pobiera temperaturę, sprawdza:

temperatura < 0

i dla każdej temperatury poniżej zera zwiększa licznik o 1.

B jest błędne, ponieważ liczy temperatury powyżej zera.

C jest błędne, ponieważ za każdym razem ustawia:

mroz = 1

Zatem nawet jeżeli temperatur ujemnych będzie kilka, końcowy wynik może nadal wynosić 1.

D jest błędne, ponieważ range(4) powoduje pobranie tylko czterech temperatur.

Przykładowy test

Dane:

-2
5
0
-7
3

Oczekiwany wynik:

Temperatur poniżej zera: 2

Zadanie z gwiazdką ★

Użytkownik podaje pięć liczb.

Program ma osobno policzyć:

  • ile liczb jest dodatnich,
  • ile jest ujemnych,
  • ile jest równych zero.

Rozwiązanie

dodatnie = 0
ujemne = 0
zera = 0
for i in range(5):
liczba = float(input("Podaj liczbę: "))
if liczba > 0:
dodatnie = dodatnie + 1
elif liczba < 0:
ujemne = ujemne + 1
else:
zera = zera + 1
print("Dodatnich:", dodatnie)
print("Ujemnych:", ujemne)
print("Zer:", zera)

To zadanie jest trudniejsze, ponieważ trzeba jednocześnie prowadzić trzy liczniki, ale wykorzystuje wyłącznie poznane wcześniej konstrukcje.