Verschlüsselung / Geheimsprache

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
andieseul
User
Beiträge: 13
Registriert: Dienstag 2. November 2021, 17:30

Hallo, alle miteinander,
Ich habe folgende Aufgabe gestellt bekommen:

Sie und Ihr bester Freund/Ihre beste Freundin möchten den Inhalt Ihrer Nachrichten (auf den ersten Blick) unlesbar machen. Um dies zu erreichen, haben Sie sich folgendes Verfahren ausgedacht. Jeden Morgen sehen Sie sich und einigen sich auf eine Zahl (ein Integer). Sie verwenden die ASCII-Tabelle (siehe unten) und verschieben jedes Zeichen Ihrer Nachricht um die vereinbarte Zahl. Allerdings beschränken Sie sich nur auf die Zeichen der Tabelle zwischen (*beide Randwerte eingeschlossen*) den Indizes *33* und *126*.

**Aufgabe:** Schreiben Sie eine Funktion, die den ursprünglichen Satz und die Zahl, auf die Sie sich geeinigt haben, als Argumente nimmt. Die Funktion soll diesen Satz "verschlüsseln", indem sie jedes Zeichen um die angegebene Zahl verschiebt. Dabei bezieht sich das Verschieben auf den entsprechenden Index eines Zeichens in der ASCII Tabelle. Der Rückgabewert Ihrer Funktion ist der "verschlüsselte" Satz (ein String). *Sie können davon ausgehen, dass alle Sätze nur Symbole enthalten, die in der unten stehenden ASCII-Tabelle enthalten sind.*

Wie bereits erwähnt, basiert die Kodierung auf der ASCII-Tabelle und ist auf die Zeichen zwischen Index 33 ('!') und Index 126 ('~') beschränkt. Die Verschiebung des Zeichens 'y' um 10 ergibt zum Beispiel '%'. **Alle Zeichen, die nicht in diesem Bereich enthalten sind (z. B. Leerzeichen), sollen unverändert in den neuen Satz übernommen werden.**

Pythons eingebaute Funktionen [`ord()`](https://www.geeksforgeeks.org/ord-function-python/) und [`chr()`](https://www.geeksforgeeks.org/chr-in-python/) sind sehr hilfreich bei der Umwandlung von Zeichen in die entsprechenden (ASCII) Dezimalzahlen (Indices) und umgekehrt. Sie können und sollen diese Funktionen verwenden, um diese Aufgabe zu lösen!

Folgendes habe ich dann versucht:

code = input("Code: ")
shift = int(input("Verschiebungsfaktor: "))
encoded = "".join(chr((ord(char) + shift) %
print("Verschlüsselter Code:", encoded)

Ich bekomme dann folgende Fehlermeldung:
File "C:\Users\Andie La Seule\PycharmProjects\testProjekt\main.py", line 5

^
SyntaxError: unexpected EOF while parsing

Process finished with exit code 1

Was mache ich falsch?

Viele Grüße von einer absoluten Anfängerin
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

In der Zeile die mit encoded beginnt hast du einen Fehler.

Nachtrag: ich weiss nicht so genau, wass du da erreichen willst, darum ist das alles, was ich da sagen kann.
andieseul
User
Beiträge: 13
Registriert: Dienstag 2. November 2021, 17:30

Okay.... Ist der Punkt der Fehler?
Ich möchte eine Funktion schreiben, die unter bestimmten Vorgaben, Text verschlüsselt und auch wieder entschlüsselt. Ich weiß einfach nicht, wie ich das machen soll. Völliges Blackout.
Aber lieben Dank für Deine Antwort....
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@: Wenn du eine Klammer aufmachst, musst du sie auch wieder schließen. Insbesondere bedeutet das, dass die Anzahl der schließenden Klammern gleich der öffnenden sein muss.
In specifications, Murphy's Law supersedes Ohm's.
andieseul
User
Beiträge: 13
Registriert: Dienstag 2. November 2021, 17:30

pillmuncher hat geschrieben: Dienstag 30. November 2021, 17:48 @: Wenn du eine Klammer aufmachst, musst du sie auch wieder schließen. Insbesondere bedeutet das, dass die Anzahl der schließenden Klammern gleich der öffnenden sein muss.
Okay....alles klar. Danke. Mal sehen, wie ich da weiter komme :roll:
Caskuda
User
Beiträge: 26
Registriert: Sonntag 15. März 2020, 22:09

In der Zeile "encoded" fehlte das Durchlaufen der einzelnen Buchstaben der zu verschlüsselnden Nachricht:

Code: Alles auswählen

msg = input("Code: ")
shift = int(input("Verschiebungsfaktor: "))
encoded = ''.join([chr(ord(char)+shift) for char in msg])
print("Verschlüsselter Code:", encoded)
Nach Aufgabenstellung bildet "y" bei Verschiebung um 10 auf "%" ab; Erhält man einen Index der größer als 126 ist, sollte man somit wieder am Anfang des Bereichs 33 anfangen nach dem richtigen Zeichen zu suchen.
Als Denkanstoß ist hier die Division mit Rest, in Python der Operator mod, zu nennen.
Antworten