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.
Vokal-Laute entfernen
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.
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:__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.
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
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.
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:__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.
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
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()
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()
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]
[codebox=pycon file=Unbenannt.txt]>>> ''.join(filter(lambda x: x not in 'aeiouAEIOU', 'Hello, World!'))
'Hll, Wrld!'
[/code]
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Oder ohne Lambda:
Code: Alles auswählen
vowels = set('aAeEiIoOuU')
''.join(char for char in text if char not in vowels)
Oder ohne `for`:
Code: Alles auswählen
''.join(filter(set('aeiouAEIOU').isdisjoint, text))