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:
- odróżnisz dwa rodzaje złych danych: „to nie liczba” i „liczba spoza zakresu”,
- napiszesz pętlę, która pyta do skutku,
- będziesz wiedzieć, gdzie musi stać
break, - sprawdzisz swój program trzema przypadkami, tak jak zrobi to egzaminator.
Masz już wszystkie klocki
- pętla
while Truez lekcji 10, - warunek sprawdzający zakres z lekcji 8,
- konwersja
int(input(...))z lekcji 16, - przechwytywanie błędu z lekcji 17.
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ńcuexcept. Sprawdzanie zakresu przed konwersją nie ma sensu – program i tak wywali się naint.
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:
- Konwersja się nie udała – sterowanie skacze do
except, komunikat, pętla zaczyna od nowa. - Konwersja się udała, ale liczba jest spoza zakresu – komunikat, pętla zaczyna od nowa.
- Konwersja się udała i liczba mieści się w zakresie –
breakkończy pętlę.
breakmusi stać w gałęzi poprawnej. Umieszczony w blokuexceptoznaczałby wyjście przy złych danych, czyli dokładnie odwrotnie niż chcemy.- Komunikat powinien mówić, co jest dozwolone. „Podaj liczbę z zakresu 1-6” jest lepsze niż samo „Błąd”.
Trzy testy przed oddaniem
- Wpisujesz
4– konwersja przechodzi, zakres spełniony. Program: „Przyjęto: 4”. - Wpisujesz
9– konwersja przechodzi, zakres niespełniony. Program: „Podaj liczbę 1-6”. - Wpisujesz
abc– konwersja rzuca ValueError. Program: „To nie liczba”.
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:
- wpisz
abc, - wpisz
9, - wpisz
4.
Program nie puści cię dalej, dopóki nie podasz poprawnej wartości.
Zadania z lekcji:
- 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.
- Rozbuduj zadanie 1: program pyta w kółko, aż dostanie poprawną ocenę. Dopiero wtedy wypisuje „Przyjęto ocenę: 5” i kończy pracę.
- Napisz program pobierający wiek z zakresu od 0 do 120 tym samym wzorcem.
- 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:
print, zmienne, cztery typy danych i konwersje,- operatory arytmetyczne, reszta z dzielenia, f-stringi,
- warunki,
elif, operatory logiczne, - pętle
foriwhile, instrukcjabreak, - listy: tworzenie, indeksy, operacje, przechodzenie pętlą,
- funkcje z parametrami, wartością domyślną i instrukcją
return, - dane od użytkownika, przechwytywanie błędów, walidacja zakresu.
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
Prezentacja
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.