Seite 1 von 1

Abkürzung if/elif - Anweisung

Verfasst: Montag 17. Mai 2021, 09:32
von hellfish
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

Re: Abkürzung if/elif - Anweisung

Verfasst: Montag 17. Mai 2021, 09:38
von __deets__
braille[char]

Re: Abkürzung if/elif - Anweisung

Verfasst: Montag 17. Mai 2021, 09:45
von Sirius3
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()

Re: Abkürzung if/elif - Anweisung

Verfasst: Montag 17. Mai 2021, 10:51
von hellfish
Uff...thx für die schnellen Antworten. Ein paar neue Sache/Begriffe/Wörter/ whatever dabei..muss ich erstmal
verstehen...:)..

Aber Danke nochmal..