Algorytm Luhna (numer karty)
Treść zadania
Numery kart płatniczych mają ostatnią cyfrę kontrolną, dzięki której łatwo wykryć literówkę. Sprawdza się ją algorytmem Luhna:
- Numeruj cyfry od prawej strony, zaczynając od
1(ostatnia cyfra ma pozycję1, przedostatnia2itd.). - Każdą cyfrę na pozycji parzystej (
2,4,6, …) pomnóż przez2. Jeśli wynik jest większy niż9, odejmij od niego9. - Zsumuj wszystkie otrzymane wartości: zmienione cyfry z pozycji parzystych i niezmienione cyfry z pozycji nieparzystych.
- Numer jest poprawny, jeśli suma jest podzielna przez
10.
Wczytaj numer jako liczbę całkowitą i sprawdź go algorytmem Luhna, wyznaczając cyfry za pomocą % 10 i // 10.
Dane wejściowe
- 1. linia:
n— numer karty, liczba naturalna mająca od1do19cyfr
Dane wyjściowe
Jedno słowo: Poprawny, jeśli numer przechodzi test Luhna, w przeciwnym razie Niepoprawny.
Uwagi
- W każdym obrocie pętli weź ostatnią cyfrę (
n % 10), a potem usuń ją z liczby (n //= 10). Dodatkowy licznik (albo zmienna przełączana na zmianę) powie Ci, czy bieżąca cyfra stoi na pozycji parzystej. - Odjęcie
9od podwojonej cyfry to to samo, co zsumowanie cyfr wyniku, np. $2 \cdot 8 = 16$, a $16 - 9 = 7 = 1 + 6$.
Przykłady
79927398713
Poprawny
Cyfry od prawej: 3 1 7 8 9 3 7 2 9 9 7. Cyfry z pozycji parzystych (1, 8, 3, 2, 9) po podwojeniu i ewentualnym odjęciu 9 dają 2, 7, 6, 4, 9 (suma 28). Pozostałe cyfry (3, 7, 9, 7, 9, 7) sumują się do 42. Razem $28 + 42 = 70$, a 70 dzieli się przez 10.
79927398710
Niepoprawny
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 5
Zadania w tym rozdziale ćwiczą wyznaczanie cyfr liczby w pętli: ostatnią cyfrę liczby n daje n % 10, a dzielenie całkowite n // 10 usuwa ją z liczby.
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ę. - „Cyfry od końca” oznacza kolejność od cyfry jedności do najwyższej cyfry (tak, jak wyznacza je
n % 10in // 10). - Liczba
0ma jedną cyfrę:0. - 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.
Przywrócono Twój zapisany kod.
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 uruchomiono59
Poprawny
Test 2
Nie uruchomiono95
Niepoprawny
Test 3
Nie uruchomiono5
Niepoprawny
Test 4
Nie uruchomiono4111111111111111
Poprawny
Test 5
Nie uruchomiono4111111111111112
Niepoprawny
Test 6
Nie uruchomiono1234567812345670
Poprawny
Test 7
Nie uruchomiono1234567890123456785
Poprawny
Test 8
Nie uruchomiono1234567890123456789
Niepoprawny