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

Python 为什么代码要检测最外层(最外层),python,Python,这里的问题要求我反转()中的任何字符串。假设我的字符串是“foo(bar(baz))blim”,那么返回的结果将是“foobazrabblim”。有人在编码过程中帮助了我,但是,我仍然不明白为什么代码首先要检测外部(外部) 据我所知,假设我们有“foo(bar(baz))blim”。所以python检测start=3,end=11。然后我们调用函数reverseInParethes,我们将得到“foozab(rab)blim”。再次执行该函数时,会出现新的start=6,end=10。最后,我们

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


据我所知,假设我们有“foo(bar(baz))blim”。所以python检测start=3,end=11。然后我们调用函数reverseInParethes,我们将得到“foozab(rab)blim”。再次执行该函数时,会出现新的start=6,end=10。最后,我们有了“foozabarblim”,而不是我们所期望的“foozabarblim”。我想知道程序是如何首先检测外部“)”的

它没有检测到最外面的括号。它找到最里面的一对,反转里面的,然后重复,直到没有更多的括号

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

最里面的括号变反了。

因此,if语句的工作原理是这样的:我们找到了第一个“(”,但后面还有一个,所以它在第一轮检测到start=7。但是为什么当我们命中第一个“)”?请参阅:
if inputString[i]=”:
一旦命中第一个“,看看接下来会发生什么:
return reverseeinparentheses(inputString[:start]+inputString[start+1:end][::-1]+inputString[end+1:n])
这是反转最里面的一对并立即返回,切断for循环的其余部分。现在让我知道这是否正确:在第一轮,python为第一个if检测了两次:第一次start=3,第二次start=7,然后使用第二个if,因为我们在使end=11之后返回reverseInParethes,这就是为什么我们返回最内部的()?是的,然后重新开始循环,但最内部的循环是反向的。
foo(bar(baz))blim
foo(barzab)blim
foobazrabblim