我是编程的新手,我正在尝试将给定列表中的所有数字加起来,除了数字13和数字13之后的任何数字。我遇到的问题是如果13结尾了列表中不会添加第一个数字。任何帮助,将不胜感激。我的代码如下:
def sum13(nums):
total = 0
for i in range(len(nums)):
if nums[i] == 13 or nums[i-1] == 13:
total += 0
else:
total += nums[i]
return total
def main():
print sum13([1, 2, 2, 1, 13])
print sum13([1, 2, 13, 2, 1, 13])
main()
这两个例子应该产生6和4,但是它会产生5和3,因为它不会在开头添加1。
答案 0 :(得分:2)
在Python中,索引-1
表示列表中的最后一项。因此,在您的代码中,当i
为0
(第一个数字)时,它将不会计算,因为列表中的最后一项是13
。
您可以通过在该条件下i > 1
进行简单检查来解决此问题:
if nums[i] == 13 or (i > 0 and nums[i - 1] == 13):
另外,对于它的价值,因为我们都喜欢单行,这里有一个等同的功能:
return sum(num for i, num in enumerate(nums) if num != 13 and (i == 0 or nums[i - 1] != 13))
答案 1 :(得分:0)
我的主张:
def sum13(numbers):
total = 0
skip = False
for i, number in enumerate(numbers):
if number == 13:
skip = True
continue
if skip:
skip = False
continue
total += number
return total
def test():
cases = [
([13, 1, 1], 1),
([13, 1, 5, 13], 5),
([1, 13, 5, 1], 2),
([1, 2, 2, 1, 13], 6),
([1, 2, 13, 2, 1, 13], 4),
]
for case in cases:
assert sum13(case[0]) == case[1]
test()
了解枚举是否适用于您: https://docs.python.org/3.4/library/functions.html#enumerate