Walidacja danych wejściowych

Zadanie 10 z 10 · rozdział 4Trudność: 2 z 3whilebreakcontinuetry/except

Treść zadania

Program prosi o liczbę całkowitą z przedziału $[1, 100]$ i nie poddaje się, dopóki jej nie dostanie.

Wczytuj kolejne linie. Dla każdej linii:

  • jeśli nie jest liczbą całkowitą — wypisz To nie jest liczba całkowita. i wczytaj następną linię,
  • jeśli jest liczbą całkowitą spoza przedziału $[1, 100]$ — wypisz Liczba spoza zakresu. i wczytaj następną linię,
  • jeśli jest liczbą całkowitą z przedziału $[1, 100]$ — zakończ wczytywanie i wypisz Przyjęto: X, gdzie X to ta liczba.

Linia jest liczbą całkowitą, jeśli funkcja int() potrafi ją zamienić na liczbę (np. 42, -7). Napisy takie jak abc, 3.5 czy pusta linia nie są liczbami całkowitymi.

Dane wejściowe

Kolejne linie tekstu.

Dane wyjściowe

Jeden komunikat o błędzie dla każdej niepoprawnej linii (w kolejności wczytywania), a na końcu linia Przyjęto: X.

Ograniczenia

  • Wśród danych na pewno jest co najmniej jedna poprawna liczba.
  • Po pierwszej poprawnej liczbie mogą występować kolejne linie — program ma je pominąć.

Uwagi

  • Wywołanie int("abc") kończy się błędem ValueError. Taki błąd można „złapać” konstrukcją try/except: Python wykonuje instrukcje z bloku try, a jeśli w którejś z nich wystąpi ValueError, zamiast przerywać program przechodzi do bloku except ValueError:.
    ```python
    try:
    liczba = int("abc")
    print("To się nie wykona.")
    except ValueError:
    print("Nie udało się zamienić napisu na liczbę.")
    `
  • continue przerywa bieżący obrót pętli i od razu przechodzi do następnego, a break kończy całą pętlę.
  • Pętla while True: kręci się „w nieskończoność” — kończy ją dopiero break.
  • Granice przedziału należą do niego: 1 i 100 są poprawne.

Przykład

Wejście
abc
150
3.5
42
Wyjście
To nie jest liczba całkowita.
Liczba spoza zakresu.
To nie jest liczba całkowita.
Przyjęto: 42
Zasady obowiązujące w rozdziale 4

Zadania w tym rozdziale ćwiczą powtarzanie instrukcji za pomocą pętli while i for: wczytywanie danych aż do spełnienia warunku, wypisywanie ciągów liczb, sumowanie i proste obliczenia.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Dane wejściowe wczytuj dokładnie w podanej kolejności, każdą wartość z osobnej linii (o ile nie napisano inaczej).
  • Jeśli wynik ma być „każdy w osobnej linii”, po każdej wartości wypisz znak nowej linii.
  • Jeśli zadanie mówi, że w danym przypadku nic nie trzeba wypisywać, program nie wypisuje nic (nawet pustej linii).

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
7
Oczekiwane wyjście
Przyjęto: 7

Test 2

Nie uruchomiono
Wejście
0
101
100
Oczekiwane wyjście
Liczba spoza zakresu.
Liczba spoza zakresu.
Przyjęto: 100

Test 3

Nie uruchomiono
Wejście
-5
1
50
Oczekiwane wyjście
Liczba spoza zakresu.
Przyjęto: 1

Test 4

Nie uruchomiono
Wejście
dziesięć

2.0
10
Oczekiwane wyjście
To nie jest liczba całkowita.
To nie jest liczba całkowita.
To nie jest liczba całkowita.
Przyjęto: 10

Test 5

Nie uruchomiono
Wejście
1000
x
-1
99
abc
Oczekiwane wyjście
Liczba spoza zakresu.
To nie jest liczba całkowita.
Liczba spoza zakresu.
Przyjęto: 99
Uruchom z własnymi danymi