SubSilver hat geschrieben:Danke erstmals für deine schnelle Antwort
Kein Problem - ich hab sogar noch vergessen, dich im Forum willkommen zu heißen. Hole ich hiermit nach.
SubSilver hat geschrieben:Ich hab das Problem sogar so lösen können ohne Fehler abfangen zu müssen (Es geht darum die Häufigkeit der Zeichen in einem Text zu ermitteln):
Eben, das ist ja das Problem: du hast nicht gesagt, wozu du das brauchst. Daraus folgt, dass die Antwort zwar richtig ist, aber die Lösung für dich ganz anders aussieht. Daher ist es am besten sein wirkliches Problem zu beschrieben und einen Quelltext zu isolieren, der dieses Problem hat.
SubSilver hat geschrieben:Allerdings funktioniert irgendwo irgendetwas nicht, sodass ich folgende Fehlermeldung bekomme:
Code: Alles auswählen
me@notebook:~/Desktop/krypto/huffman$ ./anzahl2.sh
Traceback (most recent call last):
File "./anzahl2.sh", line 12, in ?
anzahl('dasisteintest')
File "./anzahl2.sh", line 8, in anzahl
if zeichen[symbol] > 0:
KeyError: 'd'
Was mich an dieser Stelle am meisten wunder wundert - warum nennst du das Skript anzahl2
.sh? Es ist doch gar kein Shellskript. Ich würde dir wirklich dringend empfehlen es anzahl2.py zu nennen - so kann es auch als Modul verwendet werden.
SubSilver hat geschrieben:Was bedeutet denn 'KeyError'?? Wo ist/sind der/die
Fehler im Code??
Das ist ganz einfach zu erklären, gehen wir mal deinen Code durch:
du versuchst mit der Zählvariablen pos die Position im String zu markieren und versuchst in der while-Schleife durch den String zu iterieren. Klappt auch für das erste Zeichen. Da du aber vergisst, pos jemals zu erhöhen, wird das eine Endlosschleifen werden. Aber es bricht schon vorher ab. Denn di pfüfst ob zeichen['d'] größer als null ist, Zeile 8. zeichen['d'] existiert jedoch nicht. In einem Dictionary sind nicht existente schlüssel nicht null, sie sind einfach nicht existend. Daher wird der KeyError geworfen, welcher aussagt, dass es den Key nicht gibt. Also muss er erstmal angelegt werden, wie du es auch in Zeile 11 Versuchst. Nur dass die Schleife schon vorher abbricht.
Ich gebe dir mal eine, im Python-Jargon heißt es pythonische Lösung:
Paste 497. Was darin anders ist? Ich spare mir die while-Schleife komplett, stattdessen iteriere ich gleich über die Zeichen. Simpel, einfach, warum geht das in anderen Sprachen nicht auch so schön? Dann versuche ich in Zeile 8 die Häufigkeit zu erhöhen und für den Fall dass das zeichen nicht im Dictionary existiert lege ich es in Zeile 10 an. Fertig.
Eine Bitte nur: nutze nicht mehrere Frage- und Ausrufzeichen hintereinander. Ich habe langsam eine Allergie dagegen entwickelt.