SUM67: 为什么"timed out"?



对于codebat中的"sum67"python练习,我所有的结果都返回"超时"结果。尽管如此,当我在 IDLE 中运行代码时,它似乎可以完美运行。

在练习中,我必须返回列表中所有nums的总和。但是,包括 6 和 7 之间的nums不能计算在内。

有人可以帮我找到原因吗?我快死了

def sum67(nums):
count = 0
while 6 in nums: 
place_6 = nums.index(6)
place_7 = nums.index(7)+1
del nums[place_6:place_7]
for i in nums:
count += i
return count

非常感谢:D

你会得到一个timeout error,因为while <int> in <array>会一直返回true,直到你在while循环条件下编辑正在测试的。

您的解决方案工作正常,所以我认为 CodingBat 有一个非常无情的超时阈值! 是他们,不是你。

代码失败的原因是,您假设对于每个6,之后也会有一个7,而事实可能并非如此。

发生这种情况时,您的代码可以:

  • 不存在7时引发ValueError(尝试使用[1, 6, 2](,或
  • 如果7确实存在但在6之前超时(切片无法从list中删除任何内容,但您还是一遍又一遍地尝试......(尝试与[1, 7, 6, 2](

这个怎么样:

def sum67(nums):
stop = False
count = 0
for number in nums:
if number == 6:
stop = True
elif stop and number == 7:
stop = False
else:
if not stop:
count += number
return count

您只需继续添加条款,除非您遇到6。如果这样做,则在找到7之前停止添加。

请注意,这绝对可以改进。 这是一种快速而肮脏的解决方案,但仍通过了测试。

def sum67(nums):
sum = 0
test=True
for i in nums:
if i == 6:
test=False
continue
if  test == False and i == 7:
test=True
continue
if test==True:
sum+=i
return sum

我遇到了同样的问题,请改用以下代码:

def sum67(nums):
while 6 in nums: 
del nums[nums.index(6):nums.index(7,nums.index(6))+1]
return sum(nums)

相关内容

  • 没有找到相关文章

最新更新