Próbuję stworzyć słownik Booleanów za pomocą zmiennych wyrażenia. Więc jeśli wyrażenie 1 miał zmienne {x,y,z} Mogę utworzyć słownik, który po wyprodukowaniu zwróciłby coś takiego jak {'x': True, 'y': True, 'z': True}, {'x': False, 'y': True, 'z': True} ... etc

Ale naprawdę walczy, ponieważ ta funkcja musi pracować z zestawami / (może powinienem wprowadzić je do list?) Różnych zmiennych, więc dla jazdy {x} Słownik byłby {'x' : True}, {'x' : False}

Jak dotąd próbuję kodu wzdłuż linii

def dicx(self):
    for i in self.vars():
        dicxow = { i : True for i in self.vars() }
        dicxow1 = dicxow.copy()
        dicxow1 = {i : False for i in self.vars() }
        return dicxow, dicxow1

Gdzie self.vars() zwraca wszystkie zmienne w wyrażeniu.

Jestem taki stracił, gdzie iść z tego, ponieważ nie mogę sprawdzić, jak zmienić jedną część słownika dla każdej innej zmiennej, a więc wszelkie wskazówki byłyby doceniane. Moje zadanie obejmowało użycie zajęć, więc używam klas, aby to zrobić (nie jestem pewien, czy to ma znaczenie).

Edytować:

Ok przepraszam, więc chcę tylko stworzyć słownik z każdą możliwą kombinacją prawdziwości i fałszu dla x ilości zmiennych, ale staram się to zrobić. Self.vars () zwraca zestaw zmiennych z wyrażenia np. {x, y} i z tego chcę utworzyć funkcję, aby wygenerować każdą kombinację prawdziwych i fałszywych dla X i Y.

-4
python_begin 22 listopad 2020, 13:51

1 odpowiedź

Najlepsza odpowiedź

Myślę, że to robi coś blisko tego, czego chcesz. Aby uzyskać wszystkie kombinacje True i False dla zmiennych n , po prostu wytwarza wszystkie wartości całkowite od 0 do 2 n -1. Włożyłem wszystko w mumiętym class, aby uczynić go bardziej jak twoje zadanie.

from pprint import pprint

class Expression:

    def __init__(self, *variables):
        self.variables = variables

    def vars(self):
        return self.variables

    def dicx(self):
        def bools(bit_string):  # Helper function
            """ Convert string of binary chars to list of corresponding booleans. """
            return [ch == '1' for ch in bit_string]

        n = len(self.vars())
        vals = list(range(2**n))
        bits = [format(v, f'0{n}b') for v in vals]
        return [dict(zip(self.vars(), bools(combo))) for combo in bits]


instance = Expression('x', 'y', 'z')
pprint(instance.dicx(), sort_dicts=False)

Wynik:

[{'x': False, 'y': False, 'z': False},
 {'x': False, 'y': False, 'z': True},
 {'x': False, 'y': True, 'z': False},
 {'x': False, 'y': True, 'z': True},
 {'x': True, 'y': False, 'z': False},
 {'x': True, 'y': False, 'z': True},
 {'x': True, 'y': True, 'z': False},
 {'x': True, 'y': True, 'z': True}]
0
martineau 23 listopad 2020, 15:53