在Python中调试功能



我被要求调试以下功能:

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

最新更新