【问题标题】:Index error saying that the index is out of range索引错误,表示索引超出范围
【发布时间】:2019-04-17 02:51:37
【问题描述】:

我试图返回数组中数字的总和,为空数组返回 0。除了数字 13 和 13 之后的数字之外,它不计算在内。

def sum13(nums):
  p = 0
  for i in range(len(nums)):
    if nums[i] == 13 and nums[i + 1]:
      continue
    p += nums[i]
  return p

当我运行它时,它给了我一个索引错误列表索引我们的范围,我做错了什么?

【问题讨论】:

  • i 达到范围内的最大值时,我怀疑nums[i+1] 的索引超出范围。
  • 是的,如果 i 已经在范围的末尾,i+1 将超出范围。
  • 是的,如果列表的最后一个元素是 13,那么您的代码将尝试访问最后一个 + 1 元素。我也不认为代码做你认为它做的事。
  • 在下面查看我的答案,看看它是否对您有帮助!

标签: python python-3.x


【解决方案1】:

这是你想要的:

def sum13(nums):
    p = 0
    skip_next = False
    for i in range(len(nums)):
        if nums[i] == 13:
           skip_next = True
           continue
        if skip_next:
            skip_next = False
            continue
        p += nums[i]
    return p

【讨论】:

【解决方案2】:

range(len(nums)) 的大小与nums 的大小相同。
因此,nums[i+1] 是不存在的。

【讨论】:

    【解决方案3】:

    问题在于nums[i+1],它超出了您的列表范围。这是使用 while 的另一种解决方案。

    def sum13(nums):
        p=0; i=0
        while i < len(nums):
            if nums[i]==13:
                i = i + 2 #exclude the position after 13
                continue
            else:
                p+=nums[i]
                i=i+1
        return p
    

    【讨论】:

      【解决方案4】:

      if nums[i]==13 and nums[i+1] 不起作用,因为 i+1 将大于列表的长度,nums[i]+1 也只是检查数字是否存在,它不会跳过它。
      如果是13,或者是13之前的数字,你想跳过一个数字,如下

      def sum13(nums):
      
          p = 0
          for i in range(len(nums)):
              if nums[i] == 13 or nums[i-1] == 13:
                  continue
              else:
                  p += nums[i]
          return p
      
      print(sum13([1,2,13,14,5,6,7]))
      #21
      print(sum13([13,14]))
      #0
      print(sum13([13]))
      #0
      print(sum13([]))
      #0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2016-09-08
        相关资源
        最近更新 更多