为什么代码要检测最外层的部分)

2024-10-03 17:24:26 发布

您现在位置: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 detect start=3,end=11。然后我们调用函数reverseinparethes,我们将得到“foozab(rab)blim”。再看一遍这个函数,新的start=6,end=10。最后,我们得到了“foozabbarblim”,它不是我们期望的“foozabrabblim”。我想知道程序是如何首先检测到外部“)”的?你知道吗


Tags: 字符串代码编码returniffoo过程bar
1条回答
网友
1楼 · 发布于 2024-10-03 17:24:26

它没有检测到最外层的括号。它是找到最里面的一对,反转内部,然后重复,直到没有更多的圆括号。你知道吗

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

最里面的圆括号变反了。你知道吗

相关问题 更多 >