2017-12-07 25 views
-3

なぜ私はこのケースでリターンイベントをキャッチできないのですか?Python再帰リターンの問題

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"を印刷することはできますが、それを止めてTrueを返します。

+1

'validBraces(string [:i] + string [i + 2:])'を返す必要がありますか? –

+2

'return'ステートメントはイベントを生成しません。どのような「出来事」を見ていると思いますか? –

+0

はい、私はstopが必要であり、len == 0ならTrueを返します。 – TheRutubeify

答えて

1

以下に、トムの答えと完全なテストおよびその他の改善が組み込まれています。

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