Caesar-Verschlüsselung

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.
singstar
User
Beiträge: 9
Registriert: Freitag 22. Dezember 2006, 13:33

Caesar-Verschlüsselung

Beitragvon singstar » Samstag 23. Dezember 2006, 13:39

Hallo, hat jemand von euch den Quelltext für Caesar?
also zum Verschlüsseln und Entschlüsseln

Vielen Dank im Voraus
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 23. Dezember 2006, 14:04

Sonst noch Hausaufgaben die zu erledigen sind? Also ich habs in sieben Zeilen geschafft.
singstar
User
Beiträge: 9
Registriert: Freitag 22. Dezember 2006, 13:33

Beitragvon singstar » Samstag 23. Dezember 2006, 14:06

zeig mal den Quelltext bitte, ich bin noch nich so gut in Python
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Samstag 23. Dezember 2006, 19:51

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.
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Beitragvon tiax » Samstag 23. Dezember 2006, 19:55

ROT-13?

wie hoch sind denn die Anforderungen an den erbrachten Aufwand?

Reichen 17 Zeichen schon? Der Aufruf einer der Methoden eines Strings?
Ne invoces expellere non possis
xmpp:florian@florianheinle.de
BlackJack

Beitragvon BlackJack » Samstag 23. Dezember 2006, 20:31

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."
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Sonntag 24. Dezember 2006, 10:59

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 :D
singstar
User
Beiträge: 9
Registriert: Freitag 22. Dezember 2006, 13:33

Beitragvon singstar » Dienstag 26. Dezember 2006, 13:51

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
BlackJack

Beitragvon BlackJack » Dienstag 26. Dezember 2006, 15:44

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?
lunar

Beitragvon lunar » Dienstag 26. Dezember 2006, 15:58

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...
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Samstag 30. Dezember 2006, 07:36

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 ":

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder