将 SOP 转换为 POS 的Python代码
在Python中编写一个程序,将标准 SOP(产品总和)形式转换为标准 POS(总和产品)形式。
假设:输入的 SOP 表达式是标准的。 SOP 表达式中的变量是连续的,即如果表达式包含变量 A,那么它将分别具有变量 B、C,并且每个产品项都包含按排序顺序排列的字母,即 ABC(不像 BAC)。
例子:
Input : ABC'+A'BC+ABC+AB'C
Output : (A+B+C).(A+B+C').(A+B'+C).(A'+B+C)
Input : A'B+AB'
Output : (A+B).(A'+B')
方法:
- 首先将每个乘积项转换为其等效的二进制形式(例如:如果 ABC' 则为非补变量(A,B)取 1 并为补变量(C)取 0,因此二进制转换为 110),然后最终等价于它的十进制形式(例如:110 = 6)并存储在列表中。
- 现在对于 POS 形式,取所有那些不存在于第 1 步中形成的列表中的术语,然后将每个术语转换为二进制,从而更改为 SOP 形式。例如:假设 5 不在列表中
5 ==> 101(二进制)
现在,用补变量(A,C)替换 1
用非补变量替换 0(B)
并且在变量之间使用'+'
101 ==> A'+B+C'
在每个单独的总和词之后使用“。”
为了更清楚,在每个单独的术语之间使用括号。
例如:(A'+B+C')。(A+B+C')
Python代码
# Python code to convert standard SOP form
# to standard POS form
# function to calculate no. of variables
# used in SOP expression
def count_no_alphabets(SOP):
i = 0
no_var = 0
# As expression is standard so total no.
# of alphabets will be equal
# to alphabets before first '+' character
while (SOP[i]!='+'):
# checking if character is alphabet
if (SOP[i].isalpha()):
no_var+= 1
i+= 1
return no_var
# function to calculate the min terms in integers
def Cal_Min_terms(Min_terms, SOP):
a =""
i = 0
while (i ", POS_expr)
# input2
SOP_expr ="A'B + AB'"
Min_terms =[]
no_var = count_no_alphabets(SOP_expr)
Cal_Min_terms(Min_terms, SOP_expr)
POS_expr = Cal_Max_terms(Min_terms, no_var, SOP_expr[0])
print ("Standard POS form of", SOP_expr, " ==> ", POS_expr)
# input3
SOP_expr ="xyz'+x'y'z'+xy'z"
Min_terms =[]
no_var = count_no_alphabets(SOP_expr)
Cal_Min_terms(Min_terms, SOP_expr)
POS_expr = Cal_Max_terms(Min_terms, no_var, SOP_expr[0])
print ("Standard POS form of", SOP_expr, " ==> ", POS_expr )
# driver code
if __name__=="__main__":
main()
输出:
Standard POS form of ABC'+A'BC + ABC + AB'C ==> (A+B+C).(A+B+C').(A+B'+C).(A+B'+C').(A'+B+C).(A'+B+C')
Standard POS form of A'B + AB' ==> (A+B).(A+B').(A'+B)
Standard POS form of xyz'+x'y'z'+xy'z ==> (x+y+z').(x+y'+z).(x+y'+z').(x'+y+z).(x'+y'+z')