Seite 1 von 1

Anfänger und Problem mit meinem Übersetzer

Verfasst: Samstag 1. Mai 2021, 22:38
von TripleD
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: ")))

Re: Anfänger und Problem mit meinem Übersetzer

Verfasst: Samstag 1. Mai 2021, 23:11
von Sirius3
`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

Re: Anfänger und Problem mit meinem Übersetzer

Verfasst: Sonntag 2. Mai 2021, 09:20
von Sirius3
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)

Re: Anfänger und Problem mit meinem Übersetzer

Verfasst: Sonntag 2. Mai 2021, 11:18
von nezzcarth
Nebenbemerkung: "vocal" und "vowel" sind zwei verschiedene Dinge; hier ist vmtl. letzteres gemeint.