在python中解析数学表达式并求解以找到ans

2024-05-21 00:13:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程很陌生。这与python有关。所以我们的想法是用一个表达式,比如3/5,或者最多3/5*2(最多两个操作符,注意操作符可以是+,-,/,*)来求解。空白可以存在于表达式中的任何位置。

用户输入表达式,比如3/5,程序需要解出表达式并显示答案。我试过的如下。注意,我只尝试了第一部分,一旦我可以正确地分割用户输入的原始表达式(这将是一个字符串),创建函数将是最简单的部分:

expres= str(input("something:"))

ssplit= hit.partition("/")
onec= int((ssplit[0].lstrip()).rstrip())
twoc= (ssplit[1].lstrip()).rstrip()
threec= int((huns[2].lstrip()).rstrip())


print(onec,"...",twoc,"...",threec) #just a debug test print

所以在上面,我可以取一个类似3/5的表达式,并将其分成三个单独的字符串:3,/,和5。我还可以删除运算符/操作数前后的所有空白。我在拆分像4/5+6这样的表达式时遇到问题,因为我不能为ssplit[3]或ssplit[4]输入代码,然后输入像3/5这样的表达式,因为它不会被定义。基本上,我需要你的帮助来了解如何拆分像3/4-6这样的表达式。我还需要“ssplit= hit.partition("/")”行的帮助,这样它就可以查看输入的表达式,并使用+、-、和*。我们非常感谢您的帮助。另外,如果我的代码上面看起来肮脏和低效,请给我批评。谢谢!

注意我不能,也不想用eval。 操作顺序是必需的。 我不能使用复杂的命令。我需要保持它的简单,我能使用的最多的是字符串库,在字符串/整数/浮点数等和if,and等语句之间进行转换。我也可以使用函数。


Tags: 函数字符串用户表达式空白intpartitionprint
2条回答

这并不是解析表达式的真正方法,您应该更多地研究词法分析器和解析器,比如PLYpyparsing。但是,如果只想计算表达式,可以使用eval(expr)。注意eval将执行任何你提供给它的代码,所以它并不真正安全。

编辑 这里有一个使用pyparsing的示例,可以帮助您开始:

pyparsing example

使用shlexStringIOPython模块。在Python2.3+中:

>>> from StringIO import StringIO
>>> import shlex
>>> input = StringIO('3/4+5')
>>> list(shlex.shlex(input))
['3', '/', '4', '+', '5']

相关问题 更多 >