Walidacja danych i pętle wejściowe — while do sprawdzania poprawności

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Walidacja danych i pętle wejściowe — while do sprawdzania poprawności
In Progress

Walidacja danych z użyciem pętli while

W praktycznych programach często trzeba pytać użytkownika tak długo, aż poda poprawne dane. Do tego świetnie nadaje się pętla while, która powtarza blok instrukcji dopóki spełniony jest warunek. Pętle i instrukcje warunkowe warto przeglądać razem — przykłady działania while znajdziesz w lekcji o pętlach w Pythonie.

Co warto zapamiętać?

  • while wykonuje blok kodu dopóki warunek jest prawdziwy (True).
  • Często używa się while True razem z break, żeby łatwo kontrolować moment wyjścia z pętli — break przerywa pętlę natychmiast.
  • Walidacja to sprawdzanie, czy dane wejściowe spełniają wymagania (np. czy to liczba, czy długość tekstu jest odpowiednia, czy zawiera cyfrę). Instrukcje warunkowe pomagają podejmować decyzje na podstawie takich sprawdzeń.
  • Konwersję tekstu na liczbę warto robić z obsługą błędów (try/except) lub prostszymi sprawdzeniami jak isdigit() (pamiętaj — isdigit() działa tylko dla nieujemnych liczb całkowitych bez znaku plus/minus).

Krok po kroku

  1. Zadaj pytanie użytkownikowi (np. input()).
  2. Sprawdź, czy odpowiedź spełnia kryteria (walidacja).
  3. Jeśli tak — przerwij pętlę (break) i użyj danych dalej.
  4. Jeśli nie — poinformuj użytkownika i poproś o poprawę (pętla pyta ponownie).

Przykłady

Przykład 1 — prosta walidacja (tylko dodatnie liczby całkowite):

```python
while True:
    s = input("Podaj dodatnią liczbę całkowitą: ")
    # isdigit() zwraca True tylko gdy wszystkie znaki to cyfry (0-9)
    if s.isdigit() and int(s) > 0:
        n = int(s)
        break
    else:
        print("To nie jest poprawna liczba. Spróbuj jeszcze raz.")

print("Wpisałeś:", n)
```

Wyjaśnienie działania przykładu:

  1. Wejście do pętli while True — pętla będzie się powtarzać aż napotkamy break.
  2. Czytamy tekst od użytkownika (input()).
  3. Sprawdzamy: czy cały tekst to cyfry (isdigit()) i czy po zamianie na liczbę jest większy niż 0.
  4. Jeżeli tak — zamieniamy na int, przypisujemy do n i wychodzimy z pętli.
  5. W przeciwnym razie informujemy użytkownika i pętla pyta ponownie.

Przykład 2 — bezpieczna konwersja (obsługa błędów):

```python
while True:
    s = input("Podaj liczbę całkowitą: ")
    try:
        n = int(s)   # próba konwersji na int
        break        # jeśli się uda, przerywamy pętlę
    except ValueError:
        print("To nie wygląda na liczbę. Spróbuj ponownie.")
```
  • W tej wersji nie polegamy na isdigit(), tylko próbujemy wykonać int(s). Jeśli tekst nie jest poprawną reprezentacją liczby całkowitej, Python zgłasza ValueError i trafiamy do bloku except.
  • Takie podejście jest bardziej ogólne (działa też z liczbami ujemnymi zapisanymi ze znakiem '-', a także z różnymi białymi znakami), dlatego jest często bezpieczniejsze.

Uwaga na typowe pułapki

  • isdigit() nie rozpozna liczb ujemnych ani liczb ze znakiem plus, ani ciągów zawierających spacje. Dla takich przypadków lepszy jest try/except.
  • Pamiętaj o odpowiednich komunikatach dla użytkownika — dobrze dobrany komunikat pomaga szybciej wprowadzić poprawne dane.
  • Unikaj nieskończonych pętli bez sposobu na wyjście — zawsze miej w kodzie warunek lub break.

Zadanie (do samodzielnego rozwiązania)

Stwórz program, który pyta użytkownika o hasło i wymaga, żeby:

  • miało co najmniej 6 znaków,
  • zawierało przynajmniej jedną cyfrę.

Powtarzaj pytanie, aż hasło będzie poprawne. Po akceptacji wypisz: Hasło ustawione.

Podpowiedzi i wskazówki (to nie jest gotowe rozwiązanie):

  1. Użyj while True, żeby ponawiać pytanie.
  2. Sprawdź długość tekstu funkcją len() (np. len(haslo) >= 6).
  3. Sprawdź, czy w haśle znajduje się cyfra — możesz to zrobić iterując po znakach i używając char.isdigit(), albo użyć dowolnej konstrukcji warunkowej, która znajdzie cyfrę.
  4. Gdy obie zasady są spełnione — użyj break, aby opuścić pętlę i wypisać komunikat.

Szablon, który możesz wypełnić samodzielnie (wstaw brakujące warunki):

```python
while True:
    haslo = input("Podaj hasło: ")
    # sprawdź tutaj długość i obecność cyfry
    # jeśli hasło jest poprawne:
    #     break
    # w przeciwnym razie wypisz wskazówkę i zapytaj ponownie

print("Hasło ustawione")
```

Jeśli utkniesz, zacznij od napisania krótkiego fragmentu, który sprawdza tylko długość, potem dodaj sprawdzenie cyfry. Testuj program na kilku przykładach (np. "abc", "abcdef", "a1b2c3").

Praca z pętlami i walidacją jest ważna — w praktycznych programach często musimy upewnić się, że dane od użytkownika są poprawne, zanim zaczniemy je przetwarzać. Jeśli chcesz, mogę sprawdzić Twój szkic rozwiązania i podpowiedzieć, co ulepszyć.

Materiały pomocnicze (jeśli chcesz poczytać więcej): lekcja o pętlach w Pythonie oraz rozdział o break/continue i instrukcjach warunkowych.