Seite 1 von 1
Caesar-Verschlüsselung
Verfasst: Samstag 23. Dezember 2006, 13:39
von singstar
Hallo, hat jemand von euch den Quelltext für Caesar?
also zum Verschlüsseln und Entschlüsseln
Vielen Dank im Voraus
Verfasst: Samstag 23. Dezember 2006, 14:04
von EyDu
Sonst noch Hausaufgaben die zu erledigen sind? Also ich habs in sieben Zeilen geschafft.
Verfasst: Samstag 23. Dezember 2006, 14:06
von singstar
zeig mal den Quelltext bitte, ich bin noch nich so gut in Python
Verfasst: Samstag 23. Dezember 2006, 19:51
von Joghurt
singstar hat geschrieben:zeig mal den Quelltext bitte, ich bin noch nich so gut in Python
Zeig doch mal, was du bis jetzt hast. Lies dir mal den Thread "an alle Informatikstudenten" durch, damit du weisst, warum wir dir hier nicht sofort die Lösung präsentieren.
Es geht übrigens in einer Zeile, das ist aber schon für fortgeschrittene.
Verfasst: Samstag 23. Dezember 2006, 19:55
von tiax
ROT-13?
wie hoch sind denn die Anforderungen an den erbrachten Aufwand?
Reichen 17 Zeichen schon? Der Aufruf einer der Methoden eines Strings?
Verfasst: Samstag 23. Dezember 2006, 20:31
von BlackJack
Es geht auch in 16 Zeichen, aber
Code: Alles auswählen
In [57]: "Dafuer gibt's bestimmt keine Eins.".encode('rot13')
Out[57]: "Qnshre tvog'f orfgvzzg xrvar Rvaf."
Verfasst: Sonntag 24. Dezember 2006, 10:59
von EyDu
Joghurt hat geschrieben:
Es geht übrigens in einer Zeile, das ist aber schon für fortgeschrittene.
Das ist klar, aber ich glaube nicht, dass das der tiefere Sinn der Übung war/ist

Verfasst: Dienstag 26. Dezember 2006, 13:51
von singstar
ich hab eine Oberfläche mit einem Button "Verschlüsseln" und ich hab einen
Entry, wo der Text steht, der verschlüsselt werden soll
Das ist mein Quelltext
aber auf meiner Oberfläche wird der Text nich verschlüsselt
Code: Alles auswählen
def caesar_code (self, orginal):
s = "c" #3 Verschiebungen von c aus
for i in range (0, len (orginal)):
if orginal [i] == "\n" or orginal [i] == " " : s = s + orginal [i]
else :
x = ((ord (orginal [i]) - ord ('C')) + self.schub) % 26 + ord ('A')#Verschiebung um 1(2.Buchstabe)
s = s + chr (x) #Alphabetreihenfolge
return s
Verfasst: Dienstag 26. Dezember 2006, 15:44
von BlackJack
singstar hat geschrieben:Das ist mein Quelltext aber auf meiner Oberfläche wird der Text nich verschlüsselt
An dem Quelltext sieht man jetzt nicht wie Du die Methode benutzt. Schreib die Verschlüsselung am besten als eigene Funktion, welche die Zeichenkette und den Schlüssel (Wert für Verschiebung) als Argumente bekommt. Dann kannst Du die Funktion unabhängig von der GUI testen.
Code: Alles auswählen
def caesar_code (self, orginal):
s = "c" #3 Verschiebungen von c aus
for i in range (0, len (orginal)):
if orginal [i] == "\n" or orginal [i] == " " : s = s + orginal [i]
else :
x = ((ord (orginal [i]) - ord ('C')) + self.schub) % 26 + ord ('A')#Verschiebung um 1(2.Buchstabe)
s = s + chr (x) #Alphabetreihenfolge
return s
Der Quelltext ist sehr unübersichtlich formatiert. Versuch am besten Dich an die Empfehlungen in
PEP 8 zu halten.
Im wesentlichen: Einrücken mit 4 Leerzeichen pro Ebene. Leerzeichen um binäre Operatoren aber keine zwischen Namen und Indexzugriffen oder Argumenten für Funktionen. Zeilenlänge nicht grösser als 80 Zeichen. Für Blöcke eine neue Zeile anfangen, auch wenn es sich nur um eine Anweisung handelt.
Man kann in Python direkt über die Elemente von Listen iterieren und muss das nicht über einen Index lösen. Also:
Code: Alles auswählen
for i in xrange(0, len(text)):
do_something_with(text[i])
# =>
for character in text:
do_something_with(character)
Fragen zum Quelltext: Warum beginnt jeder Verschlüsselte Text mit einem 'c'? Was passiert wenn ein Kleinbuchstabe verschlüsselt wird? Was bei einem Satzzeichen? Warum wird der Wert von einem 'C' abgezogen, hinterher aber der von einem 'A' addiert?
Verfasst: Dienstag 26. Dezember 2006, 15:58
von lunar
singstar hat geschrieben:ich hab eine Oberfläche mit einem Button "Verschlüsseln" und ich hab einen
Entry, wo der Text steht, der verschlüsselt werden soll
Das ist mein Quelltext
aber auf meiner Oberfläche wird der Text nich verschlüsselt.
Das liegt aber wohl eher daran, dass du vergisst, den Chiffretext anzuzeigen.
Dein Code funktioniert nämlich, soll heißen, er gibt Buchstabensalat aus, wenn man in auf Klartext anwendet (nachdem das self.schub in Z 7 durch eine Zahl ersetzt hat).
Allerdings habe ich nicht geprüft, ob das wirklich eine Cäsar-Chiffre ist, dazu bin ich jetzt zu faul
Ansonsten bitte an PEP 8 halten. Das macht das Ganze lesbarer...
Verfasst: Samstag 30. Dezember 2006, 07:36
von Y0Gi
zu PEP8: Bitte ganz besonders die Leerzeichen vor den runden bzw. eckigen Klammern von Funktionsaufrufen bzw. Listen/Dicts weglassen.
Code: Alles auswählen
s = s + chr(65)
# lässt sich weitaus kürzer schreiben als
s += chr(65)
# analog gibt es für die anderen
# arithmetischen ("Rechen-")Operatoren
# die Kurzschreibweisen -=, *= und /=
# ----------------------
if orginal[i] == "\n" or orginal[i] == " ":
# lässt sich deutlich verkürzen (besonders für mehr als zwei Einträge) zu
if original[i] in ("\n", " "): # verwendet ein Tupel wie (1, 2), eine Liste [1, 2] geht natürlich auch
# oder speziell bei Strings sogar zu:
if original[i] in "\n ":