Seite 1 von 1

Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 15:43
von didi27
Hallo,

Ich frage mich wie man die Vokal-Laute aus einem Wort entfernt. I'm stuck. Pls Help ME. This is my Code:

def disemvowel(word):
____vowels = ('a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U')
____for vowel in vowels:
________word.remove(vowel)
____print(word)

disemvowel('aeiouAeioukjhdfsdfjfaeiofdfkjhsdf')

Das ist eine Aufgabe von Treehouse. Ich brauche also nur ein paar Tipps. Damit ich noch was egenständig tun kann.

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 15:49
von __deets__
Statt Unterstrichen einfach das Code-Feature hier im Editor verwenden.

Und zu deinem Problem: auch wenn es nicht gerade vor Effizienz strotzt, bist du schon fast da. Nur gibt es halt kein remove auf Strings. Es gibt aber replace.

https://docs.python.org/3/library/stdty ... tr.replace

Deinen Vokal mit einem Leerstring zu ersetzen sollte dich weiterbringen. Aber Achtung: strings in Python sind unveraenderlich! Dem musst du Rechnung tragen.

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 16:00
von didi27
__deets__ hat geschrieben:Statt Unterstrichen einfach das Code-Feature hier im Editor verwenden.

Und zu deinem Problem: auch wenn es nicht gerade vor Effizienz strotzt, bist du schon fast da. Nur gibt es halt kein remove auf Strings. Es gibt aber replace.

https://docs.python.org/3/library/stdty ... tr.replace

Deinen Vokal mit einem Leerstring zu ersetzen sollte dich weiterbringen. Aber Achtung: strings in Python sind unveraenderlich! Dem musst du Rechnung tragen.
Also Danke erstmal für den Tipp. So sieht mein Code aus der noch nicht das erfüllt was ich erwarte:

Code: Alles auswählen

def disemvowel(word):
    try:
        vowels = ['a','A','e','E','i','I','o','O','u','U']
        for vowel in vowels:
            word.replace(vowel,'')
        return word
    except ValueError:
        pass
noch ein paar tipps?

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 16:09
von __deets__
Wieso hast du denn den ValueError? Das klingt nach daneben programmiert. Das muss also raus, und die Ursache repariert werden.

Und nochmal: strings in Python sind unveraenderlich. replace veraendert also nicht den string, so wie du es erwartest. Sondern liefert den veraenderten string zurueck. Den musst du dann also weiterverwenden, indem du ihn word wieder zuweist.

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 16:15
von didi27
__deets__ hat geschrieben:Wieso hast du denn den ValueError? Das klingt nach daneben programmiert. Das muss also raus, und die Ursache repariert werden.

Und nochmal: strings in Python sind unveraenderlich. replace veraendert also nicht den string, so wie du es erwartest. Sondern liefert den veraenderten string zurueck. Den musst du dann also weiterverwenden, indem du ihn word wieder zuweist.
Jaaa Danke für die Hilfe! Es hat geklappt! einfach word den neuen Wert zuweisen:

Code: Alles auswählen

def disemvowel(word):
	vowels = ['a','A','e','E','i','I','o','O','u','U']
	for vowel in vowels:
		word = word.replace(vowel,'')
	return word

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 18:12
von snafu
Man kann auch translate() benutzen:

Code: Alles auswählen

#!/usr/bin/env python3

def delete_chars(characters, text):
    charmap = dict.fromkeys(characters)
    table = str.maketrans(charmap)
    return text.translate(table)

def delete_vowels(text):
    vowels = 'aeiou'
    vowels += vowels.upper()
    return delete_chars(vowels, text)

def main():
    text = 'aeiouAeioukjhdfsdfjfaeiofdfkjhsdf'
    print(delete_vowels(text))

if __name__ == '__main__':
    main() 

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 18:40
von snafu
Und hier nochmal mit einem Cache, wobei ich maketrans() einfach nachgebaut habe:

Code: Alles auswählen

#!/usr/bin/env python3

_CACHE = {}

def delete_chars(characters, text):
    if characters not in _CACHE:
        _CACHE[characters] = dict.fromkeys(map(ord, characters))
    return text.translate(_CACHE[characters])

def delete_vowels(text):
    vowels = 'aeiou'
    vowels += vowels.upper()
    return delete_chars(vowels, text)

def main():
    text = 'aeiouAeioukjhdfsdfjfaeiofdfkjhsdf'
    print(delete_vowels(text))

if __name__ == '__main__':
    main() 

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 20:38
von bwbg
Das ganze jetzt mal funktional als Einzeiler:

[codebox=pycon file=Unbenannt.txt]>>> ''.join(filter(lambda x: x not in 'aeiouAEIOU', 'Hello, World!'))
'Hll, Wrld!'
[/code]

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 20:50
von snafu
Oder ohne Lambda:

Code: Alles auswählen

vowels = set('aAeEiIoOuU')
''.join(char for char in text if char not in vowels)

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 21:36
von bwbg
Und ohne filter sowie die Vokale als Menge. Besser kann es nicht mehr werden ;)

Re: Vokal-Laute entfernen

Verfasst: Freitag 29. September 2017, 21:44
von snafu
Naja, für längere Texte, die sich im ASCII-Bereich bewegen (also z.B. ohne Umlaute und ohne ß) würde ich schon lieber translate() benutzen, auch wenn die Schnittstelle relativ lowlevel ist.

Re: Vokal-Laute entfernen

Verfasst: Samstag 30. September 2017, 02:01
von didi27
Wow so viele verschiedene Lösungen! :o

Re: Vokal-Laute entfernen

Verfasst: Samstag 30. September 2017, 15:15
von Sirius3
Oder ohne `for`:

Code: Alles auswählen

''.join(filter(set('aeiouAEIOU').isdisjoint, text))