i-1循环找不到正确的值

时间:2018-10-04 14:38:08

标签: python-3.x list loops

任务:

返回数组中数字的总和,对于空数组返回0。除了13号是非常不幸的数字之外,因此它不会计数,紧接在13号之后的数字也不会计数。

预期的测试样本:

  1. sum13([1,2,13,2,1,13])→4
  2. sum13([1、2、2、1、13])→6

我的代码产生以下结果:

  #sum13([1, 2, 13, 2, 1, 13]) → 3
  #sum13([1, 2, 2, 1, 13]) → 5

  def sum13(nums):
  s = 0
  if not nums:
    return 0
  for i in range(len(nums)):
    if nums[i]==13 or nums[i-1]==13:
      s += 0
    else:
      s += nums[i]
  return s

为什么在最后13个数字之前不计算数字?

UPD:

感谢您的评论,了解问题所在。像这样正确:

  def sum13(nums):
  s = 0
  if not nums:
    return 0
  for i in range(len(nums)):
    if nums[i]==13 or (nums[i-1]==13 and i-1>=0):
      s += 0
    else:
      s += nums[i]
  return s

2 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为对于循环的第一遍,i-1

我认为您可以尝试使用此版本以提供所需的内容:

def sum13(nums):
    s = 0
    if nums:
        prev = False
        for i in range(len(nums)):
            if not prev and nums[i] != 13:
                s += nums[i]
            prev = nums[i] == 13
    return s

答案 1 :(得分:0)

您的循环从0索引开始,因此在第一次迭代中,您正在检查nums [0] == 13还是nums [-1] == 13(在python -1索引中会为您提供列表的最后一个元素) 。因此,在两个测试用例中,条件都是真实的,因为最后一个元素为13,这就是未在s中添加1的原因。 解决方案是从1开始索引。