====== Entwicklung eines Programms zur Darstellung von logischen Operationen --> Wahrheitstabellen ====== """ Print of Logic tables """ import operator anzahlVariablen = 2 x1 = False x2 = False for index in range(2**anzahlVariablen): print( f"{index} | {x2} {x1} | {x2 and x1} {x2 or x1} {x2 ^ x1}" ) x1 = not x1 if (index + 1) % 2 == 0: x2 = not x2 """ Print of Logic tables """ import operator anzahlVariablen = 2 x1 = False x2 = False Ueberschrift = " Index | x2 x1 | and or xor" print(Ueberschrift) print("-" * len(Ueberschrift)) for index in range(2**anzahlVariablen): print( f"{index} |{x2} {x1} | {x2 and x1} {int(x2 or x1)} {int(x2 ^ x1)}" ) x1 = not x1 if (index + 1) % 2 == 0: x2 = not x2 """ Print of Logic tables """ import operator anzahlVariablen = 3 x1 = False x2 = False x3 = False Ueberschrift = " Index | x3 x2 x1 | and or xor" print(Ueberschrift) print("-" * len(Ueberschrift)) for index in range(2**anzahlVariablen): print( f"{index:5} |{x3:5} {x2:5} {x1:5} | {int(x3 and x2 and x1)} {int(x3 or x2 or x1)} {int(x3 ^ x2 ^ x1)}" ) x1 = not x1 if (index + 1) % 2 == 0: x2 = not x2 if (index + 1) % 4 == 0: x3 = not x3 """ Print of Logic tables """ import operator anzahlVariablen = 3 x1 = False x2 = False x3 = False Ueberschrift = "Index | x3 x2 x1 | and or xor " print(Ueberschrift) print("-" * len(Ueberschrift)) for index in range(2**anzahlVariablen): print( f"{index:5} | {str(x3):5} {str(x2):5} {str(x1):5} | {str(x3 and x2 and x1):5} {str(x3 or x2 or x1):5} {x3 ^ x2 ^ x1}" ) x1 = not x1 if (index + 1) % 2 == 0: x2 = not x2 if (index + 1) % 4 == 0: x3 = not x3 """ Print of Logic tables """ import operator anzahlVariablen = int(input("Anzahl Variablen [1...9]: ")) x = [] for index in range(anzahlVariablen): x.append(False) def Oder(): Wert = False for index in range(anzahlVariablen): Wert = Wert or x[index] return Wert def Und(): Wert = True for index in range(anzahlVariablen): Wert = Wert and x[index] return Wert def ExOder(): Wert = False for index in range(anzahlVariablen): Wert = Wert ^ x[index] return Wert def Erhoehen(nr, feld): for index in range(1, anzahlVariablen + 1): if (nr + 1) % index == 0: x[index - 1] = not x[index - 1] UeberschriftxTeil = "" for index in range(anzahlVariablen): UeberschriftxTeil += f"x{index+1} " Ueberschrift = f" Index | {UeberschriftxTeil} | and or xor" print(Ueberschrift) print("-" * len(Ueberschrift)) for Zeile in range(2**anzahlVariablen): # xTeil = [x[xIndex] for xIndex in range(len(x))] xTeil = "" for index in range(anzahlVariablen, 0, -1): xTeil += f"{x[index-1]:2} " print(f"{Zeile:5} ({Zeile:02X}) | {xTeil} | {Und():3} {Oder():3} {ExOder():3}") Erhoehen(Zeile, x) ====== Funktion Erhoehen oben korrigiert ====== """ Truth tables """ import operator anzahlVariablen = int(input("Anzahl Variablen [1...9]: ")) x = anzahlVariablen * [False] def Oder(): Wert = False for index in range(anzahlVariablen): Wert = Wert or x[index] return Wert def Und(): Wert = True for index in range(anzahlVariablen): Wert = Wert and x[index] return Wert def ExOder(): Wert = False for index in range(anzahlVariablen): Wert = Wert ^ x[index] return Wert def Erhoehe(nr, feld): index = anzahlVariablen - 1 while feld[index] == True: x[index] = False index -= 1 if index >= 0: x[index] = True UeberschriftxTeil = "" for index in range(anzahlVariablen): UeberschriftxTeil += f"x{index+1} " Ueberschrift = f" Index | {UeberschriftxTeil} | and or xor" print(Ueberschrift) print("-" * len(Ueberschrift)) for Zeile in range(2**anzahlVariablen): xTeil = "" for index in range(anzahlVariablen): xTeil += f"{x[index]:2} " print(f"{Zeile:5} ({Zeile:02X}) | {xTeil} | {Und():3} {Oder():3} {ExOder():3}") Erhoehe(Zeile, x) ====== ... und nun noch etwas rumgesponnen ... ====== """ Truth tables """ leerzeichen = 4 # sollte mindestens 4 sein # Unicode-Nummern gefunden auf https://unicode-table.com/en/blocks/box-drawing/ vertikal = '\u2502' # '\uff5c' horizontal = '\u2500' # '\u23af' kreuzung = '\u253c' anzahlVariablen = int(input("Anzahl Variablen [1...9]: ")) UeberschriftVariablenTeil = "".join([f'{f"x{index + 1}":>{leerzeichen}}' for index in range(anzahlVariablen)]) UeberschriftLogikTeil = f"{'and':>{leerzeichen}}" + f"{'or':>{leerzeichen}}" + f"{'xor':>{leerzeichen}}" print(UeberschriftVariablenTeil + " " + vertikal + UeberschriftLogikTeil) print(horizontal * (len(UeberschriftVariablenTeil) + 1) + kreuzung + horizontal * len(UeberschriftLogikTeil)) for index in range(2 ** anzahlVariablen): binaer = f'{index:0{anzahlVariablen}b}' binearMitAbstand = "".join([""] + [f'{z:>{leerzeichen}}' for z in binaer]) # # ausführlich: # und = "1" if binaer.count("1") == anzahlVariablen else "0" # oder = "1" if binaer.count("1") > 0 else "0" # xOder = "1" if binaer.count("1") % 2 == 1 else "0" # print(binearMitAbstand + " vertikal" + f"{und:>{leerzeichen}}" + f"{oder:>{leerzeichen}}" + f"{xOder:>{leerzeichen}}") # kurz: print(binearMitAbstand + " " + vertikal + f"{binaer.count('1') == anzahlVariablen:>{leerzeichen}}" + f"{binaer.count('1') > 0:>{leerzeichen}}" + f"{binaer.count('1') % 2 == 1:>{leerzeichen}}") ====== Turtle-Test ====== from turtle import * speed(0) shape("turtle") n = 11 s = 230 pencolor("red") pensize(4) fillcolor("yellow") a = 300 penup() goto(0.7*a, 0.5*a) pendown() setheading(90) pendown() begin_fill() for i in range(n): forward(s) left(180 - 180/n) end_fill()