首页 > 解决方案 > 使用 i-1 循环找不到正确的值

问题描述

任务:

返回数组中数字的总和,对于空数组返回 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 num 之前的数字?

升级版:

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

  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

标签: python-3.xlistloops

解决方案


发生这种情况是因为对于您的第一次循环,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

推荐阅读