Hallo,
ich bin Schülerin und muss ein Entschlüsselungsprogramm schreiben (ohne den Schlüssel zu kennen). Also auf jeden Fall eine Häufigkeitsanalyse der im Text vorkommenden Buchstaben machen. Komme da schon nicht weiter, also kann mir da jemand helfen?
Vielen Dank schonmal
Dechiffrierung mit Python
google mal nach "python text häufigkeitsanalyse", ich sehe da Links die dir helfen
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
- __blackjack__
- User
- Beiträge: 13071
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich werfe mal einen `collections.Counter` in den Raum.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
Hey, also ja es ist ein Projekt, aber ich brauche die Hilfe bei der Häufigkritsanalyse, habe eine while schleife probiert und versuche ein dict um die anzahl der buchstaben zu speichern, allerdings klappt der zugriff darauf auch nicht.
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
Hey
also habe mal das grobe Gerüst kopiert, aber das mit dict.items() bringt auch eine Fehlermeldung... achso ich muss mit Phyton 3.2.5 programmieren, ich glaube da gibt es ja unterschiede zu anderen Versionen.
also habe mal das grobe Gerüst kopiert, aber das mit dict.items() bringt auch eine Fehlermeldung... achso ich muss mit Phyton 3.2.5 programmieren, ich glaube da gibt es ja unterschiede zu anderen Versionen.
Code: Alles auswählen
buchstabe = {'A' : 0,"B" : 0,"C" : 0,"D" : 0,"E" : 0,"F" : 0,"G" : 0,"H" : 0,"I" : 0,"J" : 0,"K" : 0,"L" : 0,"M" : 0,"N" : 0,"O" : 0,"P" : 0,"Q" : 0,"R" : 0,"S" : 0,"T" : 0,"U" : 0,"V" : 0,"W" : 0,"X" : 0,"Y" : 0,"Z" : 0,"Ä" : 0,"Ö" : 0,"Ü" : 0,"!" : 0, "." : 0, "," : 0, " " : 0}
text = input("Texteingabe: ")
text.replace("ß", "!")
text.upper()
text = list(text)
a = 0
while a < len(text):
for buchstabe in dict.items():
if text[a] == buchstabe:
dict[buchstabe] = dict[buchstabe] + 1
a = a +1
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
Wenn eine Fehlermeldung kommt, wäre es gut, wenn Du auch sagst welche und wo (Traceback). Strings sind unveränderlich, replace oder upper liefert also als Ergebnis einen neuen String. Eine while-Schleife ist ziemlich umständlich, wenn man auch direkt mit einer for-Schleife über die Zeichen des Strings iterieren könnte. Ein Wörterbuch ist ja gerade dafür da, das man auf Schlüssel direkt zugreifen kann, da ist die for-Schleife über alle Elemente des Wörterbuchs nicht richtig.
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
Danke, ich habe die Häufigkeitsanalyse hinbekommen, alleridngs fehlt mir jetzt noch wie ich alle Zeichen eines Textes zähle...Sirius3 hat geschrieben: ↑Samstag 17. November 2018, 17:26 Wenn eine Fehlermeldung kommt, wäre es gut, wenn Du auch sagst welche und wo (Traceback). Strings sind unveränderlich, replace oder upper liefert also als Ergebnis einen neuen String. Eine while-Schleife ist ziemlich umständlich, wenn man auch direkt mit einer for-Schleife über die Zeichen des Strings iterieren könnte. Ein Wörterbuch ist ja gerade dafür da, das man auf Schlüssel direkt zugreifen kann, da ist die for-Schleife über alle Elemente des Wörterbuchs nicht richtig.
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
Hey, auch da habe ich mittlerweile Hilfe bekommen, danke für alles!
Ein Hinweis noch (um die Antwort von Sirius3 mit Code zu versehen).
Das alleine tut gar nichts. Genauer gesagt: es nimmt den String der in text steht, erstellt daraus einen String in Großbuchstaben und gibt diesen zurück. Du ignorierst diesen Rückgabewert aber. text selber ändert sich durch den Aufruf der Funktion nicht. Wenn text nachher den String in Großbuchstaben haben soll, dann musst du den Rückgabewert zuweisen::
Für text.replace gilt das gleiche. Du bräuchtest daher
Code: Alles auswählen
text.upper()
Code: Alles auswählen
text = text.upper()
Code: Alles auswählen
text = text.replace("ß", "!")
text = text.upper()
# oder in einer Zeile
text = text.replace("ß", "!").upper()
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
@/me
Ok, dann weiß ich Bescheid.
Ok, dann weiß ich Bescheid.
-
- User
- Beiträge: 28
- Registriert: Donnerstag 15. November 2018, 20:44
Ich habe das ganze mal etwas gekürzt komme aber bei der Ersetzung der Buchstaben, durch die schon nach Häufigkeit Sortierten in einer Liste nicht weiter.
Habe mal was probiert, vielleicht hat jemand einen Tipp für mich.
Habe mal was probiert, vielleicht hat jemand einen Tipp für mich.
Code: Alles auswählen
from operator import itemgetter
##Informationen für den weiteren Verlauf
anzahl = dict.fromkeys(string.ascii_uppercase + 'ßÄÖÜ', 0)
ersetzungh = ["E", "N", "I", "R", "S", "T", "A", "H", "D", "U", "L", "C", "G", "M", "O", "B", "W", "F", "K","Z", "V", "P", "Ü", "Ä", "ß", "Ö", "J", "Y", "X", "Q"]
##Informationseingabe des Benutzers
print("Herzlich Willkommen bei ihrem Entschlüsselungsprogramm.", "\n", "Bitte geben sie bei der folgenden Texteingabe ihren zu entschlüsselten Text ein.")
text = input("Texteingabe: ")
for character in text.upper():
if character in anzahl:
anzahl[character] += 1
daten = list(sorted(anzahl.items(), key=itemgetter(1), reverse=True))
print(daten)
##Ersetzung
a = 0
for richtig in ersetzungh:
for buchstabe in text:
if buchstabe == daten[a][0]:
buchstabe = richtig
a += 1
print(text)