此 python 代码不是求解方程式
This python code is not solving equations
我有一个即时通讯聊天机器人,我正在尝试为它制作一个数学求解器,但它无法将方程的解发送给即时通讯,而是发送方程。
如果有人从 Instant Messenger 发送 "solve: 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
你的测试代码
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
来帮助你。
我有一个即时通讯聊天机器人,我正在尝试为它制作一个数学求解器,但它无法将方程的解发送给即时通讯,而是发送方程。
如果有人从 Instant Messenger 发送 "solve: 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
你的测试代码
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
来帮助你。