我正在尝试实现一个函数来平衡给定数学方程式的括号作为字符串。应该更改字符串,而不仅仅是检查它是否平衡。
因为数学方程式可以包含三角函数,所以我想在这些函数之后添加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(
,同样适用于所有人其余的三角函数。但问题是,字符串(这是一个数学方程式)变成括号 - 不平衡。
如何编写一个函数来解决这个问题?
答案 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函数。