Python中能否用变量替代数学运算符?新手技术求助
问题分析
你的代码有两个关键错误:
- 运算符是字符串类型,用
int()转换完全错误,这会直接导致输入运算符时报转换错误,而且根本没必要转成整数。 12{0}4.format(math_thing)是语法错误,.format()是字符串的方法,你需要把整个表达式写成字符串模板(比如"12{0}4"),但就算这样,拼接后得到的只是字符串(比如"12+4"),不会自动执行计算,所以还是得不到运算结果。
解决方法
方法1:用eval快速实现(注意安全风险)
先修正输入处理,再用eval()把拼接后的运算字符串转为可执行代码:
math_thing = input('Enter a type of math operator(/,*,+,etc.,)') # 先做基础合法性校验,避免无效输入 if math_thing in ['+', '-', '*', '/']: result = eval(f"12{math_thing}4") print(result) else: print("Invalid operator")
注意:eval()会执行任意字符串代码,若用户输入恶意内容会有安全隐患,后续必须完善严格的校验逻辑,只允许指定的运算符。
方法2:用字典映射运算符(更安全)
通过字典把运算符映射到对应的运算函数,避免eval()的安全问题:
import operator # 预定义允许的运算符及对应运算函数 operator_map = { '+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.truediv } math_thing = input('Enter a type of math operator(/,*,+,etc.,)') if math_thing in operator_map: result = operator_map[math_thing](12, 4) print(result) else: print("Invalid operator")
这种方式只允许你预设的运算符,安全性更高,也方便后续扩展校验和更多运算逻辑。
内容的提问来源于stack exchange,提问作者Derpy Gamer
相关产品推荐
相关产品推荐

