平衡括号的功能

时间:2017-08-19 10:35:07

标签: python parentheses

我正在尝试实现一个函数来平衡给定数学方程式的括号作为字符串。应该更改字符串,而不仅仅是检查它是否平衡。

因为数学方程式可以包含三角函数,所以我想在这些函数之后添加radians(),因为在Python中,三角函数将输入视为弧度,而我需要度数。

因此tan(65)变为tan(radians(65)) cos(65) + sin(35)成为cos(radians(65)) + sin(radians(35))
cos((30 - 10) * 2)变为cos(radians((30 - 10) * 2))

到目前为止,我所做的是使用replace()cos(替换为cos(radians(,将sin(替换为sin(radians(,同样适用于所有人其余的三角函数。但问题是,字符串(这是一个数学方程式)变成括号 - 不平衡。

如何编写一个函数来解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以将cos替换为cosdeg并定义:

def cosdeg(x):
   return cos(radians(x))

或(lambda版):

cosdeg = lambda x : cos(radians(x))

与其他trig函数类似。

答案 1 :(得分:1)

以下是在适当位置插入radians(并保持括号平衡的算法概要。如果括号事先确实是平衡的,并且字符串文字中没有不平衡的括号,例如len("abc(d"),则这将起作用。然而,它似乎并不是非常pythonic。

不要只使用replace()。相反,使用find()查找cos(或其他trig函数的用法。将计数器设置为零。然后在该左括号[(]中的cos(后面立即扫描该字符串。遇到左括号时,将计数器增加1;当您遇到右括号时,将计数器减1。当你的计数器达到-1时,你已经找到了你的trig函数的近括号。在该位置插入一个新的右括号,然后在trig函数之后插入radians(

继续执行此操作,直到处理完字符串中的所有trig函数。