2024-09-29 21:50:53 发布
网友
所以我想知道如何检测数学表达式中的操作数和运算数
例如:1+2*9/2
1+2*9/2
我试着用函数把操作数和运算分离成它们自己的形式,因为我们必须检查有多少操作必须按正确的顺序(PEDMAS)完成。在
我已经把方程取出来了,把所有的空格都取出来了,现在我要求出方程中操作数和运算的个数,然后用return来找到给定数学表达式的答案。在
有什么提示吗?在
如果允许,我建议您检查ast模块。它的目的是使用Python自己的解析器为您完成类似的工作。在
ast
对于实际的应用程序,您可能会使用Ply这样的解析器生成器。在
对于这样一个简单的家庭作业,您可能需要手工编写一个解析器。首先标记它(str.split),找到括号,然后使用优先级对其他操作进行分组。在
str.split
如果表达式不能像示例那样简单,则可以使用RPN - reverse polish notation
如果您的表达式非常简单(只有基操作和小于10的值),并且您只需要计数就可以使用类似的方法,我想:
ops = '+-*/' operationsCount= sum(expr.count(op) for op in ops) operandsCount = len(expr) - operationsCount
或者你可以用这个:
现在您已经有了许多运算符和操作数—而且很容易在ops/opd上正确地拆分行并计算表达式。在
import re exp = 1+2*9/2 ops = re.findall(r'[\+\-*/]', exp) print len(ops)
我不知道你为什么要求操作数 我想
更好。在
所以我认为正则表达式可以帮助您
如果允许,我建议您检查
ast
模块。它的目的是使用Python自己的解析器为您完成类似的工作。在对于实际的应用程序,您可能会使用Ply这样的解析器生成器。在
对于这样一个简单的家庭作业,您可能需要手工编写一个解析器。首先标记它(
str.split
),找到括号,然后使用优先级对其他操作进行分组。在如果表达式不能像示例那样简单,则可以使用RPN - reverse polish notation
如果您的表达式非常简单(只有基操作和小于10的值),并且您只需要计数就可以使用类似的方法,我想:
或者你可以用这个:
^{2}$现在您已经有了许多运算符和操作数—而且很容易在ops/opd上正确地拆分行并计算表达式。在
我不知道你为什么要求操作数 我想
^{2}$更好。在
所以我认为正则表达式可以帮助您
相关问题 更多 >
编程相关推荐