Abkürzung if/elif - Anweisung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hellfish
User
Beiträge: 2
Registriert: Montag 17. Mai 2021, 08:31

Hallo alle zusammen,

ich habe folgenden Programmcode:

Code: Alles auswählen

#Funktion
def braille():
    braille = {'a' : '\u2801', 'b' : '\u2803', 'c' : '\u2809', 'd' : '\u2819', 'e' : '\u2811', 'f' : '\u280b', 'g' : '\u281b', 'h' : '\u2813', 'i' : '\u280a', 'j' : '\u281a', 'k' : '\u2805',
           'l' : '\u2807', 'm' : '\u280d', 'n' : '\u281d', 'o' : '\u2815', 'p' : '\u280f', 'q' : '\u281f', 'r' : '\u2817', 's' : '\u280e', 't' : '\u281e', 'u' : '\u2825', 'v' : '\u2827',
           'w' : '\u283a', 'x' : '\u282d', 'y' : '\u283d', 'z' : '\u2835', ',' : '\u2802', ' ' : '\u2800',
           }
    
    if char == 'a':
        print(braille['a'], end = "")
    elif char == 'b':
        print(braille['b'], end = "")
    elif char == 'c':
        print(braille['c'], end = "")
    elif char == 'd':
        print(braille['d'], end = "")
    elif char == 'e':
        print(braille['e'], end = "")
    elif char == 'f':
        print(braille['f'], end = "")
    elif char == 'g':
        print(braille['g'], end = "")
    elif char == 'h':
        print(braille['h'], end = "")
    elif char == 'i':
        print(braille['i'], end = "")
    elif char == 'j':
        print(braille['j'], end = "")
    elif char == 'k':
        print(braille['k'], end = "")
    elif char == 'l':
        print(braille['l'], end = "")
    elif char == 'm':
        print(braille['m'], end = "")
    elif char == 'n':
        print(braille['n'], end = "")
    elif char == 'o':
        print(braille['o'], end = "")
    elif char == 'p':
        print(braille['p'], end = "")
    elif char == 'q':
        print(braille['q'], end = "")
    elif char == 'r':
        print(braille['r'], end = "")
    elif char == 's':
        print(braille['s'], end = "")
    elif char == 't':
        print(braille['t'], end = "")
    elif char == 'u':
        print(braille['u'], end = "")
    elif char == 'v':
        print(braille['v'], end = "")
    elif char == 'w':
        print(braille['w'], end = "")
    elif char == 'x':
        print(braille['x'], end = "")
    elif char == 'y':
        print(braille['y'], end = "")
    elif char == 'z':
        print(braille['z'], end = "")
    elif char == ',':
        print(braille[','], end = "")
    elif char == ' ':
        print(braille[' '], end = "")

#Eingabe durch Nutzer
eingabe = input("Bitte geben Sie einen Satz/Buchstaben ein: ")

#Verarbeitung der Eingabe und Aufruf der Funktion
for char in eingabe:
    braille()
Ich bin mir sicher es gibt eine Möglichkeit die if/elif-Blöcke in einer verkürzten Variante zu schreiben bzw.
grundsätzlich eine andere Variante zu schreiben.

Allerdings habe ich keine Idee wie ich das machen könnte (was sehr wahrscheinlich an fehlenden Wissen/Erfahrung liegt) und meine Frage ist ob mir jemand einen Schubs in eine Richtung geben könnte bzw. mir einen Tip geben könnte was ich mir mal anschauen sollte?

Vllt sehe ich auch den Wald vor lauter Bäumen nicht....:)

Ich bedanke mich schon mal im voraus für die Hilfe.

Grüße
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

braille[char]
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Du fragst per if ob `char` den Wert 'a', 'b', ... hat und benutzt dann wieder den String 'a', bzw. 'b' um auf das Wörterbuch zuzugreifen. Da kann man auch gleich die Variable char als Schlüssel für das Wörterbuch benutzen.

`braille` benutzt globale Variablen, das sollte nicht sein, Funktionen müssen alles, was sie brauchen (hier char) über ihre Argumente bekommen.
Das Wörterbuch sollte als Konstante außerhalb der Funktion definiert werden.

Code: Alles auswählen

BRAILLE_CODES = {
    'a' : '\u2801', 'b' : '\u2803', 'c' : '\u2809', 'd' : '\u2819', 'e' : '\u2811', 'f' : '\u280b',
    'g' : '\u281b', 'h' : '\u2813', 'i' : '\u280a', 'j' : '\u281a', 'k' : '\u2805', 'l' : '\u2807',
    'm' : '\u280d', 'n' : '\u281d', 'o' : '\u2815', 'p' : '\u280f', 'q' : '\u281f', 'r' : '\u2817',
    's' : '\u280e', 't' : '\u281e', 'u' : '\u2825', 'v' : '\u2827', 'w' : '\u283a', 'x' : '\u282d',
    'y' : '\u283d', 'z' : '\u2835', ',' : '\u2802', ' ' : '\u2800',
}

def braille(char):
    print(BRAILLE_CODES [char], end = "")

def main():
    eingabe = input("Bitte geben Sie einen Satz/Buchstaben ein: ")
    for char in eingabe:
        braille(char)
        
if __name__ == "__main__":
    main()
Besser wäre eine Funktion, die einen String in einen Braille-String umwandelt, da das flexibler ist:

Code: Alles auswählen

def to_braille(eingabe):
    return "".join(map(BRAILLE_CODES .get, eingabe))

def main():
    eingabe = input("Bitte geben Sie einen Satz/Buchstaben ein: ")
    print(to_braille(eingabe))
        
if __name__ == "__main__":
    main()
hellfish
User
Beiträge: 2
Registriert: Montag 17. Mai 2021, 08:31

Uff...thx für die schnellen Antworten. Ein paar neue Sache/Begriffe/Wörter/ whatever dabei..muss ich erstmal
verstehen...:)..

Aber Danke nochmal..
Antworten