2016-09-18 23 views
0

このコードは、文字列内の文字を再帰的に二分探索します。 print文がコメントアウトされていない場合は文が実行されない場合

、再帰と二分でうまく動作するようだが、Trueを返しif文は発射していないようです。

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[round(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)]: 
      isIn(char, b[round(c/2):c]) 

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

あなたが条件という意味ではない、それは「発生しません」と正しく – Li357

+0

インデントされますことを確認してください'str(char)== str(b [round(c/2)])'は 'True'に評価されませんか?インデントが問題である場合、この問題は疑問点です。 –

+0

ドゥープ? http://stackoverflow.com/questions/15210646/i-expect-true-but-get-none –

答えて

1

各再帰呼び出しの結果を返す必要があります。

これは何らかの理由で非常によくある間違いです。

0

数値計算ではroundを使用しないでください。文字列のインデックスとしてintではなくfloatが使用されます。代わりに
使用int

str(b[int(c/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') 
+0

'round'文をすべて' int'に変更する必要があります。あなたが最初のものだけを変えることは私には起こりませんでした。編集中は最後の文を '#print( 'fails')'に変更してください。ほんの穏やかな迷惑。 –

関連する問題