gpt4 book ai didi

python - 左括号的位置

转载 作者:行者123 更新时间:2023-11-28 16:38:35 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,该函数传递一个字符串,该字符串将是一个数学表达式和一个括号位置,返回我作为参数传递的位置的左括号位置。

例子:

myfunction('(7 * 3) +1', 4)

应该返回 0,因为包围位置 4 的括号在位置 0 处打开。

我什至尝试这样做,但它只适用于某些表达式,具体取决于位置,我通过了。

我试过了

def pos_open_parent(exp, pos_closed):

temp_exp = exp[:pos_closed]
count_open = 0
count_closed = 1

i = len(temp_exp) -1
while count_open != count_closed:
if temp_exp[i] == '(':
count_open += 1
elif temp_exp[i] == ')':
count_closed += 1
i -= 1
return i + 1

最佳答案

你的代码看起来运行得很好,实际上,你只需要考虑没有匹配的左括号的情况,否则它会抛出异常。

作为您的算法的一个细微变化,我建议向后扫描表达式,计算您仍然需要的左括号的数量,并在该数字达到零时立即返回索引。

def pos_open_parens(exp, pos):
count = 1 # one open parens to find
for i in range(pos, -1, -1):
if exp[i] == ')': count += 1 # now we need one more...
if exp[i] == '(': count -= 1 # found one!
if count == 0: return i # found all the parens we need
return None # no matching open parens -> None

对于 '(7*(1+4)-3)+1' 和位置 2, 4, 9 11,这将返回 030None,即如果没有找到左括号(或不足以匹配右括号),它将返回 None

请注意,这可能意味着表达式中有不平衡的括号,但也可能完全没问题,就像我上一个例子中那样。要检查不平衡的括号,您可以使用类似的算法,扫描整个 字符串并检查计数是否平衡。

关于python - 左括号的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22691249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com