Применить уравнение к одному целому - PullRequest
0 голосов
/ 07 апреля 2020

Короче говоря, у меня есть список номеров ISBN, и я должен вернуть список недопустимых номеров, но у меня возникают проблемы с извлечением int из списка, например 9781523844011, и применением этого уравнения для проверки, если ISBN действителен:

9 + 7x3 + 8 + 1x3 + 5 + 2x3 + 3 + 8x3 + 4 + 4x3 + 0 + 1x3 + 1

Я пробовал следующее:

nf=[]     #nf is the list I want to return and n is the list I'am drawing the ISBN numbers from
for j in range(0, len(n)):
    if len(str(n[j]))!=13:
        nf.append(n[j])
    else:
        val = (sum(int(x) for x in n[::2]) + sum(int(x) * 3 for x in n[1::2]))  #this is the equation code I came up with
        if val%10!=0:
            nf.append(n[j])
        j+=1

Итак, я должен получить список недействительных ISBN:

[9789720046711, 9789896604011]

Но я получаю весь список номеров ISBN (n):

[9789722036757, 9789720046711, 9789720047572, 9789896604011]

1 Ответ

0 голосов
/ 07 апреля 2020

Вы выполняете уравнение для всех номеров ISBN в n, а не для цифр текущего номера ISBN. n - это весь список, поэтому n[::2] и n[1::2] - это кусочки всех чисел.

Вам необходимо преобразовать текущее число в список цифр, а затем обработать его.

for isbn in n:
    if len(str(isbn))!=13:
        nf.append(isbn)
    else:
        digits = [int(digit) for digit in str(isbn).split("")]
        val = sum(digits[::2]) + sum(x * 3 for x in digits[1::2])
        if val % 10 != 0:
            nf.append(isbn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...