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
相关产品推荐
相关产品推荐

