问题是:返回数组中数字的总和,为空数组返回0。除了数字13是非常不吉利的,所以它不计算在13之后立即出现的数字也不计算。
我得到error: list index out of range
。我认为这是我的for循环的一个问题,但我不明白为什么这个代码不会运行。我该如何解决这个问题?
def sum13(nums):
unlucky = False
if sum(nums) == 0:
return 0
for num in nums:
x = 0
if nums[x] == 13:
unlucky = True
break
x += 1
if unlucky == True:
return sum(nums) - 13 - nums[x+1]
if unlucky == False:
return sum(nums)
答案 0 :(得分:0)
问题在于这个陈述
if unlucky == True:
return sum(nums) - 13 - nums[x+1]
最后一个数字可能是13,在这种情况下nums[x+1]
会给你错误。
相反,请使用条件
if unlucky == True:
return sum(nums[:x+1]) - 13
答案 1 :(得分:0)
为了将来参考,你如何做到这一点是循环直到数字(但不包括)数字是13, - 这将保存检查幸运/不幸和扣除不幸的数字,以及可能的索引错误,例如:
def sum13(nums):
total = 0
for num in nums:
if num == 13:
break
total += num
return total
或使用itertools.takewhile
:
from itertools import takewhile
def sum13(nums):
until_13 = takewhile(lambda num: num != 13, nums)
return sum(until_13)
您还可以使用list.index
查找值13,然后求和该索引,例如:
def sum13(nums):
try:
end = nums.index(13)
except ValueError:
end = None
return sum(nums[:end])
答案 2 :(得分:0)
l=range(20)
l1=l[:12]
l2=l[13:]
l1.extend(l2)
res=sum([y for y in l1 if y!=13])
答案 3 :(得分:0)
您的列表索引仅在nums = [13]
范围之外,因为如果13位于x = 0
,此块将呈现nums
:
for num in nums:
x = 0
if nums[x] == 13:
unlucky = True
break
x += 1
因此nums[x+1]
将超出nums = [13]
的范围。
另一个问题是代码在包含13次的nums中是不够的。这种代码调整将:
def sum123(nums):
t = 0
unlucky = True
for i in range(len(nums)):
if nums[i] == 13:
unlucky = False
elif unlucky == False and nums[i] != 13:
unlucky = True
else:
t += nums[i]
return t