Dechiffrierung mit Python

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
pleasehelp!
User
Beiträge: 28
Registriert: Donnerstag 15. November 2018, 20:44

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
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was hast du denn probiert ? Hausaufgaben fertig liefern tun wir hier aus Prinzip eigentlich nicht.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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
Benutzeravatar
__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
pleasehelp!
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.
pleasehelp!
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.

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 
     
pleasehelp!
User
Beiträge: 28
Registriert: Donnerstag 15. November 2018, 20:44

ThomasL hat geschrieben: Donnerstag 15. November 2018, 21:58 google mal nach "python text häufigkeitsanalyse", ich sehe da Links die dir helfen
Habe leider noch nichts gefunden, dass ich verstehe, muss das später erklären könne und es muss nicht nur funktionieren...
Aber trotzdem danke!
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
pleasehelp!
User
Beiträge: 28
Registriert: Donnerstag 15. November 2018, 20:44

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.
Danke, ich habe die Häufigkeitsanalyse hinbekommen, alleridngs fehlt mir jetzt noch wie ich alle Zeichen eines Textes zähle...
pleasehelp!
User
Beiträge: 28
Registriert: Donnerstag 15. November 2018, 20:44

Hey, auch da habe ich mittlerweile Hilfe bekommen, danke für alles!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ein Hinweis noch (um die Antwort von Sirius3 mit Code zu versehen).

Code: Alles auswählen

text.upper()
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::

Code: Alles auswählen

text = text.upper()
Für text.replace gilt das gleiche. Du bräuchtest daher

Code: Alles auswählen

text = text.replace("ß", "!")
text = text.upper()

# oder in einer Zeile
text = text.replace("ß", "!").upper()
pleasehelp!
User
Beiträge: 28
Registriert: Donnerstag 15. November 2018, 20:44

@/me

Ok, dann weiß ich Bescheid.
pleasehelp!
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.

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)
Antworten