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...Sirius3 hat geschrieben:@nezzcarth: vipeet verwendet Python2
Text verschlüsseln
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.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«?
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.
@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.
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: 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.
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.vipeet hat geschrieben: @nezzcarth: Mhhh also irgendwie funktioniert dein code nicht bei mir? Bei mir gibt python nichts aus wenn ich das Programm starte.
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()