18

Pętla, która nie puści dalej – walidacja danych

Materiały tej lekcji są na razie tylko do czytania na stronie. Kod przepisz albo skopiuj do swojego edytora.

Czego się nauczysz

To ostatnia lekcja kursu „Python od zera” – i spina wszystko w jeden wzorzec. W każdym arkuszu egzaminacyjnym z ostatnich lat stoi niemal identyczne zdanie: program pobiera liczbę z zakresu, a przy wartości spoza zakresu wyświetla komunikat i prosi o ponowne wprowadzenie. Nauczysz się tego raz, a przepiszesz na każdym zadaniu, jakie ci się trafi.

Po tej lekcji:

Masz już wszystkie klocki

Dwa różne rodzaje złych danych

Rodzaj pierwszy: to w ogóle nie jest liczba. Wpisano abc. Konwersja się nie uda, więc poleci ValueError – łapiesz go blokiem except.

Rodzaj drugi: to jest liczba, ale nie ta. Wpisano 9, a kostka ma sześć ścianek. Konwersja przeszła bez problemu, więc żaden błąd nie poleci. Musisz sprawdzić to sam, zwykłym warunkiem if.

try:
    oczko = int(input("1-6: "))
    if 1 <= oczko <= 6:
        print(f"Wyrzucono {oczko}")
    else:
        print("Spoza zakresu!")
except ValueError:
    print("To nie liczba!")
Poprawna kolejność: try, w środku konwersja, zaraz po niej warunek zakresu, na końcu except. Sprawdzanie zakresu przed konwersją nie ma sensu – program i tak wywali się na int.

Wzorzec do zapamiętania

while True:
    try:
        oczko = int(input("1-6: "))
        if 1 <= oczko <= 6:
            break
        print("Podaj liczbe 1-6")
    except ValueError:
        print("To nie liczba")
print(f"Przyjeto: {oczko}")

W każdym obrocie pętli są trzy możliwe drogi:

  1. Konwersja się nie udała – sterowanie skacze do except, komunikat, pętla zaczyna od nowa.
  2. Konwersja się udała, ale liczba jest spoza zakresu – komunikat, pętla zaczyna od nowa.
  3. Konwersja się udała i liczba mieści się w zakresie – break kończy pętlę.

Trzy testy przed oddaniem

Zanim uznasz zadanie za skończone, uruchom je i wpisz kolejno: wartość poprawną, wartość spoza zakresu i tekst. Egzaminator sprawdzi dokładnie te trzy przypadki.

Ten sam wzorzec jako funkcja

W kodzie z lekcji wzorzec jest zamknięty w funkcji pobierz_liczbe(komunikat, minimum, maksimum). Dzięki temu jedną funkcją pobierzesz ocenę, wiek i rok urodzenia – zmieniają się tylko argumenty. Tę funkcję warto umieć napisać z pamięci.

Spróbuj sam

Kod z tej lekcji czeka na twoje dane. Po kliknięciu „Uruchom” program zapyta o ocenę od 1 do 6. Zrób trzy testy:

Program nie puści cię dalej, dopóki nie podasz poprawnej wartości.

Zadania z lekcji:

  1. Program prosi o ocenę z zakresu od 1 do 6. Pyta tylko raz i wypisuje jeden z trzech komunikatów, zależnie od tego, co wpisano.
  2. Rozbuduj zadanie 1: program pyta w kółko, aż dostanie poprawną ocenę. Dopiero wtedy wypisuje „Przyjęto ocenę: 5” i kończy pracę.
  3. Napisz program pobierający wiek z zakresu od 0 do 120 tym samym wzorcem.
  4. Dla szybszych: zamień powtarzający się fragment w funkcję pobierz_liczbe(komunikat, minimum, maksimum) i użyj jej trzy razy – dla oceny, wieku i roku urodzenia.

Koniec bloku – co masz za sobą

Osiemnaście lekcji, cały fundament:

Co dalej: klasy. Nauczysz się łączyć dane i funkcje w jedną całość – a to jest dosłownie treść pierwszej części egzaminu, do którego podejdziesz w klasie piątej.

Notatki

PDF
Zadania utrwalające Karta pracy do tej lekcji: zadania sprawdzające i domowe do samodzielnego zrobienia w swoim edytorze · 6 stron.
Zadania utrwalające – Pętla, która nie puści dalej – walidacja danych
Strona 1 z 6 Strona 2 z 6 Strona 3 z 6 Strona 4 z 6 Strona 5 z 6 Strona 6 z 6

Prezentacja

Slajd 1 z 7
1 / 7

Kod

Otwórz kod, zmieniaj go i uruchamiaj na stronie – np. usuń # z linii oznaczonej jako błąd i zobacz, co się stanie. „Przywróć” wraca do wersji z lekcji.

PY
demo_18_walidacja-wzorzec.py Kod z lekcji – otwórz, zmieniaj i uruchamiaj; wynik zobaczysz obok kodu.
demo_18_walidacja-wzorzec.py
Wynik programu
Kliknij „Uruchom”, żeby zobaczyć tutaj wynik programu.