Python ISBN程序

时间:2012-03-14 17:44:30

标签: python digit isbn

我正在尝试计算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的错误陈述将不胜感激。 谢谢。

3 个答案:

答案 0 :(得分: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来强制进行评估。由于显而易见的原因,这对于无限发电机来说可能是危险的。

答案 1 :(得分: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()

答案 2 :(得分:-1)

import itertools

if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
    print "no good"