lunes, 26 de febrero de 2018

Programación del código MURCIELAGO en Python

Los niños Scouts aprenden un código sencillo denominado código MURCIELAGO que se utiliza para encriptar y desencriptar mensajes. Puedes ver un vídeo que lo explica.

Clave murciélago

Dada una una palabra o frase a encriptar con la clave murciélago lo que se hace es sustituir cada letra que esté en la palabra murciélago con un número según la siguiente relación.

M U R C I E L A G O
0 1 2 3 4 5 6 7 8 9

Las letras que no se encuentren en la clave de encriptación no se convierten a dígitos numéricos.


Ejemplo


La palabra asombrado se convierte en 7s90b27d9.

ASOMBRADO
7S90B27D9

Código Python

Disponemos de dos opciones, una para encriptar y otra para desencriptar.
Veamos el código en funcionamiento.



#Código murciélago. Clave criptográfica usada por los Scouts
# MURCIELAGO
# 0123456789
x=int(input('1 para encriptar'+'\n'+'2 para desencriptar'+'\n'))
texto=input('Escriba su palabra o frase: ').lower()
codigo=['m','u','r','c','i','e','l','a','g','o'] #es una lista
print("murcielago")
print("0123456789")
salida=''
if x==1:
 for i in range(len(texto)):
  if texto[i] in codigo:
   salida+=str(codigo.index(texto[i]))
  else:
   salida+=texto[i]
if x==2:
 for i in range(len(texto)):
  if texto[i].isdigit():
   salida+=codigo[int(texto[i])]
  else:
   salida+=texto[i]
print(salida)

Lo interesante de este código es que aprendemos algunas técnicas para el tratamiento de cadenas alfanuméricas. También aprendemos a movernos por los elementos de una lista en Python.

str1.index(str2)


Dada una cadena str1 y dada otra cadena str2, queremos saber en que posición de la cadena 1 se encuentra el texto de la cadena 2.


#veamos el uso de index con cadenas alfanuméricas  
texto="Hola, esto es una prueba en Python"  
cadena="es"  
print(texto.index(cadena))  

Respuesta = 6.

Recordemos que se empieza a contar en cero y que si la expresión 'es' está varias veces únicamente se considera la primera vez que aparece.

Coincidencias

¿Cómo detectar en Python las coincidencias entre dos listas?


#vamos a detectar coincidencias de caracteres entre dos listas  
A=['a','b','c','d','e','f','g','h']  
B=['x','y','z','b','d','f','g','p','q','r']  
coinciden = [ x for x in A if x in B ]  
print(list(A))  
print(list(B))  
print(coinciden)  
print('Existen ',len(coinciden),' coincidendias')  




Puede consultar el siguiente post para ver otras formas de programar el algoritmo que nos permite encriptar y desencriptar con el código murciélago.

sábado, 24 de febrero de 2018

Potencias en Python

Para elevar xy en Python tenemos dos métodos.
  • x**y
  • pow(x,y)
Veamos un ejemplo con el siguiente código.

 #Podemos elevar con x**y o bien con pow(x,y)  
 print("Elevar al cuadrado y hacer la raiz cuadrada")  
 for i in range(1, 21):  
  print(i,i**2,pow(i,.5))  


La imagen anterior contiene el código en un procesador de textos sencillo denominado nano que se usa para escribir textos txt en linux.


La imagen anterior corresponde a una Raspberry Pi 2 corriendo el código en Python 3.

miércoles, 21 de febrero de 2018

El número e como una serie infinita en Python

El número e es 2.71828182845904523536 ... ... ...

Vamos a calcular e en Python 3 mediante la serie infinita siguiente.

e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + ···

Importamos la librería math

import math

para luego poder obtener el número e mediante la expresión siguiente.

print(math.e)

y para poder calcular el factorial de un número. Por ejemplo, el factorial de 5 que es 120.

math.factorial(5)


 #Cálculo del número e mediante la serie infinita 1+(1/1!)+(1/2!)+(1/3!)+...  
 #En lugar de una serie infinita haremos una serie de 17 términos  
 import math  
 print("número e=",math.e)  
 print("calculando el número e con la serie")  
 suma=0  
 for i in range(0,18):  
  valor=1/math.factorial(i) #recordemos que 0!=1  
  suma+=valor  
  print(i,valor,suma)  


Vemos que con 17 términos de la serie llegamos al número e, pero nos pasamos un poco, en el último decimal. La precisión no ha sido la que nos hubiera gustado.


El gráfico anterior se ha obtenido con Excel y se puede apreciar la rapidez con la que se converge.