List-2 > sum13 编码蝙蝠问题:'int'对象不可迭代



我的代码有问题。问题是:

返回数组中数字的总和,对于空数组返回0。除了数字13非常不吉利,所以它不算数,紧跟在13后面的数字也不算数。发件人:https://codingbat.com/prob/p167025

def sum13(nums):
if not nums:
return 0
for x in nums:
if x == 13:
break
return sum(x)
if 13 not in nums:
return sums(nums)

问题是我不能组合sum(x(,每次尝试都会出错。有人能提示一下为什么吗?

return位置错误是这里的众多问题之一,但这可能是修复逻辑的一个良好开端。很难确定一个问题,一旦解决,就会产生预期的结果。相反,存在一个普遍的问题,即实现与任务逻辑无关。

通常,您可以将问题分解为更简单的砖块,有点像这样:

def sum13(nums):
# "Return the sum of the numbers in the array" 
#  - let's iterate the array, increasing the sum
res = 0
previous_is_13 = False  # introduced later
# "returning 0 for an empty array."
# for loop will do nothing on empty arrays, as desired
for i in nums:  
# "Except the number 13 is very unlucky, so it does not count"
# so, let's guard it with an if:
if i == 13:
# "numbers that come immediately after a 13 also do not count."
# ok, let's set a flag to indicate that and clear it once we're past 13
previous_is_13 = True
continue
if previous_is_13:
previous_is_13 = False  # clear the flag and proceed to the next item
continue
res += i
return res

一旦你有了基线解决方案,就让它变得更好,例如使用迭代器:

def sum13(nums):
return sum(value for i, value in enumerate(nums)
if value!= 13 and (not i or nums[i-1] != 13))

相关内容

  • 没有找到相关文章

最新更新