首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ISBN程序

Python ISBN程序
EN

Stack Overflow用户
提问于 2012-03-15 01:44:30
回答 3查看 2.7K关注 0票数 0

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

代码语言:javascript
复制
    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()

粗体部分是我遇到麻烦的地方,我似乎不能在列表(numlist)中将输入的10位数字拆分成单独的数字,然后将分离的单独数字乘以11,然后再乘以10,再乘以9,依此类推……对于程序的下一部分,我将需要将这些新的乘数相加在列表中,然后我将使用mod(%)函数来获得余数,然后从11中减去数字,如果对我的任何编码或如何计算ISBN的错误陈述有任何帮助,将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-15 01:55:18

这段代码应该可以让你上路了:

代码语言:javascript
复制
listofnums = [int(digit) for digit in '1234567890']
multipliers = reversed(range(2,12))
multipliednums = [a*b for a,b in zip(listofnums, multipliers)]

字符串是可迭代的,因此如果您迭代它们,每个元素都将作为单字符字符串返回。

int从(有效)字符串构建一个整型。

符号[a*b for a,b in zip(listofnums, multipliers)]是一种列表理解,一种用于将序列映射到新列表的便捷语法。

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

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 01:52:08

我相信list()就是你要找的。

numlist=list(request)

下面是我将如何编写代码。我希望我对代码的解释是正确的。

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2012-03-15 01:59:19

代码语言:javascript
复制
import itertools

if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
    print "no good"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9707185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档