lehrkraefte:sbtsnr:python:logic

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
lehrkraefte:sbtsnr:python:logic [2022/09/30 18:16]
Karlheinz Schubert
lehrkraefte:sbtsnr:python:logic [2022/10/19 17:10]
Olaf Schnürer [Funktion Erhoehen war falsch]
Line 151: Line 151:
     print(f"{Zeile:5}  ({Zeile:02X})  |  {xTeil}  | {Und():3}  {Oder():3}  {ExOder():3}")     print(f"{Zeile:5}  ({Zeile:02X})  |  {xTeil}  | {Und():3}  {Oder():3}  {ExOder():3}")
     Erhoehen(Zeile, x)     Erhoehen(Zeile, x)
 +</code>
 +
 +====== Funktion Erhoehen oben korrigiert ======
 +
 +<code python wahrheitstabelle-step3-verbessert.py>
 +"""
 +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)
 +</code>
 +
 +====== ... und nun noch etwas rumgesponnen ... ======
 +
 +<code python wahrheitstabelle-step3-per-binaerdarstellung.py>
 +"""
 +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}}"   
 </code> </code>
  • lehrkraefte/sbtsnr/python/logic.txt
  • Last modified: 2022/11/04 18:21
  • by Olaf Schnürer