@efix: Der `str()`-Aufruf beim `input()` ist überflüssig, weil `input()` in Python 3 bereits eine Zeichenkette liefert.
Die ``pass``-Anweisung ist sinnfrei.
Ein nacktes ``except`` ohne eine konkrete Ausnahme ist keine gute Idee, schon gar nicht, wenn man dann auch noch sämtliche Informationen unterdrückt, was das denn für eine Ausnahme war und wo genau die aufgetreten ist. Das macht die Fehlersuche nahezu unmöglich.
Wenn man das weg lässt, wird die Schleife sinnlos. Ich frage mich auch welcher Fehler auf diese Weise sinnvoll behandelt werden könnte.
Die ganzen Variablen am Anfang sollte nicht *dort* definiert werden, sondern erst da wo sie tatsächlich benötigt werden. `string` als leere Zeichenkette wird nur benötigt wenn ein `KeyboardInterrupt` behandelt wird. *Dort* sollte das dann auch stehen, damit das deutlich(er) wird, dass das genau für diesen, und nur für diesen Fall gedacht ist.
Die 0en von `A`, `E`, `I`, `O`, und `U` werden nirgends verwendet.
Hier kodieren die Namen zudem Werte, sollten also gar keine Namen sein. Denn das führt so wie es jetzt da steht, ja unweigerlich zu Codewiederholungen, die man nicht haben sollte, weil man für jeden Vokal den gleichen Vorgang schreiben muss. Das ist also ein Fall für eine Schleife.
Code: Alles auswählen
#!/usr/bin/env python3
import re
from collections import Counter
def main():
try:
text = input("Geben Sie einen Satz ein:\n")
except KeyboardInterrupt:
text = ""
vowels = "aeiou"
pattern = "|".join(map(re.escape, vowels))
vowel_to_count = Counter(
match.group(0) for match in re.finditer(pattern, text.lower())
)
print(f"Anzahl der Vokale: {sum(vowel_to_count.values())}")
for vowel in vowels:
print(f"{vowel.upper()}: {vowel_to_count[vowel]}")
if __name__ == "__main__":
main()