问题是:返回数组中的数字总和,为空数组返回0。除了数字13非常不幸,因此它不计数和13后立即出现的数字也不计算。
我得到了error: list index out of range
。我认为这是我的循环问题,但我不明白为什么此代码不会运行。我该如何解决?
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)
问题在于此语句
if unlucky == True:
return sum(nums) - 13 - nums[x+1]
最后一个数字可能是13,在这种情况下nums[x+1]
会给您带来错误。
而是使用条件
if unlucky == True:
return sum(nums[:x+1]) - 13
供将来参考,您如何做到这是循环循环,直到数字(但不包括)数字为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])
l=range(20)
l1=l[:12]
l2=l[13:]
l1.extend(l2)
res=sum([y for y in l1 if y!=13])
您仅适用于nums = [13]
的列表索引,因为如果13在nums
中,此块将呈现x = 0
:
for num in nums:
x = 0
if nums[x] == 13:
unlucky = True
break
x += 1
因此,nums[x+1]
的nums = [13]
将超出范围。
另一个问题是,代码在包含13个数字的数字中不够。您的代码调整将:
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