Caesar-Verschlüsselung

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

`text.lower()` gibt eine Kopie des Strings wieder. Und es ist sehr unperformant bei jedem Buchstaben von neuem zu zählen. Anbieten würde sich da ein defaultdict.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Den am häufigsten Buchstaben als "e" zu identifizieren dürfte in der Regel wohl nicht ausreichen.
Abgesehen davon werden in der Funktion einlesen() auch zwei Dinge vermischt, die eigentlich nichts miteinander zu tun haben. Das Ermitteln des am häufigsten vorkommenden Buchstabens hat mit dem Einlesen der Datei nichts zu tun.

Die Ermittlung des häufigsten Buchstabens lässt sich gut auch in 1 Zeile lösen. Eine Möglichkeit wäre diese:

Code: Alles auswählen

from string import ascii_lowercase as abc
s = "Das ist ein Test, ob es klappt"
print max(zip(map(s.lower().count,abc),abc))[1]
Sollten mehrere Buchstaben mit gleicher Häufigkeit vorkommen, würde so nur der im Alphabet am weitesten hinten stehende zurückgeliefert.
marlene
User
Beiträge: 26
Registriert: Montag 13. September 2010, 12:11

Den am häufigsten Buchstaben als "e" zu identifizieren dürfte in der Regel wohl nicht ausreichen
.
Bei meinen Testobjekten hats bis jetzt immer funktioniert, was könnt ich denn noch mit einbauen?
print max(zip(map(s.lower().count,abc),abc))[1]
darauf wär ich nicht gekommen, is cool und echt gut, ich galube ich habs soweit auch verstanden was du da treibst.

Hab meinen Code auch so umgebaut, ist es in ordnung wenn def einlesen def haufigkeit_buchstabe aufruft und den text als Prameter übergibt?

Code: Alles auswählen

from string import ascii_lowercase as abc

#Datei mit Codierten-Daten vorher erstellen(.txt), und als Parameter(dateipfad) angeben.
#Das Zeichen, das am haufigsten vorkommt wird ausgegeben.
def einlesen(dateipfad):
    datei = open(dateipfad)
    text = datei.read()
    datei.close()
    haufigkeit_buchstabe(text)

[code=python]#Das Zeichen, das am haufigsten im Text vorkommt wird ausgegeben.
def haufigkeit_buchstabe(text):
    print max(zip(map(text.lower().count, abc), abc))[1]
    
#Der Index(Buchstabe der am haufigsten vorkommt als Parameter angeben) zum verschieben zu 'e' wird ermittelt.
def index(buchstabe_max):
    buchstabe_max = buchstabe_max
    verschiebe_index = abc.index('e') - abc.index(buchstabe_max)
    print verschiebe_index

#Eingelesene Textdatei(Parameter) wird um den als Parameter angegebenen Wert verschoben und ausgegeben.    
def verschieben(verschiebe_index, dateipfad):
    datei = open(dateipfad)
    text = datei.read()
    verschiebe_index = verschiebe_index
    text_ausgabe = []
    for z in text.lower():
        if z not in abc:
            text_ausgabe.append(z)
        else:
            a = abc.index(z)
            b = a + verschiebe_index
            b = b % len(abc)
            text_ausgabe.append(abc[b])
    print ''.join(text_ausgabe)
    datei.close()
Antworten