Пишу скрипт (лабораторная (любой язык программирования)) минимизации логических функций для любого количества переменных и столкнулся со следующей проблемой: после выполнения последней функции (def minimise(func):) результат (список) становится пустым.
Код:
#!/usr/bin/python
# coding=utf-8
# Создаем возможные комбинации переменных
def createBin(value):
result = ""
if(value==0):
result = "0"
else:
while(value>0):
result = str(value%2) + result
value >>= 1
return result
# Добавляем нули для выравнивания длины строк комбинаций
def addZero(binValue, countOfVariable):
result = binValue
j = len(binValue)
while(j<countOfVariable):
result = '0' + result[0:]
j += 1
return result
# Формируем СДНФ
def createSDNF(var):
result = []
for i in var:
for j in var:
p = 0
k = 0
while(k<len(i)):
if(i[k]!=j[k]):
p += 1
k += 1
if(p==1):
result.append(i)
result.append(j)
return result
# Меняем бинарное представление на десятичное
def binToNum(func):
result = []
for i in func:
tmp = []
j = 0
while(j<len(i)):
if(i[j]=='1'):
tmp.append(j+1)
else:
tmp.append(-(j+1))
j += 1
result.append(tmp)
return result
# Минимизируем СДНФ
def minimise(func):
p = 1
result = binToNum(func)
i = 0
j = 1
while(p==1):
tmp = []
p = 0
while((i<len(result))and(j<len(result))):
if(len(result[i])==len(result[j])):
temp = []
k = 0
while(k<len(result[i])):
if(result[i][k]==result[j][k]):
temp.append(result[i][k])
p = 1
k += 1
tmp.append(temp)
else:
tmp.append(result[i])
tmp.append(result[j])
i += 2
j += 2
result = tmp
return result
# Начальная функция
def main():
print "Введите количество переменных:",
countOfVariable = int(raw_input())
combinations = 2**countOfVariable
listOfValue = []
i = 0
while(i<combinations):
listOfValue.append(int(raw_input()))
i += 1
variables = []
i = 0
while(i<combinations):
variables.append(createBin(i))
variables[i] = addZero(variables[i], countOfVariable)
i += 1
i = 0
for j in listOfValue:
if(j==0):
del variables[i]
i -= 1
i += 1
SDNF = createSDNF(variables)
print "СДНФ =", SDNF
MDNF = minimise(SDNF)
print "МДНФ =", MDNF
# Начало
main()
Заранее спасибо.