sum67:为什么它会超时"?

时间:2017-08-22 15:07:01

标签: python timeout

对于" sum67"在codebat中进行python练习,我的所有结果都返回了" Timed out"结果。尽管如此,当我在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

4 个答案:

答案 0 :(得分:0)

您的代码失败的原因是因为您认为每个7后面都会有ValueError ,而且可能不是这种情况。

当发生这种情况时,您的代码可能是:

    7存在时,
  • 会引发[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,否则只需继续添加条款即可。如果您这样做,则会停止添加,直到找到Project settings -> Screens

请注意,这绝对可以改善。它是快速而肮脏的类型的解决方案passes the tests

答案 1 :(得分:0)

您将获得timeout error因为while <int> in <array>将继续返回true,直到您在while循环条件中编辑正在测试的内容。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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