Python求主析取范式
时间: 2023-11-05 20:54:49 浏览: 133
Python求主析取范式的步骤如下:
1. 首先,对输入的逻辑表达式进行化简,去除无关项和冗余项。
2. 然后,建立一个真值表,列出所有可能的输入情况及其对应的输出结果。
3. 根据真值表,找出所有输出结果为真的输入情况,这些输入情况组成了主析取范式的各个子句。
4. 对于每个子句,根据对应的输入情况,将变量用相应的值代替,得到主析取范式的最终形式。
相关问题
python输入析取范式输出主析取范式
好的,可以使用Python中的sympy库来实现输入析取范式输出主析取范式的功能。具体代码实现如下:
```python
from sympy.logic.boolalg import to_dnf, to_cnf
from sympy import symbols
# 输入析取范式
expr = input("请输入析取范式:")
# 将输入的字符串转化为逻辑表达式
p, q, r = symbols('p q r')
expr = expr.replace("p", "p").replace("q", "q").replace("r", "r")
expr = eval(expr)
# 将逻辑表达式转化为主析取范式
dnf_expr = to_dnf(expr, simplify=False)
cnf_expr = to_cnf(dnf_expr, simplify=False)
# 输出主析取范式
print("主析取范式为:", cnf_expr)
```
以上代码中,我们首先使用`input()`函数获取用户输入的析取范式,并将其转化为逻辑表达式。然后,我们使用sympy库中的`to_dnf()`函数将逻辑表达式转化为合取范式(即非主析取范式),再使用`to_cnf()`函数将其转化为主析取范式。最后,我们输出主析取范式即可。
需要注意的是,由于输入的字符串可能包含变量名和运算符,因此我们需要将其替换为实际的sympy变量,才能将其转化为逻辑表达式。在本代码实现中,我们将“p”、“q”、“r”替换为sympy库中的变量“p”、“q”、“r”。
python真值表求主析取范式
以下是Python实现真值表求主析取范式的代码:
```python
from itertools import product
def get_minterms(n, minterms):
"""
获取minterms对应的二进制数中1的个数为n的项
"""
return [i for i in range(2**n) if bin(i).count('1') == n and i in minterms]
def get_maxterms(n, maxterms):
"""
获取maxterms对应的二进制数中0的个数为n的项
"""
return [i for i in range(2**n) if bin(i).count('0') == n and i in maxterms]
def get_dontcares(n, dontcares):
"""
获取dontcares对应的项
"""
return [i for i in dontcares if i < 2**n]
def get_binary(n, minterms, maxterms, dontcares):
"""
获取二进制数对应的主析取范式
"""
minterms = get_minterms(n, minterms)
maxterms = get_maxterms(n, maxterms)
dontcares = get_dontcares(n, dontcares)
binary = ['-'*n]*len(minterms+maxterms+dontcares)
for i, term in enumerate(minterms+maxterms+dontcares):
binary[i] = bin(term)[2:].zfill(n)
return binary
def get_expression(n, minterms, maxterms, dontcares):
"""
获取主析取范式
"""
binary = get_binary(n, minterms, maxterms, dontcares)
expression = []
for term in binary:
temp = []
for i, char in enumerate(term):
if char == '0':
temp.append(chr(65+i)+"'")
elif char == '1':
temp.append(chr(65+i))
expression.append("".join(temp))
return " + ".join(expression)
def get_truth_table(n, minterms, maxterms, dontcares):
"""
获取真值表
"""
binary = get_binary(n, minterms, maxterms, dontcares)
truth_table = []
for term in binary:
temp = []
for char in term:
if char == '0':
temp.append(False)
elif char == '1':
temp.append(True)
else:
temp.append(None)
truth_table.append(temp)
return truth_table
# 示例
n = 3
minterms = [0, 1, 2, 3, 5, 6]
maxterms = [4, 7]
dontcares = [2]
truth_table = get_truth_table(n, minterms, maxterms, dontcares)
expression = get_expression(n, minterms, maxterms, dontcares)
print("真值表:")
for row in truth_table:
print(row)
print("主析取范式:")
print(expression)
```
阅读全文
相关推荐









