这个python代码不是在解方程

2024-10-05 11:53:40 发布

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

我有一个即时通讯聊天机器人,我试图为它做一个数学解算器,但它不能发送方程的解决方案,即时通讯,它发送方程代替。你知道吗

如果有人从即时通讯发送“解决: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))

输出:Working perfectly


Tags: 程序parserif机器人it数学解决方案lower
2条回答

您需要做的是以字符串形式计算数学表达式。你知道吗

然而,如果你只是eval东西,不管他们给你什么,用户输入都是危险的。Security of Python's eval() on untrusted strings?

您可以使用ast.literal_eval来降低风险。你知道吗

或者你可以使用下面问题的答案的评估者 Evaluating a mathematical expression in a string

你的测试代码

str(2 + 2 -3 + 8 * 7)

与生产代码不同

str(parser.getPayload()[7:])

扩展到

str("2 + 2 -3 + 8 * 7")

假设你通过同样的方程。好事情是你有管道工作,现在你需要实现实际的数学解算器,如

str(solve_math(parser.getPayload()[7:]))

def solve_math(expr : str) -> float:
    """
    Parses and evaluates math expression `expr` and returns its result.
    """

在这里,您需要首先将表达式字符串解析为表示数据、运算符/函数和求值顺序的结构。所以你的“2+2”表达式变成了Addition(Const(2), Const(2)),而“2+2*3”表达式变成了Addition(Const(2), Multiplication(Const(2), Const(3))),然后你只需要计算它,这应该相当简单。你知道吗

我推荐pyparsing来帮助你。你知道吗

相关问题 更多 >

    热门问题