我正在研究以下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/