Funkcja sprawdzona testami (assert)

Zadanie 17 z 17 · rozdział 6Trudność: 1 z 3funkcjeasserttestybool

Treść zadania

Napisz funkcję czy_przestepny(rok), która zwraca True, jeśli rok jest przestępny, a False w przeciwnym razie.

Rok jest przestępny, jeśli jest podzielny przez 4, ale nie przez 100 — albo jeśli jest podzielny przez 400.

Kod startowy zawiera pięć testów funkcji zapisanych instrukcją assert. Są wykonywane, zanim program zacznie wczytywać dane. Następnie program wczytuje n lat i dla każdego wypisuje Tak (rok przestępny) albo Nie.

Dane wejściowe

  • 1. linia: liczba lat n
  • kolejne n linii: lata — po jednej liczbie naturalnej w linii

Dane wyjściowe

n linii — dla każdego roku Tak albo Nie.

Ograniczenia

  • $n \ge 1$
  • $1 \le \text{rok} \le 10000$

Uwagi

  • assert warunek nie robi nic, jeśli warunek jest prawdziwy. Jeśli jest fałszywy, program natychmiast się zatrzymuje z błędem AssertionError. Dzięki temu od razu widać, że funkcja działa źle.
  • Gdy test się nie powiedzie, zobaczysz komunikat w rodzaju:
    `
    Traceback (most recent call last):
    File "main.py", line 9, in <module>
    assert czy_przestepny(1900) == False
    AssertionError
    `
    Czytaj go od dołu: AssertionError mówi, że nie powiódł się test, a linia nad nim (i jej numer, zależny od Twojego kodu) pokazuje, który — tutaj funkcja zwróciła złą odpowiedź dla roku 1900. Popraw funkcję i uruchom program ponownie.
  • Do testu możesz dopisać komunikat, który pojawi się przy błędzie: assert czy_przestepny(1900) == False, "1900 nie jest przestępny".
  • Nie usuwaj testów — możesz za to dopisać własne.

Przykład

Wejście
3
2024
1900
2000
Wyjście
Tak
Nie
Tak

Rok 1900 jest podzielny przez 100, ale nie przez 400, więc nie jest przestępny.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 6

Zadania w tym rozdziale uczą pisania funkcji: definiowania ich instrukcją def, przekazywania argumentów i zwracania wyniku instrukcją return.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt a, b, c…) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Treść mówi, jaką funkcję napisać (nazwa, parametry, zwracana wartość). Program wczytuje dane, wywołuje funkcję i wypisuje zwrócony przez nią wynik.
  • „Funkcja zwraca” oznacza użycie instrukcji return. Funkcja nie wczytuje danych i nie wypisuje wyniku sama — robi to reszta programu (chyba że treść zadania mówi inaczej).
  • Sekcja „Kod startowy” zawiera gotowy szkielet: nagłówek funkcji oraz linie, które wczytują dane i wypisują wynik. Wystarczy uzupełnić ciało funkcji.
  • Liczby na wejściu podane są w osobnych liniach — wczytuj je dokładnie w podanej kolejności.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.

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
1
2023
Oczekiwane wyjście
Nie

Test 2

Nie uruchomiono
Wejście
1
2400
Oczekiwane wyjście
Tak

Test 3

Nie uruchomiono
Wejście
4
1996
2100
1600
2001
Oczekiwane wyjście
Tak
Nie
Tak
Nie

Test 4

Nie uruchomiono
Wejście
2
4
100
Oczekiwane wyjście
Tak
Nie

Test 5

Nie uruchomiono
Wejście
5
2020
2021
2022
2023
2024
Oczekiwane wyjście
Tak
Nie
Nie
Nie
Tak
Uruchom z własnymi danymi