为什么代码检测到最外层()

时间:2019-01-20 01:04:07

标签: python

这里的问题要求我反转()中的任何字符串。假设我的字符串为“ foo(bar(baz))blim”,则返回的结果为“ foobazrabblim”。有人在编码过程中为我提供了帮助,但是,我仍然不明白为什么代码首先要检测外部()。

def reverseInParentheses(inputString):
    n=len(inputString)
    for i in range(n):
        if inputString[i] == "(":
            start=i          
        if inputString[i] == ")":
            end=i          
            return reverseInParentheses(inputString[:start]+
inputString[start+1:end][::-1]+inputString[end+1:n])
        return inputString

据我了解,假设我们有“ foo(bar(baz))blim”。因此,python检测到start = 3,end = 11。然后我们将函数称为reverseinparetheses,我们将得到“ foozab(rab)blim”。再次浏览该功能,新的开始= 6,结束= 10。最后,我们有“ foozabbarblim”,而不是我们期望的“ foobazrabblim”。我想知道程序如何首先检测外部“)”?

1 个答案:

答案 0 :(得分:2)

它没有检测到最外面的括号。它找到最里面的那对,颠倒内部,然后重复直到不再有括号。

if inputString[i] == ")":
    ....

当您点击第一个')'时会触发此块,并且在那个阶段start将是'('打开第一个')'。这是最里面的一对。

那么您就有:

return reverseInParentheses(inputString[:start]+inputString[start+1:end][::-1]+inputString[end+1:n])

这将内容从头到尾(最里面的对)反转,然后调用该函数,从而切断了for循环的其余部分。

如果您实际上在每一步都打印inputString,则会得到:

foo(bar(baz))blim
foo(barzab)blim
foobazrabblim

最里面的括号被颠倒了。