2015-11-23 35 views
-2

我需要一些帮助。我不知道为什么类型错误,列表索引必须是整数,而不是str,出现。我试图把isbn的第一个字符乘以10,然后乘以9,依此类推。这结束后我需要找到如果总的是11列表索引必须是整数,而不是str,什么是索引?我如何迭代字符串?

isbn = ['0439202116'] 
count = 10 
x = 0 
for x in isbn: 
    total = isbn[x] * count 
    count -= 1 
    x += 1 
    if (total % 11 == 0): 
     print(True) 
    else: 
     print(False) 
+0

列表[0],列表[1],列表[2] ...这里1,2,3代表指数 –

+0

你不是在遍历字符串'isbn'列表,但列表本身。第一次迭代中的“x”将是“0439202116”。 –

+0

Rohit Jain,我如何迭代字符串? – Tosh

回答

0

开始与国际标准书号作为字符串的倍数:

isbn = '0439202116' 
count = 10 
tot = 0 
for x in isbn: 
    tot += int(x) * count 
    count -= 1 

if tot % 11 == 0: 
    print 'True' 
else: 
    print 'False' 

我以为你只是想测试的11倍数在最后总计

+0

而不是使用4行来输出'True'或'假',你可以'打印tot%11 == 0' –

+0

真的我试图保持原来的真实,因为我可以 – gkusner

0

您正在尝试迭代合并数字的字符串列表 - 它只会给您索引0处的项目。索引字符串中的任何给定项目,列表等等是指它按照字符串s的顺序排列以0开头。指数,则参考多个指标。 将您的初始字符串更改为包含ISBN的所有数字的元组,并且它工作正常。

isbn = (0,4,3,9,2,0,2,1,1,6) 
count = 10 
x = 0 
for x in isbn: 
    total = isbn[x] * count 
    count -= 1 
    x += 1 
    if (total % 11 == 0): 
     print(True) 
    else: 
     print(False) 

这让我的输出:

True 
False 
False 
False 
False 
True 
False 
False 
False 
False 
+0

我试图找到,(10 * 0 + 9 * 4 + 8 * 3 + 7 * 9 + 6 * 2 + 5 * 0 + 4 * 2 + 3 * 1 + 2 * 1 + 1 * 6)然后我想看看它的总数是11的倍数。我想我需要在第一行做你正在做的事情,但是你能帮助你做到吗?应该只有一个结果。 – Tosh

+0

此外,我不得不将isbn更改为isbn = ['0','4','3','9','2','0','2','1','1','6' ],有没有办法这样做?与字符串,而不是整数,我似乎无法找到一种方法来将其更改为int – Tosh

0

这是一个情况下,垃圾更普遍的解决方案,您希望您的isbn名单上的多个项目。

isbn = ['0439202116', '0439202115'] 
for str in isbn: 
    count = len(str) 
    total = 0 
    for ch in str: 
     total += count * ord(ch) 
     count -= 1 
    print ("{0} => {1}" .format(str, total % 11 == 0)) 

输出:

0439202116 => True 
0439202115 => False 
+0

还有一件事,我将如何更改您的代码以接受isbn = ['0','4','3','9 ','2','0','2','1','1','6'] – Tosh

+0

只删除第一个'for'循环并将'str'改为'isbn' –

相关问题