错误:列出我的循环中范围内索引



问题是:返回数组中的数字总和,为空数组返回0。除了数字13非常不幸,因此它不计数和13后立即出现的数字也不计算。

我得到了error: list index out of range。我认为这是我的循环问题,但我不明白为什么此代码不会运行。我该如何解决?

def sum13(nums):
  unlucky = False
  if sum(nums) == 0:
   return 0
  for num in nums:
   x = 0
   if nums[x] == 13:
    unlucky = True
    break
   x += 1
  if unlucky == True:
    return sum(nums) - 13 - nums[x+1]
  if unlucky == False:
    return sum(nums)

问题在于此语句

if unlucky == True:
    return sum(nums) - 13 - nums[x+1]

最后一个数字可能是13,在这种情况下nums[x+1]会给您带来错误。

而是使用条件

if unlucky == True:
    return sum(nums[:x+1]) - 13

供将来参考,您如何做到这是循环循环,直到数字(但不包括)数字为13,这将保存检查幸运/不幸和扣除不幸的数字以及可能的索引错误,例如:

def sum13(nums):
    total = 0
    for num in nums:
        if num == 13:
            break
        total += num
    return total

或使用itertools.takewhile

from itertools import takewhile
def sum13(nums):
    until_13 = takewhile(lambda num: num != 13, nums)
    return sum(until_13)

您也可以使用list.index查找13的值,然后总和到该索引,例如:

def sum13(nums):
    try:
        end = nums.index(13)
    except ValueError:
        end = None
    return sum(nums[:end])
l=range(20)
l1=l[:12]
l2=l[13:]
l1.extend(l2)
res=sum([y for y in l1 if y!=13])

您仅适用于nums = [13]的列表索引,因为如果13在nums中,此块将呈现x = 0

for num in nums:
  x = 0
  if nums[x] == 13:
   unlucky = True
   break
 x += 1

因此,nums[x+1]nums = [13]将超出范围。

另一个问题是,代码在包含13个数字的数字中不够。您的代码调整将:

def sum123(nums):
    t = 0
    unlucky = True
    for i in range(len(nums)):
        if nums[i] == 13:
            unlucky = False
        elif unlucky == False and nums[i] != 13:
            unlucky = True        
        else:
            t += nums[i]
    return t

最新更新