0

我正在尝试在 python 上计算 ISBN 输入的校验位。到目前为止,我...

    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 位数字输入拆分为列表(numlist)中的单个数字,然后将分隔的单个数字乘以 11,然后将下一个数字乘以 10,然后再将下一个数字乘以 9,等等...对于程序的下一部分,我需要将列表中的这些新相乘数字相加,然后我将使用 mod(%) 函数获取余数,然后从 11 中减去数字,对我的任何编码有任何帮助或有关如何计算 ISBN 的错误陈述将不胜感激。谢谢你。

4

3 回答 3

1

这段代码应该让你上路:

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)]是列表推导式,一种将序列映射到新列表的便捷语法。

至于其余的,请在您的 repl 中探索它们。请注意,它reversed返回一个生成器:如果您想查看其中的“内容”,您将需要使用tuplelist强制其评估。由于显而易见的原因,这对于无限生成器来说可能是危险的。

于 2012-03-14T17:55:18.463 回答
0

我相信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()
于 2012-03-14T17:52:08.463 回答
-1
import itertools

if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
    print "no good"
于 2012-03-14T17:59:18.713 回答