Напишіть програму на мові Python даю 100 балів! Буду дуже вдячний!
13-цифровий міжнародний стандартний номер книги (International Standard Book Number) – це унікальний код, який ідентифікує книгу в продажі. Остання цифра називається перевірочною цифрою (check digit) і використовується для перевірки на помилки. Для обчислення цього значення
1) кожну з 12 перших цифр почережно множать на 1 або 3,
2) додають добутки та ділять результат за модулем 10. Перевірочна цифра отримується відніманням від 10 отриманого результату.
Наприклад, для ISBN 9789609319614:
9×1+7×3+8×1+9×3+6×1+0×3+9×1+3×3+1×1+9×3+6×1+1×3=126.
Перевірочна цифра – 10−(126 10)=10−6=4.
Напишіть програму, що зчитуватиме 13-цифровий ISBN та перевірятиме останню цифру на валідність цього номеру.
Ответ:
def check_ISBN(num):
if len(str(num)) != 13:
return False
ISBN_sum = 0
for ix,digit in enumerate(map(int, str(num)[:-1])):
ISBN_sum += digit * (1 if ix%2==0 else 3)
return int(str(num)[-1]) == 10-ISBN_sum%10
Объяснение:
На вход функции идёт номер ISBN.
Сначала проверим что в числе 13 цифр. Если нет, то сразу говорим, что ISBN неправильный.
В функции объявляем ISBN_sum в котором будем считать сумму как в задании.
Объявляем цикл где ix — это индекс цифры в числе, а digit цифра. Для того чтобы пройтись по числу как по массиву, приводим его к строковой переменной и используем функцию map, таким образом получаем список с искомыми цифрами.
Считаем сумму. Для каждой цифры смотрим модуль индекса (ix%2), если он равен нулю, то берём единицу, если не нулю, т.е. единице, то берём 3. Таким образом для каждой цифры чередуем 1 и 3 как в задании. Это чередование умножаем на число и добавляем к сумме.
Далее по заданию проверяем равно ли последнее число в ISBN 10-сумма модуль 10.
Функция вернёт ИСТИНУ если условие выполнено и ЛОЖЬ если числа не совпали.
Далее данную функцию можно использовать на искомом номере и нескольких сгенерированных. См. скрин.