Anfänger und Problem mit meinem Übersetzer

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
TripleD
User
Beiträge: 1
Registriert: Samstag 1. Mai 2021, 22:29

Hey, ich habe versucht einen Übersetzer zu machen, der nach jedem Vokal ein "bi" dranhängt außer es sind zwei Vokale nebeneinander, dann wird es nach dem zweiten Vokal angehängt ("Programmiere" seit 3 Tagen und das war das erste was ich versucht habe, nachdem ich ein paar der Standardbefehle gelernt habe).

Mein Problem jetzt ist, dass mein Übersetzer jetzt zwar funktioniert, aber falls die Eingabe mit einem Vokal endet, wird das letzt "bi" nicht angehangen.
Das liegt womöglich daran wie ich generell zum Ergebnis gekommen bin, deshalb würde ich gerne ein paar tipps bekommen, wie ich das Problem anders angehen kann bzw. ob es irgendwie einen Befehl gibt, der nur auf den letzten Buchstaben in der "for Schleife" zugreifen kann....

Viele Dank schonmal :D

Code: Alles auswählen

def translate(phrase):
    translation = ""
    i = 0 #Kommt Vocal zweimal vor:: 0 --> zum ersten mal; 1 --> zum 2 mal
    k = "bi" #Addition to vocals in translation
    r = 0

    for letter in phrase:
        if letter.lower() in "aeiou" and i == 0:
            translation = translation + letter
            i = 1
        elif letter.lower() in "aeiou" and i == 1:
            translation = translation + letter + k
            i = 0
        elif letter.lower() not in "aeiou" and i == 1:
            translation = translation + k + letter
            i = 0
        elif letter.lower() not in "aeiou":
            translation = translation + letter
    return translation

print(translate(input("Enter your phrase: ")))
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`r` wird gar nicht benutzt. `i` ist ein schlechter Name für ein Flag, das angibt, dass ein Vokal gefunden worden ist.
Die if-Abfragen sind unnötig kompliziert und natürlich mußt Du den Fall, dass am Ende ein Vokal war, extra behandeln:

Code: Alles auswählen

def translate(phrase, addition="bi"):
    translation = ""
    vocal_seen = False
    for letter in phrase:
        if letter.lower() in "aeiou":
            if vocal_seen:
                translation += letter + addition
                vocal_seen = False
            else:
                translation += letter
                vocal_seen = True
        else:
            if vocal_seen:
                translation += addition + letter
                vocal_seen = False
            else:
                translation += letter
    if vocal_seen:
        translation += addition
    return translation
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Trivial wird die Aufgabe mit regulären Ausdrücken:

Code: Alles auswählen

def translate(phrase, addition="bi"):
    return re.sub("[aeiou]{1,2}", lambda m: m.group(0) + addition, phrase, flags=re.I)
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Nebenbemerkung: "vocal" und "vowel" sind zwei verschiedene Dinge; hier ist vmtl. letzteres gemeint.
Antworten