Вопрос
Я пытаюсь вычислить контрольную цифру для ввода ISBN на Python.пока у меня есть...
def ISBN():
numlist = []
request = raw_input("Please enter the 10 digit number: ")
if len(request) == 10:
**numlist == request
print numlist**
if len(request) != 10:
print "Invalid Input"
ISBN()
ISBN()
Жирным шрифтом обозначен тот момент, когда у меня возникли проблемы: я не могу разделить вводимые 10 цифр на отдельные числа в списке (список чисел), а затем умножить отдельные отдельные числа на 11, затем следующее на 10, затем следующее на 9 и т. д.В следующей части программы мне нужно будет сложить эти новые умноженные числа в список вместе, затем я воспользуюсь функцией mod(%), чтобы получить остаток, а затем вычту число из 11, любая помощь с любым моим кодированием. или неправильные утверждения о том, как рассчитать ISBN, были бы очень признательны.Спасибо.
Решение
Этот код должен заставить вас на свой путь:
listofnums = [int(digit) for digit in '1234567890']
multipliers = reversed(range(2,12))
multipliednums = [a*b for a,b in zip(listofnums, multipliers)]
.
Строки неразмерны, поэтому, если вы их итерете их, каждый элемент возвращается как односигнальная строка.
int
создает int из (действительной) строки.
Обозначения [a*b for a,b in zip(listofnums, multipliers)]
- это понимание списка, удобный синтаксис для сопоставления последовательностей в новые списки.
Отдохнуть, исследуйте их в вашей репре.Обратите внимание, что reversed
возвращает генератор: если вы хотите увидеть, что «в», вам нужно будет использовать tuple
или list
, чтобы заставить его оценку.Это может быть опасно для бесконечных генераторов по очевидным причинам.
Другие советы
Я считаю list()
это то, что вы ищете.
numlist=list(request)
Вот как я бы написал код.Надеюсь, я правильно интерпретирую код.
def ISBN():
request = raw_input("Please enter the 10 digit number: ")
if len(request) == 10:
numlist = list(request)
print numlist
else:
print "Invalid Input"
ISBN()
import itertools
if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
print "no good"
.