我被要求调试以下功能:
def buggy_find_max(input):
max_val = None
for value in input:
if max_val is None:
max_val = value
if max_val > value:
max_val = value
print max_val
如果调用函数:buggy_find_max([1, 5, 3])
应该返回5。我试图通过以下方式更改它来做到这一点:
def buggy_find_max(input):
for value in input:
max_val = value
if max_val is None:
print None
if max_val > max_val+1:
max_val = max_value+1
print max_val
但什么也没有显示。我怎么可以调试。
在您应该进行调试的第一个版本中,忽略基本情况(max_val is None
),因为这变成了第一个value
上的False
。而是查看第二张检查:
if max_val > value:
max_val = value
想象您的第二个值,value == 5
。此时,到目前为止的最大值max_val == 3
:
if 3 > 5: # False
max_val = value # doesn't happen
这看起来像是正确的行为吗?
要对您的重写版本发表评论(请注意,通常,如果您有一个功能来调试它 不需要完全重新调整):
def buggy_find_max(input):
for value in input:
max_val = value # just sets max_val to each value in turn
if max_val is None: # this won't be True unless None is in input
print None
if max_val > max_val+1: # this can *never* be True
max_val = max_value+1
print max_val