在进行二分法搜索以确定单个字符是在按字母顺序排列的字符串中还是在n中时,得到“None”

2024-04-19 05:14:25 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题中提到的,当我运行这段代码时,我得到了“无”。你知道吗

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

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

isIn('n', 'abfnuv')

我已经检查过几次了,我认为在判断aStr是否等于char的过程中可能会发生这种情况,但是我不知道如何纠正它,也不知道它是如何发生的。 提前阅读此帖谢谢!你知道吗

更多信息:

我使用canopy python-2.7,当我使用“run the current file”按钮时,它返回None,但当我使用“run the selected text”按钮时,它返回True。 怎么会这样?你知道吗


Tags: therun代码falsetrue标题lenreturn
1条回答
网友
1楼 · 发布于 2024-04-19 05:14:25

你的测试中有两个错误。你知道吗

您正在对包含一个元素的整个列表进行测试,如下所示:

elif len(aStr)==1:
    return aStr==char

aStr可以设置为['n'],但它仍然不等于'n'。使用索引:

elif len(aStr)==1:
    return aStr[0]==char

下一个,你在这里测试:

elif aStr[(len(aStr)/2)]<aStr:

该分支针对aStr列表进行测试,而不是针对char。python2允许这种比较,但在本例中,它将按类型名对类型进行排序。str总是大于list,所以分支总是真的。你知道吗

改为对char进行测试:

elif aStr[(len(aStr)/2)]<char:

尽管如此,即使更正了这些错误,您仍然能够为给定的示例返回True

>>> isIn('n', 'abfnuv')
True

因为n字符恰好位于您测试的第一个中点。你知道吗

相关问题 更多 >