如何在 python 中将乘号转换为星号?
How to convert Multiplication sign into Asterisk sign in python?
我有一个数学求解器python程序,但它无法读取“×”符号,所以无法求解方程。有没有办法把“×”转成“*”?
Python shell:
>>> 3 × 5
`SyntaxError: invalid character in identifier
>>> 3 * 5
15
>>>
更新:
我也试过这个,但是没有用。
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)
我有一个数学求解器python程序,但它无法读取“×”符号,所以无法求解方程。有没有办法把“×”转成“*”?
Python shell:
>>> 3 × 5
`SyntaxError: invalid character in identifier
>>> 3 * 5
15
>>>
更新: 我也试过这个,但是没有用。
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)