如何在Python 2.7中“翻译”数学表达式

0 投票
2 回答
1263 浏览
提问于 2025-04-18 18:21

我试着把'2x^2+3'转成Python能理解的形式,也就是想得到'2*x^2 + 3'。

eq = '2x^2+3'

newlist = []

if '^' in eq:
   eq = eq.replace('^', '**')
else:
   print ''

for x in range (len(eq)):
    newlist.append(eq [x])

print newlist

但是我得到的结果是['2', 'x', ' * ', ' * ', '2', '+', '3'],我其实想要的结果是'2*x**2 + 3',这样Python才能理解。

2 个回答

0

你可以使用一种叫做中缀-后缀转换的技巧,把字符串转换成可以计算的表达式。我在开发iOS的图形计算器应用时就用过这个技巧。老实说,支持人们使用的各种数学简写是挺困难的,比如2(x + 3)或者2^-2,不过这是可以做到的。

基本上,你需要处理这个字符串,构建一个中缀表达式,也就是一个按顺序排列的元素数组。然后再把它转换成后缀表达式,这样可以改变元素的顺序,使得计算变得简单。这里有一个网站,演示了中缀到后缀的转换过程。

这里有一个代码片段,展示了用Python实现的后缀计算器,不过我没有试过。希望它能让你对这个过程有个大概的了解。

1

你的结果是一个字符串的列表,可以这样连接起来:

expression = "".join(my_list)

不过你没有注意到你想把2x变成2 * x的那部分。我就留给你自己去想办法解决吧。

撰写回答