use*_*828 0 python binary return function
现在,我已经编写了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)
Run Code Online (Sandbox Code Playgroud)
由于我的调试,有很多'print'语句.最后一个,'print(i + 1)',实际打印(!)我需要的东西的索引值,但该函数仍然返回None.
你有关于问题根源的线索吗?
您忽略递归调用的返回值:
binarySearch( array, desiderata, midP + 1, iMax )
Run Code Online (Sandbox Code Playgroud)
和
binarySearch( array, desiderata, iMin, midP - 1 )
Run Code Online (Sandbox Code Playgroud)
因此,当curre < final是True:
if ( curre < final ):
# print midP
print "t: " + array[midP][TAPE_NUMBER] + ", d: " + desiderata
binarySearch( array, desiderata, midP + 1, iMax )
Run Code Online (Sandbox Code Playgroud)
你打电话binarySearch()后你的功能结束.如果没有显式返回,则意味着将函数返回值设置为None.
return向这些行添加语句:
return binarySearch( array, desiderata, midP + 1, iMax )
# ...
return binarySearch( array, desiderata, iMin, midP - 1 )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |