【问题标题】:Python: How to calculate a math operation using f-stringsPython:如何使用 f 字符串计算数学运算
【发布时间】:2019-12-14 21:17:48
【问题描述】:

所以问题来了:

letsSay = "!math 74*11"
l = letsSay.split("!math ")[1]
formatted = f"{l}"
print(formatted)

它输出“74*11”而不是做操作,如何让它先做操作?

【问题讨论】:

  • 可能使用eval()
  • 因为split 的输出是字符串而不是表达式。您可以使用 eval 函数强制评估此类字符串。
  • 不!不要使用eval,也不推荐eval!这是非常危险的。
  • 这需要解析你的字符串。 1)检测术语,并转换为正确的类型(int,float) 2)检测运算符,并转换为正确的python运算符。然后你就可以计算了。这并不简单。见this answer

标签: python python-3.x


【解决方案1】:

鉴于输入字符串的形式,以!math 开头,我相信您正在为在线聊天室编写机器人。即使你不是,但尤其是如果你是,不要使用eval 来计算结果eval 函数很危险,因为它运行以字符串形式提供的任意代码;特别是当该字符串来自互联网聊天室中不受信任的用户时,使用eval 就像将您的房屋钥匙交给任何要求它的随机陌生人。这个叫做remote code execution,是一个非常严重的安全漏洞。

解决问题的正确方法是使用库或 API 来评估不会将任意代码作为字符串执行的数学表达式。有关示例,请参阅this other question

【讨论】:

  • 那我应该使用什么库?
  • 链接问题的接受答案就是一个例子。你仍然应该小心拒绝服务攻击,例如像9**9**9**9**9**9**9**9 这样的表达式,它试图计算非常大的数字并且需要很长时间才能完成,耗尽 CPU 和内存,同时挂起程序。
猜你喜欢
  • 2017-03-18
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2015-02-04
相关资源
最近更新 更多