script python

script - ping python



¿Qué está haciendo el código fuente del módulo "this"? (5)

Creo que esa es la mejor manera:

import this print(this.s.decode(''rot13''))

Y eso es todo...

Si abre un intérprete de Python y escribe "importar esto", como sabe, imprime:

El Zen de Python, por Tim Peters

Hermoso es mejor que feo.
Explícito es mejor que implícito.
Simple es mejor que complejo.
Complejo es mejor que complicado.
Flat es mejor que anidado.
Sparse es mejor que denso.
La legibilidad cuenta
Los casos especiales no son lo suficientemente especiales como para romper las reglas.
Aunque la practicidad supera a la pureza.
Los errores nunca deberían pasar silenciosamente.
A menos que esté explícitamente silenciado.
En vista de la ambigüedad, rechace la tentación de adivinar.
Debería haber una, y preferiblemente solo una, forma obvia de hacerlo.
Aunque de esa manera puede no ser obvio al principio a menos que seas holandés.
Ahora es mejor que nunca.
Aunque nunca es a menudo mejor que ahora.
Si la implementación es difícil de explicar, es una mala idea.
Si la implementación es fácil de explicar, puede ser una buena idea.
Los espacios de nombres son una gran idea: ¡hagamos más de eso!

En la fuente de Python (Lib / this.py) este texto es generado por una curiosa pieza de código:

s = """Gur Mra bs Clguba, ol Gvz Crgref Ornhgvshy vf orggre guna htyl. Rkcyvpvg vf orggre guna vzcyvpvg. Fvzcyr vf orggre guna pbzcyrk. Pbzcyrk vf orggre guna pbzcyvpngrq. Syng vf orggre guna arfgrq. Fcnefr vf orggre guna qrafr. Ernqnovyvgl pbhagf. Fcrpvny pnfrf nera''g fcrpvny rabhtu gb oernx gur ehyrf. Nygubhtu cenpgvpnyvgl orngf chevgl. Reebef fubhyq arire cnff fvyragyl. Hayrff rkcyvpvgyl fvyraprq. Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff. Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh''er Qhgpu. Abj vf orggre guna arire. Nygubhtu arire vf bsgra orggre guna *evtug* abj. Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg''f n onq vqrn. Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn. Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg''f qb zber bs gubfr!""" 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])



Es un cifrado de sustitución, rot13 .


Esto se llama codificación rot13 :

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

Crea la tabla de traducción, para mayúsculas (esto es lo que 65 es para) y minúsculas (esto es lo que 97 es para) caracteres.

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

Imprime la cadena traducida.


Si quieres hacer la sustitución ROT13 a mano, o en tu cabeza, puedes verificar que porque 13 * 2 = 26 (el número de letras del alfabeto inglés), es esencialmente un intercambio:

a <-> n b <-> o c <-> p ... m <-> z A <-> N B <-> O C <-> P ... M <-> Z

Vs lbh cenpgvfr ybat rabhtu, lbh''yy riraghnyyl znfgre gur Mra bs EBG-13 nytbevguz naq ernq guvf Xyvatba ybbxvat grkgf jvgubhg pbzchgre uryc.