Google+ Seguidores

viernes, 18 de enero de 2019

¿Qué es un Algoritmo? - Del mundo real a la solución por computadora.

Hola amigos de Internet. Mi nombre es Luis, y les doy la bienvenida a Mi Diario Python.
Como programadores e informáticos, siempre hemos escuchado la palabra Algoritmo. Sabemos que hay algoritmo de ordenación, algoritmos criptográficos, algoritmos de búsqueda, y más. En este blog les he enseñado a codificar esos algoritmos en Python.
Pero… ¿Qué es exactamente un algoritmo? ¿Que características debe tener un algoritmo? ¿Para que utilizarlos?. En este articulo responderemos estas y más preguntas.
Prepárate, sírvete una taza de café y toma nota. Hoy hablaremos de un tema que todo informático debe manejar a la perfección. La razón por la que la informática existe. La resolución de problemas del mundo real, por computadora.

La informática llegó para ayudar

Resultado de imagen para algoritmos
La Informática nace bajo la idea de ayudar al hombre en aquellos cálculos rutinarios, donde frecuentemente existe una repetición de tareas. Desde cálculos aritméticos (suma, resta, multiplicación, división), hasta el minado y procesamiento de grandes cantidades de datos.
Existen diversos conceptos de Informática. Pero nos quedaremos con el sigueinte:
Las Ciencias de la Computación o Informática, como se le llama en
algunos países hispanoamericanos, es la disciplina que busca
establecer una base científica para diversos temas, como el diseño de
computadoras, la programación de computadoras, el proceso de
información, la elaboración de algoritmos para resolver problemas y el
proceso algorítmico en sí.
Muy bien, sabemos que informática nos ahorra mucho tiempo resolviendo problemas en un plazo de tiempo muy corto. Pero… ¿Como lo hace? ¿Como una computadora es capaz de procesar un problema del mundo real y resolverlo? ¿Que debe hacer un programador para que una computadora logre esto?. Veamos.

Informatizar la resolución

El proceso de informatizar la resolución de problemas del mundo real, tales como resolver una ecuación matemática conlleva una serie de pasos que debemos seguir para obtener una respuesta encuadrada a los datos provistos.
La siguiente imagen nos muestra el proceso para resolver un problema del mundo real:

1- Como primer paso se deberá conocer las especificaciones del problema, es decir, analizar y determinar en forma clara y concreta el objetivo que se desea. Analizar los datos que se disponen y cuales son los resultados que se desean.
2- Una vez que se conoce el problema en detalle, se puede intentar realizar un modelo del mismo, es decir, abstraer el problema tratando de encontrar los
aspectos principales que se pueden resolver, los datos que se han de procesar y el contexto del problema, simplificando su expresión.
3- Disponiendo de un panorama más claro del problema, sus datos y resultados, se puede escribir una serie de acciones que seguidas paso a paso resuelvan el problema. Esto es el algoritmo.
4- se traduce el algoritmo, mediante un lenguaje de programación, para convertirlo en un programa que podrá ser interpretado por la computadora para su ejecución solución en forma rápida y eficaz.

Del mundo real a la solución por computadora

Existen cinco etapas a tener en cuenta para resolver un problema que luego será ejecutado por una computadora en forma rápida y eficaz. Esas etapas son:
  1. Análisis del problema, se formula y analiza el problema en su contexto del mundo real.
    COMPRENDER EL PROBLEMA.
  2. Diseño de una solución, se elige una metodología para hallar la solución del problema. TRAZAR UN PLAN PARA RESOLVERLO.
  3. Escritura de un algoritmo, se expresa la metodología del punto anterior de forma tal que pueda ser interpretado por el procesador que lo va a ejecutar. ESCRIBIR EL ALGORITMO.
  4. Codificación del algoritmo. Un algoritmo es una especificación simbólica que debe traducirse a un programa a partir del conocimiento de un lenguaje de programación para poder ser ejecutado por la computadora. ESCRIBIR EL PROGRAMA O CODIFICAR EL ALGORITMO.
  5. Ejecución y validación del algoritmo-programa. La etapa siguiente a escribir el programa, es la verificación de funcionamiento del mismo, es decir, ver si el programa conduce al resultado deseado con los datos dados del mundo real. PROBAR EL PROGRAMA.
En la primera etapa debemos analizar el problema en su contexto del mundo real. En la segunda etapa debemos elegir una metodología para hallar la solución del problema, como por ejemplo, una formula para resolver una ecuación. En la tercera etapa debemos expresar la metodología de la etapa dos, de manera que pueda ser interpretada por el procesador que lo va a ejecutar. En la cuarta etapa procedemos a codificar el algoritmo, es decir, traducirlo a un lenguaje de programación que la computadora pueda entender y ejecutar. Por ultimo, la prueba del programa, verificar que el programa nos devuelva los resultados esperados.
Para encarar la resolución de un problema por computadora hay que considerar como punto de partida que el procesamiento de la información lleva en sí el hecho de tomar datos, elaborarlos y emitir resultados de acuerdo a dichos datos y a la lógica del proceso que se está ejecutando en ese momento. Por lo tanto, se puede pensar en un modelo computacional compuesto de tres
partes: ENTRADA, PROCESO y SALIDA.
Por ejemplo: Supongamos que queremos realizar un algoritmo para calcular el cuadrado de un binomio de dos números, a y b.
Entradaa, b
Proceso(a + b)^2 = a^2+2ab+b^2
Salida(a + b)^2
Creo que con este ejemplo, se logra entender los procesos computacionales por los que pasa la información, para luego devolvernos un resultado.
Muy bien, sabemos que la primera etapa para resolver un problema, es analizar el problema a profundidad. Luego buscar una metodología para resolver el problema. Como la formula que he utilizado para el cuadrado de binomio.
La tercera etapa es el desarrollo del algoritmo. Así que continuemos:

¿Qué es un algoritmo?

Nos quedaremos con el siguiente concepto de algoritmo:
Un algoritmo es una forma de describir la solución de un problema, explicando paso a paso
como se debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en un
tiempo finito.
Debemos saber que escribir algoritmos, es un arte. Por lo que existe una gran variedad de algoritmo que resuelven el mismo problema. Cada persona lo escribe a su estilo. Cada algoritmo tiene su sello propio.
Las características de un algoritmo son las siguiente:
  1. Un algoritmo debe ser preciso, es decir, debe indicar claramente, sin ambigüedades, cada uno de los pasos a seguir para conseguir el objetivo propuesto.
  2. Un algoritmo debe estar exacto, es decir, que si se sigue el algoritmo varias veces con el
    mismo juego de datos, los resultados obtenidos deben ser los mismos.
  3. Un algoritmo debe ser finito, de tiempo finito, su ejecución debe concluir en algún
    momento.
Un algoritmo debe ser preciso. Es la principal característica. Debe señalar cada paso que deba realizar para resolver el problema.
Por ejemplo, una receta de cocina, es un ejemplo de los algoritmos que podemos encontrar en nuestra vida cotidiana. En en la receta se especifica todo lo que necesitas para cocinar, y te indica cada uno de los pasos, desde cortar los vegetales, hasta los minutos que debe pasar en el horno. Bueno, no soy un chef experto, pero creo que se entendió el punto al que quiero llegar.

Nuestro primer algoritmo

Ahora sí, es momento de escribir nuestro algoritmo.
Para este articulo utilizaremos un ejemplo muy sencillo. Escribiremos un algoritmo para hacer lo siguiente:
Calcular el promedio de un conjunto de números positivos, suponiendo que los números ingresan de a uno por teclado. Un valor cero como entrada indicará que finalizó la serie de números positivos.
Iremos haciendo esto por etapas. Comencemos…

Etapa 1. Análisis del problema:

Muy bien. Queremos calcular el promedio (o media aritmética, como lo conozcas) de un conjunto de números positivos, que ingresan de uno a uno por teclado. Y que al ingresarse un valor 0, se termine la serie de números positivos. Y que al mismo tiempo se devuelva un resultado.
¿Que datos se necesitan para calcular el promedio? Los únicos datos que necesitaremos, serán el conjunto de números positivos que se ingresaran uno a uno.

Etapa 2. Diseñando una solución:

Calcular el promedio de un conjunto de números, es muy fácil.
Hay una formula que nos dice que el promedio de un conjunto de numeros es igual a la suma de n valores, divido entre n(cantidad de elementos).
Veamos un ejemplo para entenderlo con mayor claridad.
Supongamos que tenemos las siguiente notas de un alumno: 6.7, 5.9, 6.4, 6.1. Para calcular el promedio de estas notas, debemos hacer lo siguiente:
Sumar todos los valores: 6.7 + 5.9 + 6.4 + 6.1 = 25.1. Ahora para calcular el promedio, dividimos el resultado de la suma (25.1) entre la cantidad de valores, que en este caso son 4: 25.1 / 4 = 6.275. Y ese seria nuestro resultado.
Muy bien, hemos encontrado la forma de resolver el problema. Es tiempo de escribir nuestro algoritmo.

Etapa 3. Escribir el algoritmo:

Ahora te estarás preguntando ¿Como lo escribo?. Hay diversas maneras de escribir y representar algoritmos. Una de ellas es haciendo a través de “Diagramas de Flujo”.
Diagrama de Flujo: es un diagrama que utiliza figuras geométricas unidas por flechas para indicar la secuencia
en que deben ejecutarse las acciones. Los símbolos utilizados han sido normalizados por el Instituto Norteamericano de Normalización (ANSI).
Si utilizamos el diagrama de flujo para representar nuestro algoritmo, quedaria de la siguiente manera:
Y de esa manera quedaría nuestro algoritmo. Que te parece si le damos un repaso:
Como siempre, comenzamos por el Inicio. Luego declaramos una variables llamada Cont con valor 0. La variable Cont aumentara +1 cada vez que se ingrese un valor. De esta manera, Contllevara la cuenta de la cantidad de valores que se ingresen (necesario para calcular el promedio).
Luego tenemos la variable Suma la cual iniciara con valor 0. En la variable suma (sí, adivinasta), iremos sumando todos los elementos que se ingresen.
Luego de declarar las variables, empieza un bucle. Luego se solicita un numero el cual se guardara en la variable Num. Se le suma 1 a la variable Cont. Luego se le suma el numero ingresado Num al valor de la variable Suma. Ahora una condición. Sí Numes diferente de 0, entonces el bucle se vuelve a repetir. De lo contrario, si Num es igual a 0, entonces el bucle termina. Si el bucle termina, entonce procedemos a calcular el promedio de los valores ingresado. Declaramos una variables Promedio la cual tiene como valor, la división de Suma entre Cont. Mostramos el resultado, y finalizamos.
El diagrama de flujo es muy intuitivo. Muy fácil de comprender.
El Diagrama de Flujo no es la única manera de representar algoritmos. También tenemos el pseudocódigo.
Un pseudocódigo es un código no convencional o lenguaje no establecido universalmente.
Concretamente un pseudocódigo es un lenguaje formado por palabras comunes del idioma que elija el que lo use, en nuestro caso el español. Por lo cual el uso de tal tipo de lenguaje hacem que la escritura de los algoritmos sea relativamente fácil.
Nuestro algoritmo en pseudocódigo quedaría así:

Etapa 4. Codificación del algoritmo:

Es momento de nuestra parte favorita. Codificar el algoritmo. Traducirlo a un lenguaje de programación.
Muy bien, adivinaste, lo haremos en Python. La verdad, no tengo mucho explicar con respecto a esta parte. Teniendo el diagrama de flujo o pseudocódigo de un algoritmo, es muy fácil codificarlo. Son cosas muy sencilla. Variables y bucles. Veamos como quedaría nuestro algoritmo codificado en Python.
# Calcular Promedio

Cont = 0
Suma = 0

while True:
 Num = float(input("Ingresar numero: "))
 if Num == 0:
  break
 Cont = Cont + 1
 Suma = Suma + Num

Promedio = Suma /  Cont
print("Resultado: %s" % Promedio)
Ingresar numero: 6.7
Ingresar numero: 5.9
Ingresar numero: 6.4
Ingresar numero: 6.1
Ingresar numero: 0
Resultado: 6.275
Perfecto, quedo excelente.
Vamos, te invito a que realices tus propios algoritmos. Que resuelvas tus propios problemas, dándoles tu propia solución.
¿Alguna duda? ¿Alguna sugerencia? Déjanos tu comentario, y con gusto te responderemos.
Sin más nada que decir, mi nombre es Luis, y fue placer compartir mis conocimientos con todos ustedes :D.
Seguir Leyendo

miércoles, 16 de enero de 2019

¿Qué son las Cookies? - Cookies con Flask

Hola amigos de Internet. Mi nombre es Luis, y les doy la bienvenida a Mi Diario Python.
En el articulo de hoy veremos un tema imprescindible para el desarrollo web. Las Cokies. Responderemos la pregunta ¿Qué son Cookies?. Y veremos como utilizarlas en nuestras aplicaciones web con Flask.

¿Qué es una “galleta”?

Las cookies (en español, “galletas”) son un fragmento de información almacenado por un navegador web. Más específicamente, en el disco duro de la persona que visita la pagina. Esta información almacenada, puede ser recuperada nuevamente por el servidor web en posteriores visitas a la misma página.
Las principales funciones de las cookies son:
Recordar acceso, conocer si un usuario ya ha visita la pagina anteriormente y actuar en consecuencia. Como por ejemplo, ocultar cierto contenido.
Conocer información sobre los hábitos de navegación, e intentos de spyware (programas espía), por parte de agencias de publicidad y otros. Esto puede causar problemas de privacidad y es una de las razones por la que las cookiestienen sus detractores.
Veamos un como podemos almacenar cookies con Flask. Es muy sencillo. Solo debemos utilizar el método set_cookie. Veamos un ejemplo:
from flask import Flask, make_response

# Creamos la app Flask
app = Flask(__name__)

@app.route('/')
def index():
 # Creamos la respuesta
    resp = make_response("")
    # Almacenamos la cookie
    resp.set_cookie('username', 'username_1')
    # retornamos la respuesta
    return resp

if __name__ == '__main__':
 # iniciamos la aplicación
 app.run(debug=True)
Antes de correr el script, hablemos del método make_response(). Te preguntaras, por que estoy usando ese método para crear la respuesta. La cosa es que las cookies se establecen en los objetos de respuesta. Como normalmente solo devuelve cadenas desde las funciones de vista, Flask las convertirá en objetos de respuesta. Para poder hacerlo explícitamente, utilizamos el método make_response(). En mi caso, he enviado un cuerpo vacio. Pero puedes enviar lo que quieres. incluyendo una plantilla (make_response(render_template(…))).
Ahora veamos el resultado. Nos dirigimos a http://localhosts:5000. Para poder ver la cookie almacenada. Tendremos que ir a **inspeccionador de elementos ** y dirigirnos a la pestaña Application. Y entramos en cookies:
Muy bien. Como podemos ver, la cookie se almaceno exitosamente. Ahora que sabemos almacenar cookies, es hora de aprender a leer esa información.
from flask import Flask, request

# Creamos la app Flask
app = Flask(__name__)

@app.route('/')
def index():
 # Obtenemos la cookie
    user = request.cookies.get('username')
    # retornamos la respuesta
    return "<h1>Bienvenido " + user + "</h1>"

if __name__ == '__main__':
 # iniciamos la aplicación
 app.run(debug=True)
Como pueden observar, para leer las cookies necesitas importar a request, luego utilizamos cookies.get dándole como argumento el nombre de la cookie. El valor de la cookie la he guardado en una variable user. Veamos el resultado:
Excelente, como podemos ver la información a permanecido.
Ahora realizaremos un pequeño ejemplo. Pero antes, te sugiero borrar las cookies que hemos creado. Puedes hacer dando click sobre "Clear All".

Ejemplo del mundo real

Ahora que les parece si hacemos un ejemplo. Haremos una aplicación capaz de saber si un usuario ya ha visitado la pagina y mostrar dos mensajes diferentes: uno si el usuario es nuevo y otro si el usuario ya ha visitado la pagina anteriormente. Veamos como hacerlo:
from flask import Flask, request, make_response
from random import randint

# Creamos la app Flask
app = Flask(__name__)

@app.route('/')
def index():
 # Leemos la cookie "usuario"
 name_user = request.cookies.get('usuario')

 # Comprobamos si las cookies existen. De no ser así:
 if user_visit == None and name_user == None:
  # Creamos la respuesta
  res = make_response("<h1>Bienvenido a Mi Diario Python</h1>")
  # Guardamos la cookie "usuario"
  res.set_cookie('usuario', "usuario" + str(randint(1000, 10000)))
  # Retornamos la respuesta
  return res

 # Si las cookies sí existen. Se muestra un mensaje con el nombre del usuario
 return "<h1>Bienvenido de vuelta " + name_user + "</h1>"


if __name__ == '__main__':
 # iniciamos la aplicación
 app.run(debug=True)
El programa es muy simple. Lo primero que hacemos es solicitar la cookie “usuario” que nos dirá si el usuario ya ha visitado la pagina. Luego comprobamos de que esta cookie existe. Si la cookie tienen valor “None”, significa que el usuario no ha visitado la pagina anteriormente y que la cookie que solicitamos no existe. Por lo que si no existe, creamos la respuesta con make_response y definimos la nueva cookie en donde guardaremos el nombre del nuevo usuario. Luego retornamos “Bienvenido a Mi Diario Python”.
De lo contrario, si la cookie sí existe, retornamos Bienvenido de vuelta “nombre del usuario”.
Iniciamos la aplicación y veamos el resultado:
Ese seria el resultado al entrar por primera vez. Como podemos ver la cookie se ha guardado para su uso posterior.
Refresquemos la pagina y veamos que sucede:
Perfecto, como pueden ver, la pagina nos esta dando la bienvenida de vuelta con nuestro nombre de usuario.

Por ultimo

Estos son todos los parametros aceptados por el método set_cookies. Te recomiendo hecharle un vistazo. De esta manera podras configurar tus cookies a tu gusto.
set_cookie`( _key_ , _value = ''_ , _max_age = None_ , _expires = None_ , _path = '/'_ , _domain = None_ , _secure = False_ , _httponly = False_ , _samesite = None_ )
Perfecto. Espero que el articulo te fuera de mucha ayuda.
¿Alguna duda? ¿Alguna sugerencia? Pudes dejar tu comentario y con gusto te responderemos.
Sin más nada que decir. Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
Seguir Leyendo
Powered by Blogger .