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

テストに 2 つのバグがあります。

ここでは、1 つの要素を含むリスト全体に対してテストしています。

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 に答える