2017-07-31 96 views
2

这里在这quiz它告诉我编写一个代码,确保一个字符串是否在一个字母顺序排序的字符串中,它告诉我二分法搜索以确定一个字符是否在字符串中,并告诉我写一个递归代码,而不是(在我...)使用“在”如何编写代码来确定一个字符是否在字符串中?

我的代码是这样的:

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

    returns: True if char is in aStr; False otherwise 
    ''' 
    var = 0 
    if char == '' and aStr == '': 
     return True 
    elif char == '' or aStr == '' : 
     return False 
    elif aStr[int((len(aStr))/2)] == char : 
     return True 
    elif aStr[int((len(aStr))/2)] < char : 
     var = int((len(aStr))/2) 
     return isIn(char , aStr[var:]) 
    elif aStr[int((len(aStr))/2)] > char : 
     var = int((len(aStr))/2) 
     return isIn(char , aStr[0 : var]) 

但是当我传递值一样(字符=“O”而aStr =“efggnqu” ,或者char ='y'aStr ='orstv',或者char ='y'aStr ='aamotv')它给了我一个这样的错误:

Traceback (most recent call last): 
    File "submission.py", line 21, in isIn 
    return isIn(char , aStr[0 : var]) 
    File "submission.py", line 18, in isIn 
    return isIn(char , aStr[var:]) 
    File "submission.py"...OUTPUT TRUNCATED 

解决方案是什么?

+0

你可以简单地检查'焦炭在aStr'它将返回真或假 – Gahan

+0

@Gahan的指示说不要。 – anonymoose

回答

3

这里有一个修复:

def isIn(char, aStr): 
    var = len(aStr) // 2 #Pulled out for readability (and speed) 
    if char == '' and aStr == '': 
     return True 
    elif char == '' or aStr == '' : 
     return False 
    elif aStr[var] == char: 
     return True 
    elif aStr[var] < char: 
     return isIn(char, aStr[var + 1:]) 
    elif aStr[var] > char: 
     return isIn(char, aStr[:var]) 

的关键部分是从倒数第三行了+1。没有它,单个角色会一遍又一遍地传递。 1 // 2舍入为0,"n"[0:]再次为"n"

输出示例:

>>> isIn("o", "efgnqu") 
False 
>>> isIn("y", "orstv") 
False 
>>> isIn("y", "aamotv") 
False 
>>> 
相关问题