Что мне нужно сделать, это взять 10-значный номер git ISBN и проверить его действительность в соответствии с этим правилом:
Согласно официальному изданию Международного агентства ISBN 2001 года руководство пользователя, [47] ISBN-10 проверка di git (который является последним di git из 10-di git ISBN) должна находиться в диапазоне от 0 до 10 (символ «X» используется для 10 ) и должна быть такой, чтобы сумма десяти цифр, каждая из которых умножалась на ее (целочисленный) вес, уменьшившийся с 10 до 1, была кратна 11.
Другими словами, если число 0-306-40615-2, мне нужно вычислить:
(0 * 10) + (3 * 9) + (0 * 8) + (6 * 7) + (4 * 6) + (0 * 5) + (6 * 4) + (1 * 3) + (5 * 2) + (2 * 1) mod 11
Хотя предложения или советы о том, как написать такую функцию, приветствуются, мой главный вопрос заключается в том, У Python уже есть способ сделать это, возможно, в модуле math
.
Это моя попытка, но циклы for не работают, потому что внутренний цикл запускается заново. Плюс это просто кажется грязным!
checksum = 0
for digit in isbn:
for weight in range(10, 0, -1):
if digit == 'X':
checksum += 10 * weight
break
checksum += int(digit) * weight
break
return checksum % 11```