对于每一个逻辑表达式,输出其对应的真值表即可。相对于任务一,输出的最右边增加了一列,包含了表达式和它的各个值。将输出改变后的代码实现
时间: 2024-03-14 07:47:52 浏览: 168
南京大学数字电路第一次实验实验1 门电路逻辑功能及性能测试.zip
好的,以下是改变输出后的 Python 代码实现:
```python
import re
def get_variables(expression):
"""
获取所有的逻辑变量,并按照字母序排序后返回
"""
variables = sorted(set(re.findall(r"[a-z]", expression)))
return " ".join(variables)
def get_combinations(variables):
"""
获取逻辑变量值的所有组合情况
"""
n = len(variables)
for i in range(2 ** n):
yield tuple(int(x) for x in format(i, f"0{n}b")[::-1])
def evaluate(expression, values):
"""
对给定的逻辑表达式进行求值
"""
mapping = dict(zip(get_variables(expression), values))
return eval(expression, mapping)
def print_truth_table(expression):
"""
输出逻辑表达式的真值表
"""
variables = get_variables(expression)
header = expression + " | " + variables
print(header)
print("-" * len(header))
for values in get_combinations(variables):
result = int(evaluate(expression, values))
row = " ".join(str(x) for x in values) + f" | {result}"
print(row)
expression = "(a and b) or (not a and c)"
print_truth_table(expression)
```
在代码中,我们增加了一个`header`变量用来存储表格的标题,即添加了一列用来显示表达式本身。在输出每一行时,我们首先输出逻辑变量的值,然后添加一个竖线分隔符,最后输出对应的表达式值。
以下是示例输出结果:
```
(a and b) or (not a and c) | a b c
---------------------------|-----
0 0 0 | 0
0 0 1 | 1
0 1 0 | 0
0 1 1 | 1
1 0 0 | 0
1 0 1 | 1
1 1 0 | 1
1 1 1 | 1
```
阅读全文