我有一个即时通讯聊天机器人,我试图为它做一个数学解算器,但它不能发送方程的解决方案,即时通讯,它发送方程代替。你知道吗
如果有人从即时通讯发送“解决:2+2”,这个程序应该给他们发送“4”而不是“2+2”。你知道吗
主要问题:
if (parser.getPayload().lower()[:6]=="solve:"):
parser.sendGroupMessage(parser.getTargetID(), str(parser.getPayload()[7:]))
输出:
it's sending same input again not the answer of equation
测试: 我测试了一些东西,结果正常。如果我添加此代码,程序将发送方程的解:
if (parser.getPayload().lower()=="test"):
parser.sendGroupMessage(parser.getTargetID(), str(2 + 2 -3 + 8 * 7))
您需要做的是以字符串形式计算数学表达式。你知道吗
然而,如果你只是
eval
东西,不管他们给你什么,用户输入都是危险的。Security of Python's eval() on untrusted strings?您可以使用
ast.literal_eval
来降低风险。你知道吗或者你可以使用下面问题的答案的评估者 Evaluating a mathematical expression in a string
你的测试代码
与生产代码不同
扩展到
假设你通过同样的方程。好事情是你有管道工作,现在你需要实现实际的数学解算器,如
在这里,您需要首先将表达式字符串解析为表示数据、运算符/函数和求值顺序的结构。所以你的“2+2”表达式变成了
Addition(Const(2), Const(2))
,而“2+2*3”表达式变成了Addition(Const(2), Multiplication(Const(2), Const(3)))
,然后你只需要计算它,这应该相当简单。你知道吗我推荐
pyparsing
来帮助你。你知道吗相关问题 更多 >
编程相关推荐