def
count_no_alphabets(POS):
i
=
0
no_var
=
0
while
(POS[i]!
=
'.'
):
if
(POS[i].isalpha()):
no_var
+
=
1
i
+
=
1
return
no_var
def
Cal_Max_terms(Max_terms, POS):
a
=
""
i
=
0
while
(i<
len
(POS)):
if
(POS[i]
=
=
'.'
):
b
=
int
(a,
2
)
Max_terms.append(b)
a
=
""
i
+
=
1
elif
(POS[i].isalpha()):
if
(i
+
1
!
=
len
(POS)
and
POS[i
+
1
]
=
=
i
+
=
2
else
:
a
+
=
'0'
i
+
=
1
else
:
i
+
=
1
Max_terms.append(
int
(a,
2
))
def
Cal_Min_terms(Max_terms, no_var, start_alphabet):
Min_terms
=
[]
max
=
2
*
*
no_var
for
i
in
range
(
0
,
max
):
if
(Max_terms.count(i)
=
=
0
):
b
=
bin
(i)[
2
:]
while
(
len
(b)!
=
no_var):
b
=
'0'
+
b
Min_terms.append(b)
SOP
=
""
for
i
in
Min_terms:
value
=
start_alphabet
for
j
in
i:
if
(j
=
=
'0'
):
SOP
=
SOP
+
value
+
"'"
else
:
SOP
=
SOP
+
value
value
=
chr
(
ord
(value)
+
1
)
SOP
=
SOP
+
"+"
SOP
=
SOP[:
-
1
]
return
SOP
def
main():
POS_expr
=
"(A+B+C).(A+B+C').(A+B'+C).(A'+B + C)"
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)
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)
if
__name__
=
=
"__main__"
:
main()