如何在 python 中将乘号转换为星号?

How to convert Multiplication sign into Asterisk sign in python?

我有一个数学求解器python程序,但它无法读取“×”符号,所以无法求解方程。有没有办法把“×”转成“*”?

Python shell:

>>> 3 × 5
`SyntaxError: invalid character in identifier
>>> 3 * 5
15
>>> 

screenshot

更新: 我也试过这个,但是没有用。

 if (parser.getPayload().lower()[:6]=="solve:"):
                    if ("×" in parser.getPayload().lower()):
                        str.replace("×","*")
                        parser.sendGroupMessage(parser.getTargetID(), str(ast.literal_eval(parser.getPayload()[7:])))

让我们逐行检查您的代码。

if (parser.getPayload().lower()[:6]=="solve:"):

好吧,我想,不知道你的协议,但这样说是有道理的。

                    if ("×" in parser.getPayload().lower()):

不需要转换为小写。如果是,缓存可能会有用。我还想知道您是否需要该检查,或者您是否也可以无条件地进行替换,因为这会使代码更简单并且应该不会成为性能问题。它甚至可能有助于提高性能,因为您避免扫描第一个 × 两次。

                        str.replace("×","*")

str.replace 是 class str 的方法,而不是某些名为 str 的模块中的函数。您需要在负载上调用 replace 方法。因此,要么使用 parser.setPayload(parser.getPayload().replace("×","*")) 之类的东西,要么将有效负载存储在您可以修改的局部变量中。

                        parser.sendGroupMessage(parser.getTargetID(), str(ast.literal_eval(parser.getPayload()[7:])))

您确定只在输入中有 × 的情况下才这样做吗?无论如何,请阅读 the docs for ast.literal_eval:它不会计算运算符。所以这不是你需要的。如果您需要评估运算符,您可以调用 eval,但如果您这样做,您 必须 首先清理您的输入以确保它不会做任何坏事。

我会这样做:

sanitizeRegexp = re.compile(r"\A[0-9+\-*/ ]*\Z") # only allow these
payload = parser.getPayload()
if payload.lower()[:6] == "solve:":
    payload = payload[7:] # strip command
    payload = payload.replace("×", "*")
    if sanitizeRegexp.match(payload):
        result = str(eval(payload))
    else:
        result = "Invalid input: " + payload
    parser.sendGroupMessage(parser.getTargetID(), result)