2016-11-21 69 views
0

我试图在列表中追加7个数字,并且每隔3个数字(从1开始)将其放回到列表中。出于某种原因,数字“1234567”正常工作和预期。但是,当使用数字'1324562'时,它将返回数字3'并返回IndexError。奇怪和意外的“IndexError:弹出索引超出范围”

代码:

number = "1324562" 
digits = [] 
old_list = [] 
total = 0 

for num in number: 
    num = int(num) 
    digits.append(num) 
    old_list.append(num) 
    if digits.index(num) % 2 == 0: 
     try: 
      digits.insert(digits.pop(num-1), num * 3) 
     except IndexError: 
      print("*INCOHERENT SWEARING*") 

for num in digits: 
    total += num 

print(digits, total) 
+2

这不是一个'免费调试我的代码'服务。请逐步调试您的代码,并返回更准确的问题描述(如果您尚未找到它)。 –

+3

达到3时,num-1 = 2 - 数字[]只包含1和3. pop返回给定索引的值。在这种情况下数字[2]不存在。 –

回答

1

诀窍是该指数从内容分离出来 - 他们是不相关的。下面是我解决这个:

number = "1324562" 
digits = [] 

# enumerate returns the index number(i) and the item(n) as a tuple. 
# A string is a sequence, so we can iterate through it 
for i, n in enumerate(number): 
    n = int(n) 
    if i % 2 != 0: 
     n *= 3 
    digits.append(n) 

print(digits) 

给出:

[1, 9, 2, 12, 5, 18, 2] 

如果你想在原来的字符串列表(你必须在你的代码中的变量old_list),那么你可以创建一个具有:

old_list = [int(n) for n in number]