2015-11-23 5 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 в виде строки:

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' или 'False', вы можете просто сделать' print tot% 11 == 0' –

+0

true Я старался оставаться верным оригиналу, так как мог – gkusner

0

Вы пытаетесь выполнить итерацию по списку строк из комбинированных цифр - это даст вам только пункт в индексе 0. указатель любого заданного элемента в строке, список , и т. д. относится к его месту в порядке строки, звезды ting на 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

Im пытаюсь найти, (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, я не могу найти способ изменить его на 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' –

 Смежные вопросы

  • Нет связанных вопросов^_^