2017-12-07 7 views
-3

왜 내가이 사건에서 반환 이벤트를 잡을 수 없는지 제게 설명해 주시겠습니까 ??파이썬 재귀 반환 문제

s1 = "(){}[]" 
s2 = "([{}])" 
s3 = "(}" 
s4 = "[(])" 
s5 = "[({})]((]" 

def validBraces(string): 
    lst = ['()','{}','[]'] 
    for i in range(len(string)-1): 
     braces = string[i]+ string[i+1] 
     if braces in lst: 
       validBraces(string[:i]+string[i+2:]) 



    if len(string) == 0: 
     print("True") 
     return True 

    return False 

print (validBraces(s1)) 

그래서 여기에 무엇이 잘못 되었습니까? 그래서 "True"를 인쇄 할 수는 있지만 참을 수는 없으며 참을 반환 할 수 있습니다 .....

+1

'validBraces (string [: i] + string [i + 2 :])'를 반환해야합니까? –

+2

'return' 문은 이벤트를 생성하지 않습니다. 어떤 "사건"이라고 생각하십니까? –

+0

네, stop이 필요하고 len == 0이면 True를 반환합니다. – TheRutubeify

답변

1

다음은 Tom의 답변과 완벽한 테스트 및 기타 개선 사항을 통합 한 것입니다.

s1 = "(){}[]" 
s2 = "([{}])" 
s3 = "(}" 
s4 = "[(])" 
s5 = "[({})]((]" 

def validBraces(string): 
    lst = ['()','{}','[]'] 
    for i in range(len(string)-1): 
     braces = string[i:i+2] 
     if braces in lst: 
      return validBraces(string[:i]+string[i+2:]) 

    return not string 

for s in (s1, s2, s3, s4, s5): 
    print (validBraces(s)) 
# should be True, True, False, False, False 
+0

정말 고마워요, "회귀 재귀"에 대해 잊어 버렸습니다 !!! 그리고 위의 의견 같은 드라마가 없습니다. – TheRutubeify