Text verschlüsseln

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.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

Sirius3 hat geschrieben:@nezzcarth: vipeet verwendet Python2
Hab ich nicht so drauf geachtet, 'tschuldigung :( (auf meinem OS ist Python 3 der Standard). Dann weiß er jetzt, wie's dort läuft. ;) Klammern um die print-Argumente zu setzen wäre trotzdem 'ne Option...
vipeet
User
Beiträge: 6
Registriert: Donnerstag 26. Mai 2016, 08:56

Sirius3 hat geschrieben: @vipeet: Versuche mal für Dich folgende Fragen zu beantworten: was meinst Du machen die Zeilen mit »Basen['a']«, usw.? Was machen die for-Schleifen? Für was ist die Variable »letter«?
Also die Idee mit der "for Schleife" und "letter" war das python den string Buchstabe für Buchstabe durch geht und durch eine Base['x'] ersetzt.
Das funktioniert auch doch muss ich immer per hand angeben wie lang der string ist und durch welche Basen['x'] die Buchstaben ersetzt werden.
Ich weiß eben nicht wie ich das so gestallte das Python die Buchstaben von alleine erkennt und dann ersetzt.

@nezzcarth: Mhhh also irgendwie funktioniert dein code nicht bei mir? Bei mir gibt python nichts aus wenn ich das Programm starte.
BlackJack

@vipeet: Du musst eben nicht angeben ”wie lang” die Zeichenkette ist. Deine ``for``-Schleifen sind so komplett sinnfrei. Die gehen weder über die Zeichenkette noch verwendest Du die Schleife überhaupt, weil die Anweisung im Schleifenkörper völlig unabhängig von der Schleife ist, die also ausser der Anzahl der Wiederholungen keinen Einfluss auf den Programmablauf hat. Und die Schleifen wählst Du immer so das sie genau einmal durchlaufen wird. Womit sie wie gesagt keinen Sinn ergeben.

Die Idee die Zeichenkette mit einer ``for``-Schleife durchzugehen war schon gut, nur musst Du das dann halt auch machen. Also mit *einer* ``for``-Schleife und über die ganze Zeichenkette und nicht über einzelne Buchstaben davon. Beantworte mal an welchen Wert der Name `letter` gebunden wird.
vipeet
User
Beiträge: 6
Registriert: Donnerstag 26. Mai 2016, 08:56

BlackJack hat geschrieben: Beantworte mal an welchen Wert der Name `letter` gebunden wird.
Letter gibt die Anzahl der Buchstaben eines strings aus, soweit ich weiß.
BlackJack

@vipeet: Nein, das ist falsch. Ausgeben tut `letter` schon mal gar nichts, das ist ja ein Name der an einen Wert gebunden wird und keine Funktion oder Anweisung die aktiv etwas tut. Mit welchem Material lernst Du Denn das Du so eine falsche Vorstellung von ``for``-Schleifen hast? Probier das doch einfach mal aus. Lass Dir den Wert von `letter` in einer Schleife über eine ganze Zeichenkette mal ausgeben.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

vipeet hat geschrieben: @nezzcarth: Mhhh also irgendwie funktioniert dein code nicht bei mir? Bei mir gibt python nichts aus wenn ich das Programm starte.
Das ist kein vollständiges Skript, sondern nur eine Funktion und eine Hilfs-Konstante. Wenn du das im Interpreter eingibst (oder importierst), sollte das eigentlich funktionieren. Didaktisch könnte es allerdings sinnvoller zu sein, den Vorschlägen der anderen zu folgen und erst einmal mit "normalen" Schleifen statt der etwas kondensierten Schreibweise in Zeile 6 (Dictionary-Comprehension + Generator) und Zeile 9 (Generator) einzusteigen.

Ansonsten halt als vollständiges Skript:

(Python 2.7.11)

Code: Alles auswählen

#!/usr/bin/env python2
from __future__ import print_function
from string import ascii_letters
from random import choice
CHARS = ('A', 'C', 'G', 'U')
TABLE = {char:''.join(choice(CHARS) for _ in range(4)) for char in ascii_letters}
   
def encode(s):
    return ''.join(TABLE[char] for char in s)
    
def main():
    text = raw_input('Text: ')
    print(encode(text))

if __name__ == '__main__':
    main()
Antworten