我正在研究以下codingbat问题:



我的解决方案是:

def sum67(nums):
    sum = 0
    throwaway = 0
    for i in range(len(nums)):
        if throwaway == 0:
            if nums[i] == 6:
                throwaway = 1
        elif throwaway == 1 and i > 0 and nums[i-1] == 7:
            throwaway = 0
        if throwaway == 0:
            sum += nums[i]
    return sum

我完全知道这不是最好的解决方案,但我只是想知道为什么这是错误的。您能否解释一下为什么这是错误的,在特定情况下会导致错误的结果?

最佳答案

好吧,您的程序有一个错误。检查以下结果:

print sum67([1,2,5])
print sum67([1,2,6,5,7])
print sum67([1,2,6,5,7,6,7])

这将打印:
8
3
16 <-- wrong

如果7后面紧接着是6,则将6和以下所有数字相加。我不确定输入中是否允许超过6 ... 7的范围,但是如果允许,则必须修复算法。

这个简单的实现确实返回正确的数字:
def sum67(nums):
        state=0
        s=0
        for n in nums:
                if state == 0:
                        if n == 6:
                                state=1
                        else:
                                s+=n
                else:
                        if n == 7:
                                state=0
        return s

此外,如果出于某些晦涩的原因不需要使用索引,则可以直接遍历列表的元素(for element in list: ...)。

关于python - CodingBat sum67 : why is this solution wrong?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8385120/

10-13 03:06