Python函数返回None(检查了所有琐碎的解决方案,它们都不起作用)



现在,我已经为Python(2.7版本)编写了一个二进制搜索。有时,它工作得很好,但有时,它会返回None,尽管搜索到的值在数组中。我尝试了各种琐碎的方法来解决这个问题:我检查了函数返回的变量是否已定义,返回语句所在的工作流分支是否已执行。并且:变量被定义,分支则被执行

这是代码:

def binarySearch( array, desiderata, iMin, iMax ):
    # Returns the index of the first instance of what we search
    print 'min'
    print iMin
    print 'max'
    print iMax
    
    # If our search array is empty
    if ( iMin > iMax ):
        return None
    
    midP = (iMin + iMax)/2
    curre = tapeNr( array[midP][TAPE_NUMBER] )
    final = tapeNr( desiderata )
    print 'curre'
    print curre
    print 'final'
    print final
    print 'midP'
    print midP
    
    if ( curre < final ):
        # print midP
        print "t: " + array[midP][TAPE_NUMBER] + ", d: " + desiderata
        binarySearch( array, desiderata, midP + 1, iMax )
    
    else:
        if ( curre > final ):
            # print midP
            print "t: " + array[midP][TAPE_NUMBER] + ", d: " + desiderata
            binarySearch( array, desiderata, iMin, midP - 1 )
    
        else: 
            print 'hooray'
            # Now, find the first occurence of the value I need
            i = midP
            while ( array[i][TAPE_NUMBER] == desiderata ):
                i -= 1
                print i
            print (i + 1)
            return (i + 1)

由于我的调试,有很多"打印"语句。最后一个"print(i+1)"实际上打印了(!)我需要的东西的索引值,但函数仍然返回None。

你知道问题的根源吗?

您忽略递归调用的返回值:

binarySearch( array, desiderata, midP + 1, iMax )

binarySearch( array, desiderata, iMin, midP - 1 )

所以当curre < finalTrue:时

if ( curre < final ):
    # print midP
    print "t: " + array[midP][TAPE_NUMBER] + ", d: " + desiderata
    binarySearch( array, desiderata, midP + 1, iMax )

调用CCD_ 3,然后函数结束。如果没有显式返回,这意味着您的函数返回值将改为None

return语句添加到这些行:

return binarySearch( array, desiderata, midP + 1, iMax )
# ...
return binarySearch( array, desiderata, iMin, midP - 1 )

相关内容

最新更新