Poprawność numeru PESEL

Zadanie 13 z 13 · rozdział 10Trudność: 2 z 3zipcyfra kontrolnanapisy

Treść zadania

Numer PESEL składa się z 11 cyfr $c_1 c_2 \ldots c_{11}$. Ostatnia cyfra $c_{11}$ jest cyfrą kontrolną: mnożymy pierwsze 10 cyfr przez wagi 1 3 7 9 1 3 7 9 1 3, sumujemy iloczyny, a cyfra kontrolna to

$c_{11} = (10 - S \bmod 10) \bmod 10$, gdzie $S = 1 \cdot c_1 + 3 \cdot c_2 + 7 \cdot c_3 + 9 \cdot c_4 + 1 \cdot c_5 + 3 \cdot c_6 + 7 \cdot c_7 + 9 \cdot c_8 + 1 \cdot c_9 + 3 \cdot c_{10}$.

Dziesiąta cyfra $c_{10}$ oznacza płeć: parzysta — kobieta, nieparzysta — mężczyzna.

Wczytaj napis i sprawdź, czy jest poprawnym numerem PESEL, czyli czy:

  • ma dokładnie 11 znaków,
  • każdy znak jest cyfrą,
  • cyfra kontrolna zgadza się z wyliczoną ze wzoru.

Dla poprawnego numeru wypisz dodatkowo płeć. Nie sprawdzaj poprawności daty urodzenia zapisanej w numerze (cyfry 1–6).

Dane wejściowe

  • 1. linia: napis bez spacji (może zawierać znaki niebędące cyframi i mieć dowolną długość)

Dane wyjściowe

  • Dla poprawnego numeru dwie linie: Poprawny, a w drugiej kobieta lub mężczyzna.
  • W przeciwnym razie jedna linia: Niepoprawny.

Uwagi

  • To, czy znak jest cyfrą, sprawdzisz warunkiem znak in "0123456789", a cyfrę zamienisz na liczbę przez int(znak).
  • Wagi zapisz w liście [1, 3, 7, 9, 1, 3, 7, 9, 1, 3] i przejdź po parach (cyfra, waga) za pomocą zip(numer, wagi) — zip kończy na krótszym ciągu, więc weźmie tylko 10 pierwszych cyfr.

Przykłady

Wejście
44051401359
Wyjście
Poprawny
mężczyzna

$S = 1 \cdot 4 + 3 \cdot 4 + 7 \cdot 0 + 9 \cdot 5 + 1 \cdot 1 + 3 \cdot 4 + 7 \cdot 0 + 9 \cdot 1 + 1 \cdot 3 + 3 \cdot 5 = 101$, więc cyfra kontrolna to $(10 - 1) \bmod 10 = 9$ — zgadza się. Dziesiąta cyfra 5 jest nieparzysta.

Wejście
44051401358
Wyjście
Niepoprawny

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 10

Zadania w tym rozdziale ćwiczą jednoczesną pracę na dwóch listach (lub dwóch napisach traktowanych jak ciągi znaków): łączenie, porównywanie, przechodzenie po indeksach i scalanie list posortowanych. Pod koniec rozdziału poznasz zbiory (set) — kolekcje bez powtórzeń, które pozwalają jednym działaniem wyznaczyć część wspólną, sumę czy różnicę dwóch list — oraz funkcje zip i enumerate, ułatwiające przechodzenie po dwóch ciągach naraz.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj listę:”.
  • Każda lista zajmuje na wejściu jedną linię, a jej elementy są oddzielone pojedynczymi spacjami, np. 5 3 7 2. Najpierw podana jest lista 1, w następnej linii lista 2. Każda lista ma co najmniej jeden element.
  • Listę liczb całkowitych wczytasz tak: lista = [int(x) for x in input().split()] (dla liczb zmiennoprzecinkowych użyj float zamiast int).
  • Gdy wynikiem jest lista, wypisz ją tak, jak robi to print(lista) w Pythonie: w nawiasach kwadratowych, elementy oddzielone przecinkiem i spacją, np. [1, 2, 3]. Pusta lista to [].
  • Gdy treść mówi o elementach „oddzielonych przecinkami bez spacji”, wypisz je w jednej linii, np. 5,1,3, bez przecinka na końcu — np. print(*lista, sep=",").

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
02070803628
Oczekiwane wyjście
Poprawny
kobieta

Test 2

Nie uruchomiono
Wejście
12345678910
Oczekiwane wyjście
Poprawny
mężczyzna

Test 3

Nie uruchomiono
Wejście
00000000000
Oczekiwane wyjście
Poprawny
kobieta

Test 4

Nie uruchomiono
Wejście
12345678903
Oczekiwane wyjście
Poprawny
kobieta

Test 5

Nie uruchomiono
Wejście
12345678904
Oczekiwane wyjście
Niepoprawny

Test 6

Nie uruchomiono
Wejście
4405140135
Oczekiwane wyjście
Niepoprawny

Test 7

Nie uruchomiono
Wejście
440514013590
Oczekiwane wyjście
Niepoprawny

Test 8

Nie uruchomiono
Wejście
4405140135X
Oczekiwane wyjście
Niepoprawny

Test 9

Nie uruchomiono
Wejście
abcdefghijk
Oczekiwane wyjście
Niepoprawny
Uruchom z własnymi danymi