📜  将POS转换为SOP的Python程序

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

将POS转换为SOP的Python程序

用Python编写一个程序,将标准 POS(sum of products)形式转换为标准 SOP(sum of products)形式。

假设:输入的 POS 表达式是标准的。 POS 表达式中的变量是连续的,即如果表达式包含变量A ,那么它将分别具有变量BC ,并且每个 Sum 项包含按排序顺序的字母,即A + B + C (不像 B+A+C)。

例子:

Input : (A + B + C).(A + B + C').(A + B' + C).(A' + B + C)
Output : A'BC + AB'C + ABC' + ABC

Input : (A + B).(A' + B')
Output : A'B + AB'

方法:

  1. 首先将每个总和项转换为其等效的二进制形式。例如,如果 (A+B+C') 则取 0 表示非补变量 (A, B) 取 1 表示补变量 (C) 所以二进制转换为 011) 最后等价于其十进制形式(例如: 001 = 1) 并存储在列表中。
  2. 现在对于 SOP 形式,取所有在步骤 1 中形成的列表中不存在的术语,然后将每个术语转换为二进制,从而更改为 POS 形式。例如 -
    假设 4 不在列表中,那么 5==> 101(二进制)
    现在,用补码变量替换 0(B)
    用非补变量(A,C)替换 1
    101 ==> AB'C
    在每个单独的总和项之后使用“+”
    例如:AB'C+AB'C'

以下是上述方法的Python实现:

# Python code to convert standard POS form 
# to standard SOP form 
  
# Function to calculate no. of variables 
# used in POS expression 
def count_no_alphabets(POS): 
    i = 0
    no_var = 0
  
    # As expression is standard so total no. 
    # of alphabets will be equal 
    # to alphabets before first '.' character 
    while (POS[i]!='.'): 
  
        # checking if character is alphabet         
        if (POS[i].isalpha()):     
            no_var+= 1
        i+= 1
    return no_var 
  
# Function to calculate the max terms in integers 
def Cal_Max_terms(Max_terms, POS): 
    a = "" 
    i = 0
    while (i " + SOP_expr) 
  
    # input2 
    POS_expr ="(A + B).(A'+B')"
    Max_terms = [] 
      
    no_var = count_no_alphabets(POS_expr) 
    Cal_Max_terms(Max_terms, POS_expr) 
    SOP_expr = Cal_Min_terms(Max_terms, no_var, POS_expr[1]) 
      
    print ("Standard SOP form of " + POS_expr + " ==> " + SOP_expr) 
  
# Driver code 
if __name__=="__main__": 
    main() 
输出:
Standard SOP form of (A+B+C).(A+B+C').(A+B'+C).(A'+B + C)  ==>  A'BC+AB'C+ABC'+ABC
Standard SOP form of (A + B).(A'+B')  ==>  A'B+AB'