Aplanando listas

#!/usr/bin/python
#
# SCRIPT QUE APLANA LISTAS, ES DECIR, CONVIERTE UNA LISTA DE LISTAS EN UNA SOLA LISTA

matrizresultado = [[1,2,3],[4,5,6],[7,8,9]]     # ESTO ES PARA UNA MATRIZ FIJA DE 3 X 3

print matrizresultado

# APLANANDO LISTAS

def flattener(lst):       # FUNCION QUE APLANA LA LISTA. CONVIERTE LA LISTA DE LISTAS EN UNA SOLA LISTA
    return [item for sublist in lst for item in sublist]

print flattener(matrizresultado)  # IMPRIMIMOS LA LISTA DE LISTAS EN UNA SOLA LISTA. 

# Y EL BUCLE FOR RECORRE LA LISTA E IMPRIME CADA ELEMENTO DE LA MISMA SUELTO. ELIMINAMOS LA LISTA. 

for elemento in flattener(matrizresultado):      # IMPRIMIMOS EL RESULTADO EN mod 26
    print elemento,  #%26,                        

print 


Script para trabajar con listas. Se puede emplear con matrices o combinar con otros módulos o programas.

Interpolación de Lagrange

#!/usr/bin/python
#
# Interpolacion de Lagrange como calculadora de sombras.
# PRIMERO CALCULAREMOS LAS SOMBRAS 
# ELEGIMOS DOS VALORES ALEATORIOS Y EL VALOR DE LA CLAVE A OCULTAR
valor1=input("Introduce Valor 1: ")      
valor2=input("Introduce Valor 2: ")      
clave=input ("Introduce Clave: ")        
print 
# ELEGIMOS 5 VALORES AL AZAR DE x
x1=input("Introduce valor x1: ")     
x2=input("Introduce valor x2: ")     
x3=input("Introduce valor x3: ")     
x4=input("Introduce valor x4: ")     
x5=input("Introduce valor x5: ")     
print 
# CONFECCIONAMOS NUESTRAS SOMBRAS
s1=((valor1*(x1)**2)+(valor2*x1)+clave) 
s2=((valor1*(x2)**2)+(valor2*x2)+clave)
s3=((valor1*(x3)**2)+(valor2*x3)+clave) 
s4=((valor1*(x4)**2)+(valor2*x4)+clave) 
s5=((valor1*(x5)**2)+(valor2*x5)+clave) 
print 
print "Primera sombra: ", (x1,s1)
print "Segunda sombra: ", (x2,s2)
print "Tercera sombra: ", (x3,s3)
print "Cuarta sombra: ", (x4,s4)
print "Quinta sombra: ", (x5,s5) 
print  
# OPERACIONES PARA DESCIFRAR LA CLAVE PRIMIGENIA 
print
print "A continuacion introduciremos los tres pares de sombras."
print 
a=input("Introduce valor x1: ")       
b=input("Introduce valor x2: ")       
c=input("Introduce valor x3: ")       
d=input("Introduce segundo valor FLOTANTE sombra 1: ")   
e=input("Introduce segundo valor FLOTANTE sombra 2: ")   
f=input("Introduce segundo valor FLOTANTE sombra 3: ")   
print 
#==========FASE DE OPERACIONES============
g=(-b)+(-c) 
h=(-b)*(-c) 
i=a-b
j=a-c
k=i*j
l=d/k 
m=((d)*(g))/k
n=((d)*(h))/k
print 
#=======================
g1=(-a)+(-c)
h1=(-a)*(-c)
i1=b-a
j1=b-c
k1=i1*j1 
l1=e/k1 
m1=((e)*(g1))/k1
n1=((e)*(h1))/k1
print 
#=====================
g2=(-a)+(-b)
h2=(-a)*(-b)
i2=c-a
j2=c-b
k2=i2*j2 
l2=f/k2
m2=((f)*(g2))/k2
n2=((f)*(h2))/k2
print 
#======================
result1=l+l1+l2
print result1         
result2=m+m1+m2
print result2         
result3=n+n1+n2
print result3         

print
print "El numero secreto es: ", result3
print




Interpolación de Lagrange como entorno para protocolo de reparto de secretos. Se reparte un secreto en cinco partes y con tres de ellas se puede recuperar.

Buscador de líneas en archivos .txt

#!/usr/bin/python
#
# BUSCADOR. EFECTUA LAS MISMAS OPERACIONES QUE grep EN bash-shell.  
# TE PIDE HASTA CUATRO PATRONES Y TE LOCALIZA LA LINEA QUE CONTENGA LOS QUE LE DES -DE 1 A LOS 4-.
# LE PUEDES PEDIR UNO O DOS Y NO TE DA NINGUN ERROR. TE BUSCA INCLUSO SUBCADENAS (amador = ama)  
print
print "Buscador. Puedes introducir hasta 4 parametros de busqueda y subcadenas."
print

archivo_de_texto = open(raw_input("Introduce el fichero con extension: "),"r")    # AQUI PODEMOS ELEGIR EL ARCHIVO A ABRIR

# PATRONES DE BUSQUEDA. SI NO INTRODUCIMOS NINGUN PATRON, NOS LISTARA EL ARCHIVO COMPLETO.  

a = raw_input("Patron 1: ")
b = raw_input("Patron 2: ")
c = raw_input("Patron 3: ")
d = raw_input("Patron 4: ")

for linea in archivo_de_texto:
    if a in linea:
        if b in linea:
            if c in linea:
                if d in linea: 
                    print linea



El script es un buscador de palabras en un archivo .txt. Por ejemplo, tenemos un archivo de texto y queremos saber que líneas contienen una determinada palabra o palabras. No hace falta poner la palabra completa ya que con solo poner los primeros caracteres, el buscador localiza todas las palabras iguales y nos imprime las líneas donde aparecen esos caracteres por pantalla.

Buscador de frecuencias de texto en archivos

#!/usr/bin/python
#
# ESTE SCRIPT BUSCA UNA CADENA DE TEXTO (PALABRA) EN UNA LINEA DE UN ARCHIVO (por ejemplo un .txt), Y NOS DICE CUANTAS VECES SE REPITE. 
# SOLO BUSCA PALABRAS COMPLETAS, NO SUBCADENAS DE TEXTO.  
# SI TENEMOS LA PALABRA -murcielago- Y LE DECIMOS QUE BUSQUE -murcie- NO LO ENCONTRARA. 

print "Este programa busca una cadena de texto (solo palabras completas) en un archivo y nos dice cuantas veces se repite"


palabra = raw_input("Palabra completa a buscar: ")
archivo = raw_input("Archivo donde buscar incluida extension: ")

repetidas = 0                   
f = open(archivo, "r")          
lines = f.readlines()           

for line in lines:              
    palabras = line.split(' ')   
    for p in palabras:          
        if p == palabra:        
            repetidas = repetidas + 1   # CONTADOR

 
print "La palabra \"{0}\" se repite {1} veces en el archivo {2}".format(palabra,repetidas,archivo)
 

Este tipo de script son muy útiles a la hora de hacer el análisis de frecuencias de un texto criptografiado ya que podemos resaltar y cotejar bloques de texto.

Programación Orientada a Objetos -POO-

#!/usr/bin/python
# DEFINIMOS LA CLASE COCHE.
#     ATRIBUTOS DEL OBJETO: GASOLINA.
#         METODOS: ARRANCAR Y CONDUCIR.
class Coche:             # CLASE
    """Abstraccion de los objetos coche."""
    def __init__(self,gasolina):           # ATRIBUTO
        self.gasolina = gasolina
        print "Tenemos", gasolina, "litros"

    def arrancar(self):                    # METODO
        if self.gasolina > 0:
            print "Arranca"
        else:
            print "No Arranca"

    def conducir(self):                  # METODO
        if self.gasolina > 0:
            self.gasolina -= 1
            print "Quedan", self.gasolina, "litros"
        else:
            print "No se mueve"

mi_coche = Coche(6)         # mi_coche ES EL OBJETO

# PARA EJECUTAR EL SCRIPT, TENEMOS QUE IR DESCUBRIENDO UNO A UNO LAS SIGUIENTES LINEAS DE CODIGOS.

#print mi_coche.gasolina
#mi_coche.arrancar()
#mi_coche.conducir()
#mi_coche.conducir()
#mi_coche.conducir()
#mi_coche.arrancar()
#print mi_coche.gasolina
#mi_coche.conducir()
#print mi_coche.gasolina
#mi_coche.conducir()
#mi_coche.arrancar()
#mi_coche.conducir()
#mi_coche.arrancar()
#mi_coche.conducir()
#print mi_coche.gasolina


Ejemplo de una clase POO. Definición de la clase, atributos y métodos.

M.C.D. Su utilidad para cifrados en criptografía

#!/usr/bin/python
# -*- coding: utf-8 -*-
print
print "Calculadora de numeros coprimos o primos relativos entre si"
print

x = input("Introduce el primer numero: ")   # INTRODUCIMOS LOS DOS NUMEROS A COMPROBAR
y = input("Introduce el segundo numero: ")
def mcd(a, b):
    if b == 0:
        return a
    else:
        return mcd(b, a%b)
#print mcd(x, y)
print
print "El Maximo Comun Divisor de ", x, "y ", y," es: ", mcd(x, y)
print
if mcd(x, y) == 1:
    print "Los numeros SON coprimos o primos relativos entre si"
else:
    print "Los numeros NO SON coprimos entre si"
print

def mcd(a, b):
    resto = 0
    while(b > 0):
        resto = b
        b = a % b
        a = resto
    return a
num1 = int(input("Introduce el primer numero: "))
num2 = int(input("Introduce el segundo numero: "))
print
print "El Maximo Comun Divisor de ", num1, " y " , num2, " es: ", mcd(num1, num2)
print
if mcd(num1 ,num2) == 1:
    print "Los números SON coprimos o primos relativos entre si"
else:
    print "Los números NO SON coprimos entre si"
print



Script para verificar coprimos potenciales para criptografía en matemática discreta, matemática modular y Euclides. Bases del algoritmo RSA y análogos.

Números primos

#!/usr/bin/python
# SABER SI UN NUMERO ES PRIMO.

numero_leido = raw_input("Insertar un numero: ")
numero = int(numero_leido)
contador = 0       
for i in range(1, numero+1):
    if(numero % i) == 0:
        contador = contador + 1
if contador == 2:      
    print "El numero es primo"
else:
    print "El numero no es primo"


Script simple para saber si un número es primo.