任务:
返回数组中数字的总和,对于空数组返回0。除了13号是非常不幸的数字之外,因此它不会计数,紧接在13号之后的数字也不会计数。
预期的测试样本:
我的代码产生以下结果:
#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
答案 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开始索引。