77 votes

Fonction court rot13

Je recherche une fonction rot13 courte et cool en Python ;-) J'ai écrit cette fonction:

 def rot13(s):
    chars = "abcdefghijklmnopqrstuvwxyz"
    trans = chars[13:]+chars[:13]
    rot_char = lambda c: trans[chars.find(c)] if chars.find(c)>-1 else c
    return ''.join( rot_char(c) for c in s ) 
 

Quelqu'un peut-il l'améliorer? Prend en charge, par exemple, les caractères majuscules.

C’est moins une question, mais plutôt de s’amuser à trouver une courte fonction Python ;-)

165voto

Nazmul Hasan Points 1102

c'est très simple

 import codecs
codecs.encode('foobar', 'rot_13')
>> 'sbbone'
 

84voto

Paul Rubel Points 13132

Voici une solution maketrans / translate

 import string #fixed typo was using
rot13 = string.maketrans( 
    "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", 
    "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
string.translate("Hello World!", rot13)
# 'Uryyb Jbeyq!'
 

66voto

Amber Points 159296
 >>> 'foobar'.encode('rot13')
'sbbone'
 

(J'ai entendu des rumeurs selon lesquelles cela ne fonctionnerait pas dans Python 3.x cependant.)

16voto

Artur Gaspar Points 1664

/usr/lib/python/this.py

 d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print "".join([d.get(c, c) for c in s])
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X