2016-09-18 3 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')'로 변경하십시오. 그냥 가벼운 성가심. –

관련 문제