You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python学习求助:如何计算由输入转换而来的表达式?

解决Python表达式计算问题

嘿,我来帮你搞定这个计算执行的问题!首先先给你的代码提个小优化建议:你现在每次都调用i.split()三次,其实可以把拆分后的结果存到一个变量里,这样更高效,也更整洁。

接下来回到核心问题:如何执行你拼接好的表达式字符串?这里有两种常用方案,各有优劣,你可以根据自己的场景选择:

方案1:用eval()快速实现(适合可信输入)

如果你的输入是自己生成的、完全可信的,那么eval()是最简单直接的方法——它可以把字符串形式的表达式当成Python代码执行。

优化后的完整代码示例:

# 注意:不要用input当变量名,它是Python内置函数,容易引发冲突
input_lines = ["+ 9 16", "- 20 5", "* 3 7"]  # 示例输入
for line in input_lines:
    parts = line.split()
    operator = parts[0]
    number1 = parts[1]
    number2 = parts[2]
    equation = f"{number1} {operator} {number2}"
    # 执行计算并输出结果
    result = eval(equation)
    print(f"{equation} = {result}")

运行这段代码会输出:

9 + 16 = 25
20 - 5 = 15
3 * 7 = 21

方案2:用运算符映射实现(更安全,适合不可信输入)

eval()虽然方便,但如果输入来自不可信的来源,它可能会执行恶意代码。这时候可以用operator模块里的函数,配合字典映射来安全计算:

首先导入需要的运算符函数,然后建立运算符到函数的映射,最后直接调用对应函数计算:

from operator import add, sub, mul, truediv

# 建立运算符到对应函数的映射
operator_map = {
    '+': add,
    '-': sub,
    '*': mul,
    '/': truediv
}

input_lines = ["+ 9 16", "- 20 5", "* 3 7", "/ 10 2"]
for line in input_lines:
    parts = line.split()
    op = parts[0]
    # 把字符串转成数值类型(整数或浮点数)
    num1 = float(parts[1])
    num2 = float(parts[2])
    # 通过映射获取对应的计算函数并执行
    result = operator_map[op](num1, num2)
    print(f"{num1} {op} {num2} = {result}")

运行结果:

9.0 + 16.0 = 25.0
20.0 - 5.0 = 15.0
3.0 * 7.0 = 21.0
10.0 / 2.0 = 5.0

这里还要提醒你:一定要把number1和number2转换成数值类型(int或float),不然它们只是字符串,直接拼接的话虽然能生成表达式字符串,但如果用方案2的话,字符串是不能直接做加减乘除的。

内容的提问来源于stack exchange,提问作者NilT_PL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:52:51