Python中如何用动态嵌套循环遍历指定范围值生成布尔表达式真值表
正确实现代码
from itertools import product expression = "a and (b or a)" # 变量列表可根据实际需求调整长度,支持任意数量输入变量 variables = ['a', 'b'] # 生成所有变量的0/1取值组合,repeat参数等于变量总数 for value_tuple in product([0, 1], repeat=len(variables)): # 把变量名和对应取值绑定为字典 var_dict = dict(zip(variables, value_tuple)) # 求值时传入变量字典作为局部命名空间,避免污染全局变量 result = eval(expression, {}, var_dict) # 按顺序输出当前变量取值 + 表达式结果 print(*value_tuple, result)
原有代码问题说明
product调用参数错误:你传入的是变量名列表,该方法需要接收的是取值范围,正确传参应该是重复len(variables)次[0,1],才能生成所有0/1组合- 没有绑定变量取值和变量名:
eval执行表达式时找不到a/b/c的定义,需要把生成的取值和变量名一一对应后,传入eval的命名空间参数
扩展:根据输入变量数动态生成变量名
如果从用户处获取了输入变量数inputs,不需要手动写变量列表,可以自动生成对应数量的单字母变量名:
inputs = 3 # 可替换为用户输入的数值 variables = [chr(ord('a') + i) for i in range(inputs)]
内容的提问来源于stack exchange,提问作者Junior
相关产品推荐
相关产品推荐

