1

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

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,当我使用“运行当前文件”按钮时,它返回None,但是当我使用“运行选定的文本”按钮时,它返回True。这怎么可能发生?

4

1 回答 1

0

您的测试中有两个错误。

您正在测试整个列表,其中包含一个元素,这里:

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. Python 2 允许这种比较,但在这种情况下将按类型名称对类型进行排序。str总是会大于list,所以这个分支总是正确的。

char改为测试:

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

尽管如此,即使纠正了这些错误,您实际上仍然可以返回True给定的样本:

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

因为n角色恰好位于您测试的第一个中点。

于 2015-06-24T09:36:04.303 回答