JPablos

Huevo de Pascua. Python

Apr 10th, 2021
871
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python3
  2.  
  3. """
  4. Desvelando el huevo de pascua en Python
  5. =========================================
  6.  
  7. Sí importamos el módulo 'this.py', ruta (en Python 3.8.5) :
  8.  
  9.        /usr/lib/python3.8/this.py
  10.  
  11.        >>> import this        # IDLE v 3.8.5 | Released on 2020-06-30
  12.  
  13. Nos imprime < The Zen of Python, by Tim Peters ... >
  14.  
  15. Ahora bien, si abrimos el módulo 'this.py' en IDLE usando el menú:
  16.  
  17.    File --> Open 'ruta'
  18.  
  19. Obsevamos que la variable < 's' > contiene texto con una estructura
  20. similar a la estructura del texto que imprime el módulo 'this.py',
  21. pero parecen líneas de texto ininteligibles ...
  22.  
  23. Además, encontramos este código:
  24.  
  25.            d = {}
  26.            for c in (65, 97):
  27.                for i in range(26):
  28.                    d[chr(i+c)] = chr((i+13) % 26 + c)
  29.  
  30.            print("".join([d.get(c, c) for c in s]))
  31.  
  32. que nos "traduce" la variable < 's' > a líneas de texto coherente en
  33. el idioma inglés.
  34.  
  35. Para entender cómo opera este código vamos por partes:
  36.  
  37.        d = {}      # Se crea un diccionario vacío que contendrá
  38.                    # parejas 'clave --> valor'
  39.  
  40.        un bucle 'for' con un rango de caracteres (65 a 97 no incluído)
  41.  
  42.        donde < 'c' > representa un carácter
  43.  
  44.        el siguiente bucle 'for' crea una tabla de equivalencia para
  45.  
  46.        < 'c' >, de manera que el carácter 'A' equivalga a 'N' y así
  47.  
  48.        sucesivamente en el rango solicitado.
  49.  
  50. Podemos ver la tabla de equivalencias de dos formas en IDLE, o en su
  51. IDE favorita:
  52.  
  53.  
  54.    1. Dado que 'd' es un diccionario
  55.  
  56.            >>> L = [d]         # Generamos una lista 'L'
  57.            >>> L.sort()        # Ordenamos la lista 'L'
  58.             >>> L       # Se imprime la lista 'L'
  59.  
  60.  
  61.    2. Utilizando un bucle 'for' para ver las parejas 'clave --> valor'
  62.       del diccionario 'd'
  63.  
  64.    >>> for i in d:
  65.         print("clave -->  Valor : {0:^3} --> {1:^3}".format(i, d[i]))
  66.      
  67. De la tabla de equivalencias podemos inferir que la variable < 's' > ha
  68. sido el resultado de una transformación similar.
  69.  
  70. Sí quiere experimentar creando tablas de equivalencia con textos que
  71. incluyan caracteres como 'Ñ' o 'ñ' recuerde ampliar el rango, porque:
  72.  
  73.    Recuerde:
  74.                chr(209) --> 'Ñ'
  75.                chr(241) --> 'ñ'
  76.  
  77.    
  78. ======================================================================
  79.  
  80. Tomando nota de la seguda línea del 'Zen of Python'
  81.  
  82.    < Explicit is better than implicit. >
  83.  
  84. Ahora vamos a transcribir el módulo 'this.py' para el análisis
  85.  
  86. ======================================================================
  87.  
  88. """
  89.  
  90. s = """Gur Mra bs Clguba, ol Gvz Crgref
  91.  
  92. Ornhgvshy vf orggre guna htyl.
  93. Rkcyvpvg vf orggre guna vzcyvpvg.
  94. Fvzcyr vf orggre guna pbzcyrk.
  95. Pbzcyrk vf orggre guna pbzcyvpngrq.
  96. Syng vf orggre guna arfgrq.
  97. Fcnefr vf orggre guna qrafr.
  98. Ernqnovyvgl pbhagf.
  99. Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
  100. Nygubhtu cenpgvpnyvgl orngf chevgl.
  101. Reebef fubhyq arire cnff fvyragyl.
  102. Hayrff rkcyvpvgyl fvyraprq.
  103. Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
  104. Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
  105. Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
  106. Abj vf orggre guna arire.
  107. Nygubhtu arire vf bsgra orggre guna *evtug* abj.
  108. Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
  109. Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
  110. Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
  111.  
  112. d = {}
  113. for c in (65, 97):
  114.     for i in range(26):
  115.         d[chr(i+c)] = chr((i+13) % 26 + c)
  116.  
  117. print("".join([d.get(c, c) for c in s]), '\n')
  118.  
  119.  
  120.  
  121. print('La interesante variable < s > : \n' + chr(61)*32, '\n')
  122. print(s, '\n')
  123.  
  124. print('La Tabla de equivalencias (método lista "L"), < d > : \n' +
  125.       chr(61)*52, '\n')
  126.  
  127. L = [d]
  128. L.sort()
  129. print(L, '\n')
  130.  
  131. print('La Tabla de equivalencias (método clave : valor), < d > : \n' +
  132.       chr(61)*56, '\n')
  133.  
  134. for i in d:
  135.     print("clave -->  Valor : {0:^3} --> {1:^3}".format(i, d[i]))
  136.  
  137.  
  138.  
  139.  
  140.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×