对于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)