Dni między datami (moduł datetime)

Zadanie 9 z 9 · rozdział 3Trudność: 2 z 3datetimedatybiblioteka standardowa

Treść zadania

Wczytaj dwie daty i za pomocą modułu datetime z biblioteki standardowej Pythona oblicz:

  1. liczbę dni między tymi datami — jako wartość bezwzględną różnicy, więc kolejność dat nie ma znaczenia,
  2. nazwę dnia tygodnia pierwszej daty.

Dane wejściowe

6 liczb całkowitych, każda w osobnej linii:

  1. d1 — dzień pierwszej daty
  2. m1 — miesiąc pierwszej daty
  3. y1 — rok pierwszej daty
  4. d2 — dzień drugiej daty
  5. m2 — miesiąc drugiej daty
  6. y2 — rok drugiej daty

Dane wyjściowe

Dwie linie:

  1. liczba dni między datami (liczba całkowita, $\ge 0$),
  2. nazwa dnia tygodnia pierwszej daty — dokładnie jedna z: Poniedziałek, Wtorek, Środa, Czwartek, Piątek, Sobota, Niedziela.

Ograniczenia

  • Obie daty są poprawne (nie musisz ich sprawdzać).
  • $1 \le y1, y2 \le 9999$

Uwagi

  • Moduł datetime udostępnia typ date, który reprezentuje jedną datę. Tworząc ją, podaj kolejno rok, miesiąc, dzień:
    ```python
    from datetime import date
    pierwsza = date(2020, 10, 9)
    druga = date(2021, 1, 1)
    print((druga - pierwsza).days) # 84
    print((pierwsza - druga).days) # -84
    print(pierwsza.weekday()) # 4
    `
  • Różnica dwóch dat to odcinek czasu (timedelta); liczbę dni odczytasz z jego pola .days. Może być ujemna, więc użyj abs(...).
  • Metoda weekday() zwraca 0 dla poniedziałku, 1 dla wtorku, …, 6 dla niedzieli — to inna numeracja niż h w kongruencji Zellera z ZAD-08 (tam 0 oznacza sobotę).
  • Moduł sam uwzględnia lata przestępne. Porównaj go z ZAD-07 i ZAD-08: (data - date(rok, 1, 1)).days + 1 to numer dnia w roku, a weekday() zastępuje wzór Zellera — dobry sposób na sprawdzenie swoich wcześniejszych rozwiązań.

Przykład

Wejście
9
10
2020
1
1
2021
Wyjście
84
Piątek

Od 9 października 2020 do 1 stycznia 2021 mijają 84 dni: 22 do końca października, 30 w listopadzie, 31 w grudniu i 1 w styczniu.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 3

Zadania w tym rozdziale dotyczą walidacji i obliczeń na datach w kalendarzu gregoriańskim.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Liczby wczytuj z osobnych linii, w kolejności z opisu. Data jest zawsze podawana jako trzy liczby: dzień, miesiąc, rok.
  • Komunikaty wypisuj dokładnie jak w treści (kropki, polskie znaki, wielkość liter, spacje).
  • Jeśli zadanie mówi „nie wypisuj nic” — program kończy się bez żadnego wyjścia.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • We wszystkich zadaniach obowiązuje kalendarz gregoriański (także dla lat sprzed 1582 roku). Rok jest przestępny, gdy jest podzielny przez 4 i nie jest podzielny przez 100, albo gdy jest podzielny przez 400 (np. 2024 i 2000 są przestępne, a 2023 i 1900 — nie). Luty ma w roku przestępnym 29 dni, a w nieprzestępnym 28.

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
1
2000
1
1
2000
Oczekiwane wyjście
0
Sobota

Test 2

Nie uruchomiono
Wejście
28
2
2024
1
3
2024
Oczekiwane wyjście
2
Środa

Test 3

Nie uruchomiono
Wejście
28
2
2023
1
3
2023
Oczekiwane wyjście
1
Wtorek

Test 4

Nie uruchomiono
Wejście
1
1
2001
1
1
2000
Oczekiwane wyjście
366
Poniedziałek

Test 5

Nie uruchomiono
Wejście
1
1
1900
1
1
2000
Oczekiwane wyjście
36524
Poniedziałek

Test 6

Nie uruchomiono
Wejście
25
12
2025
1
1
2026
Oczekiwane wyjście
7
Czwartek

Test 7

Nie uruchomiono
Wejście
4
10
2026
31
12
2026
Oczekiwane wyjście
88
Niedziela

Test 8

Nie uruchomiono
Wejście
1
1
1
31
12
9999
Oczekiwane wyjście
3652058
Poniedziałek
Uruchom z własnymi danymi