Python将数字与运算符拼接为表达式返回布尔值的实现问题
报错原因
你代码中print(num1 + operators[i] + num2)行尝试直接对int类型的num1/num2和字符串类型的运算符执行+运算,Python默认将此处的+识别为数值相加操作,类型不匹配因此触发报错。
实现方案
如果需要拼接为表达式并返回对应布尔值,可参考以下两种实现方式:
方案1:使用eval()执行表达式(写法简单,适合自定义可控的表达式场景)
import random operators = ['<', '>', '<=', '>=', '=='] for i in range(5): # 若需要每次循环复用同一组随机数,可把num1、num2定义移到循环外 num1 = random.randint(1,50) num2 = random.randint(1,50) print("Number 1: " + str(num1)) print("Number 2: " + str(num2)) # 先拼接为完整表达式字符串 expr = f"{num1}{operators[i]}{num2}" # 执行表达式得到布尔结果 bool_result = eval(expr) print(f"表达式运行结果:{bool_result}\n")
方案2:使用operator模块映射运算符(更安全,无恶意代码执行风险)
import random import operator # 建立运算符与对应比较方法的映射关系 op_func_map = { '<': operator.lt, '>': operator.gt, '<=': operator.le, '>=': operator.ge, '==': operator.eq } for op, func in op_func_map.items(): num1 = random.randint(1,50) num2 = random.randint(1,50) print("Number 1: " + str(num1)) print("Number 2: " + str(num2)) print(f"表达式:{num1} {op} {num2}") # 调用对应方法直接得到布尔结果 bool_result = func(num1, num2) print(f"表达式运行结果:{bool_result}\n")
内容的提问来源于stack exchange,提问作者Caleb Murnan
相关产品推荐
相关产品推荐

