Сделать петлю def для разных размеров - PullRequest
0 голосов
/ 03 марта 2019

Итак, я делаю основную функцию таблицы истинности.В этом примере формула имеет 4 значения и, следовательно, требует 4 цикла.Есть ли способ для меня сделать def, который принимает количество значений в формуле и делает цикл для него?

def Formula1(a,b,c,d):
    return ((a & c) | (b & c) | (d & c))

for a in range(0,2):
    for b in range(0,2):
        for c in range(0, 2):
            for d in range(0, 2):
                #printtable(a,b,c,d)
                print(a,b,c,d,"=",Formula1(a,b,c,d))

Например, здесь формула имеет 5 значений и требует 5 циклов.

def Formula2(a,b,c,d,e):
    return ((not a & b) | (c & b) | (d & (not e)))

1 Ответ

0 голосов
/ 03 марта 2019

Использование itertools:

import itertools

def Formula1(a, b, c, d):
    return ((a & c) | (b & c) | (d & c))

if __name__ == '__main__':

    table = list(itertools.product([False, True], repeat=4))

    for a,b,c,d in table:
        print("{}, {}, {}, {} = {}".format(a, b, c, d, Formula1(a, b, c, d))

Результат (table - все комбинации):

False, False, False, False = False
False, False, False, True = False
False, False, True, False = False
False, False, True, True = True
False, True, False, False = False
False, True, False, True = False
False, True, True, False = True
False, True, True, True = True
True, False, False, False = False
True, False, False, True = False
True, False, True, False = True
True, False, True, True = True
True, True, False, False = False
True, True, False, True = False
True, True, True, False = True
True, True, True, True = True
...