我尝试编写一个简单的代码,该代码采用一个列表(nums)并对列表中的数字求和,只要数字不是13或者在13之后不立即发生。这是我的代码:
def sum13(nums):
sum = 0
if nums[0] != 13:
sum += nums[0]
for i in range(len(nums)):
if nums[i] != 13 and nums[i - 1] != 13:
sum += nums[i]
return sum
我不断收到编译错误:'列出索引超出范围'。我没有改变列表的索引,当我调用nums [0]时,它在for循环之外,它将i限制在0和len(nums)之间,所以我' m不知道如何解决这个问题,或者如何以更优雅的方式编写代码来消除这个问题。
答案 0 :(得分:0)
有趣......我试过你的代码看起来很好,但它不会像你想要的那样表现......
我试过了:
eval
返回59,应该是(10 + 11 + 14 + 14)= 49。
为什么会这样?这是因为你检查循环nums [i-1]。
由于第一个循环中i = 0,因此i-1 = -1。因此,nums [-1]是列表中的最后一项。
你能尝试一下这个小测试吗?
解决此问题的一种方法是:
def sum13(nums):
sum = 0
if nums[0] != 13:
sum += nums[0]
for i in range(len(nums)):
print 'Current number:', str(nums[i])
print 'Previous number:', str(nums[i-1])
if nums[i] != 13 and nums[i - 1] != 13:
sum += nums[i]
return sum
ls = [10,11,13,12,14,14]
print 'Total sum:', str(sum13(ls))
如果它仍然不起作用,您可以分享您的代码和测试吗?
如评论中所述:
def sum13(nums):
sum = 0
if nums[0] != 13:
sum += nums[0]
for i in range(1, len(nums)):
print 'Current number:', str(nums[i])
print 'Previous number:', str(nums[i-1])
if nums[i] != 13 and nums[i - 1] != 13:
sum += nums[i]
return sum
ls = [10,11,13,12,14,14]
print 'Total sum:', str(sum13(ls))
干杯,
答案 1 :(得分:0)
如果nums
为[]
,则访问nums[0]
会引发IndexError
。
顺便说一句:如果使用while-loop
,你会得到一个更简单的解决方案,见下文:
def sum13(nums):
sum = 0
i = 0
while i < len(nums):
x = nums[i]
if x == 13:
# skip current element and next element
i += 2
else:
sum += x
i += 1
return sum