我正在尝试实现一个函数,用于将给定数学方程的括号作为字符串进行平衡。它应该改变字符串,而不仅仅是检查它是否平衡。
因为数学方程可以包含三角函数,所以我想在这些函数后面添加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(radians(替换cos(,用sin(radians(替换sin(,对于所有其他三角函数也是如此。但问题是,字符串(这是一个数学方程式)变成了括号-不平衡。
我怎么写一个函数来解决这个问题呢?
发布于 2017-08-19 18:54:23
您可以用cosdeg替换cos并定义:
def cosdeg(x):
return cos(radians(x))或者(lambda版本):
cosdeg = lambda x : cos(radians(x))并且以与其它trig函数类似的方式。
发布于 2017-08-19 18:50:22
下面是在适当位置插入radians(并保持括号平衡的算法概述。如果圆括号事先确实是平衡的,并且在字符串文字中没有不平衡的括号,例如len("abc(d"),这将会起作用。然而,这看起来并不可怕。
不要只使用replace()。相反,可以使用find()来查找cos(或其他触发器函数用法。将计数器设置为零。然后扫描紧跟在左括号后面的字符串,即右边cos(中的(。当遇到左括号时,计数器递增1;当遇到右括号时,计数器递减1。当你的计数器到达-1时,你已经找到了触发器函数的右括号。在该位置插入一个新的右括号,然后在触发器函数后面插入您的radians(。
继续执行此操作,直到处理完字符串中的所有trig函数。
https://stackoverflow.com/questions/45770489
复制相似问题