2015-11-23 61 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' –

相關問題