如果声明没有解雇

时间:2016-09-18 14:32:41

标签: python

此代码对字符串中的字符进行递归二分搜索。

print语句没有被注释掉时,它似乎与递归和二分法一起使用,但返回if的{​​{1}}语句似乎没有触发。

True

3 个答案:

答案 0 :(得分:1)

您需要返回每个递归调用的结果。

出于某种原因,这是一个非常常见的错误。

答案 1 :(得分:0)

您不应该在计算中使用round,因为您使用float而不是int作为字符串的索引。
改为使用int

str(b[int(c/2)]))

答案 2 :(得分:0)

此代码有效,在递归函数调用之前返回:

def isIn(char, aStr):
'''
char: a single character
aStr: an alphabetized string

returns: True if char is in aStr; False otherwise
'''
b = sorted(aStr)
c = len(aStr)
# print("string b " + str(b))
# print("c " + str(c))
# print("element middle: " + str(b[round(c/2)]))
#print("char: " + str(char))
#print(str(char) == str(b[round(c/2)]))
if ((str(char) == str(b[int(c/2)]))): # this if statement does not seem to fire
    return True
elif (c == 1 and char != str(b[round(c/2)])) or (c == 0 and char != "") :
    return False
    #print("false")
else:

    #if str(char) == str(b[round(c/2)]):
     #   return True
       # print("true")
    if char > b[round(c/2)]:
        return isIn(char, b[round(c/2):c])

    elif char < b[round(c/2)]:
        return isIn(char, b[0:round(c/2)])
    else:
        return False
        #print('fales')