Buchstaben zählen

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
Bruce1009
User
Beiträge: 2
Registriert: Mittwoch 12. Mai 2021, 08:29

Hallo Leute,

Könnt ihr mir bei meinem Problem helfen?

Brauche eine Funktion, die einen Text entgegen nimmt
und der am meisten benutzter Buchstabe (mit Anzahl) zurückgibt.

Danke und Gruss
Bruce1009
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wir liefern keine Hausaufgaben auf Bestellung. Was hier auch dick dokumentiert ist. Hilfe zur Selbsthilfe und so. Was hast du probiert? Was ist dir unklar?
Bruce1009
User
Beiträge: 2
Registriert: Mittwoch 12. Mai 2021, 08:29

Geht es auch einfacher als das?

def counter():
text = input("Gebe einen Text ein: ")
text = text.replace(" ", "")
wörter = list(text)
from collections import Counter
dict_wörter = Counter(wörter)
max_val = [keys for keys,values in dict_wörter.items() if values == max(dict_wörter.values())]
print("The most used letter or letters is or are: " + str(max_val))
anzahl=list(dict_wörter.values())
print("You used them " + str(max(anzahl)) + " times.")

counter()
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Das was Du als `wörter` bezeichnest, sind eigentlich keine Wörter. Was sind die Elemente dieser Liste wirklich?
Importe gehören an den Anfang der Datei, damit man gleich weiß, welche Abhängigkeiten dieses Modul hat.
In `dict_wörter` kommt ein Datentyp vor. Das macht man üblicherweise nicht, weil sich der Typ schnell mal ändern kann, und streng genommen ein Counter-Objekt auch kein dict ist. Das Maximum der Values berechnest Du für jeden Schleifendurchlauf Deiner Listcomprehension und nochmal zum Schluß. Das reicht eigentlich einmal.
Ein Item eines Counters ist keine keys und keine values. Warum benutzt Du da Plural?
Strings stückelt man nicht mit + zusammen, sondern benutzt Formatstrings.

Code: Alles auswählen

from collections import Counter

def count_characters():
    text = input("Gebe einen Text ein: ")
    text = text.replace(" ", "")
    character_count = Counter(text)
    maximum_count = max(character_count.values())
    most_common_character = [character for character, count in character_count.items() if count == maximum_count]
    print(f"The most used letter or letters is or are: {most_common_character}")
    print(f"You used them {maximum_count} times.")

count_characters()
Jetzt kannst Du noch schauen, welche Methoden solch ein Counter-Objekt hat und welche davon genau das tut, was Du brauchst.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das entfernen der Spaces ist auch nicht robust. Wenn sich zwei oder mehr in der Eingabe befinden, passiert Unfug. Ich würde mir die einfach sparen, und am Ende Leerzeichen aus dem Counter schmeißen.
Das ist Unsinn gewesen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: ich glaube, Du hast split mit replace verwechselt. Aber es gibt natürlich noch viele andere Zeichen, die keine Buchstaben sind, und trotzdem mitgezählt werden. Groß-Klein-Schreibung ist auch noch eine Frage.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Sirius3 : du hast recht, ich habe mich da irgendwie selbst verwirrt. Ich glaube ich kam aus Richtung zweimal Space -> einmal Space, was für Wortzählung wichtig sein könnte.
Antworten