📜  将 SOP 转换为 POS 的Python代码

📅  最后修改于: 2022-05-13 01:55:16.116000             🧑  作者: Mango

将 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')

方法:

  1. 首先将每个乘积项转换为其等效的二进制形式(例如:如果 ABC' 则为非补变量(A,B)取 1 并为补变量(C)取 0,因此二进制转换为 110),然后最终等价于它的十进制形式(例如:110 = 6)并存储在列表中。
  2. 现在对于 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')