Moin,
Dabei merke ich gerade, dass ich mal wieder mit Python arbeiten sollte - meine Kenntnisse scheinen arg eingerostet zu sein :-(
Hmmja, ich hab mich in der Eile auch vertan. Die doppelten ranges sind natürlich nicht notwendig:
"".join([(ord(b) in range(65,91) and chr((ord(b)-78)%26+65) or ord(b) in range(97,123) and chr((ord(b)-84)%26+97) or b) for b in a])
reicht als Ausdruck. Ansonsten ist der Ausdruck recht einfach: "".join(...) verkettet eine Liste von Strings zu einem einzigen String, [... for b in a] ist eine handelsübliche List Comprehension, wobei man den Eingabe-String wie eine Liste behandeln darf: [b for b in a] ist die einfachste Form und macht aus dem String nur eine Liste der einzelnen Buchstaben, [ord(b) for b in a] macht eine Liste der Zeichencodes, [chr(ord(b)) for b in a] macht die Zeichencodes und wandelt gleich wieder in Zeichen um. Das dann noch gemixt mit ord(b) in range(65,91) als leicht kürzere Schreibweise für ord(b) >= 0 and ord(b) < 91 und ... and ... or ... als Python-Fast-Äquivalent zum trinären Operator (?: in C) welches sich freundlicherweise auch verketten lässt (v and w or y and x or z) und dem üblichen (...-ord('A')+13)%26+ord('A')-Gehampel.
--
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke!
http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~