Hi Uludug,
zuerst lass mich sagen: Dein Code ist schräg. Ohne ihn getestet zu haben würde ich mal folgendes feststellen:
- eine einfache Cäsar- Chiffre ist eine Verschiebung um eine bestimmte Anzahl von Buchstaben. Du lässt Deinen Nutzer aber einen 3- Stelligen "Codierungsschlüssel" eingeben, aus dem Du dann eine Verschiebungszahl ausrechnest. "aaa" liefert dann das gleiche Ergebnis wie "c", bei "A" kommt eine negative Zahl raus. Überhaupt löst Du das mit dem Übertrag seltsam. Du rechnest quasi irgendeinen nicht mehr im Bereich der Kleinbuchstaben darstellbaren Code aus und verschiebst ihn zurück in die Kleinbuchstaben. Ich will nicht sagen, dass das nicht funktioniert, aber Im Grunde baust Du m.E. gerade eine Hundehütte aus handgehäkelter Naturseide
- Python erhält seine Übersichtlichkeit dadurch, dass es per Zwang einrückt, aber auch dadurch, dass die Funktionen klein und gut gekapselt sind. Mindestens deine drei Modi solltest Du m.E. in getrennte Funktionen auslagern (z.B. codieren, decodieren, erraten) Eigentlich sind bei Cäsar- Chiffre codieren und decodieren gleich, wenn Du das Vorzeichen der Verschiebung umkehrst, aber ich will Dir Deine Implementierung nicht kaputt machen
- Das Ermitteln Deiner Verschiebungszahlen sollte in eine eigene Funktion ausgelagert werden (z.B. berechne_verschiebung(code_text : str) ), da Du sie ja mehrmals genau gleich benutzt. Überlege Dir auch, ob Du das - statt mit einer kaskadierten Verzweigung - auch mit einer Schleife hinbekommen kannst.
Ich habe mich jetzt nicht mit collections.Counter beschäftigt, aber angenommen, es ist so, wie Du erwartest, dass
das erwartete Ergebnis liefert, dann passiert in der Zeile
nicht mehr, als dass Du der funktion most_frequent auch noch den Namen haeufigstes verpasst. Du könntest also auch
anstelle von
aufrufen, mit exakt dem gleichen Ergebnis. Das ist auch das, worauf Dich __deets__ hinweisen wollte.
UNd wenn Du dann später
aufrufst, dann bittest Du python also, das Nullte Element der o.g. Funktion zur Verfügung zu stellen und Python antwortet folgerichtig mit: Nix da, eine Funktion hat so was nicht.
Du könntest jetzt also konkret den Fehler suchen und beheben, Du könntest aber auch überlegen, ob Du Deinen Code zumindest etwas übersichtlicher machen kannst durch Neustrukturierung. Das hätte den Vorteil, dass Du selbst besser durchsiehst, aber auch, dass potentielle Helfer nicht so viel Mühe haben, sich einzuarbeiten. Ob er funktioniert und ob es chic ist, dass er letztlich nur mit Kleinbuchstaben zwischen a und z umgehen kann - das ist eine anderes Thema (heißt nicht: Neuer Thread, sondern einfach nur: anderer Aspekt im gleichen Thread).