Tutorial de Python
Python es uno de esos lenguajes que se me han resistido en el paso del tiempo, porque soy de los que están acostumbrados a programar en Windows y en un RAD (Rapid Application Development, es un entorno de desarrollo rápido de aplicaciones): Visual Basic, Visual Studio, Delphi, Lazarus, y la consola se resiste… Pero llega un momento en el que te has de poner, bien por un proyecto, bien por una curiosidad, bien porque es tu destino… En mi caso, han sido los proyectos, especialmente, cuando tenía mi empresa y debía desarrollar soluciones adecuadas para cada cliente, y siempre eran nuevas. Y el hacer este tutorial es para ahorraros el no saber cómo empezar con este fantástico lenguaje.
En 2020 ha influido muchísimo los 3 cursos de NET Core que he impartido, todos para consola, y aunque a los alumnos les «vendí» que C# podía acercarse a Python, pero no, estaba completamente equivocado: «como un huevo a una castaña», como diríamos en mi tierra. Cada uno tiene su sector.
Se me ocurrió preguntar en Twitter:

Y 6 horas antes que terminara la encuesta, sentía que debía escribir este tutorial. En cierta forma, os lo debo a todos los que me preguntáis cómo aprender a programar, además que, en estos tiempos convulsos, es aportar mi granito de arena a tanto de lo que me dáis.
Existen estupendos libros para aprender Python, millones de tutoriales en YouTube, donde auténticos maestros os explican como crear tu propio código. A mí me cuesta la misma vida grabar un vídeo, porque tengo mil ruidos alrededor y me gusta preparar las diapositivas a conciencia, espero que nunca me soportéis en una de mis clases, no hay sufrimiento mayor… Si opto por este medio es porque se me da bien escribir y siempre podréis releer lo que necesitéis.
Mi idea con este artículo y los que escriba relacionados con él es acercar un lenguaje multiplataforma, que sirve para Windows, para Linux, para iOS, incluso para Android, esbozar lo básico para ir haciendo «tus pinitos» y que te animes a hacer cualquiera de los cursos que hay disponibles en Internet; por supuesto, que compres libros, son importantes no solo para ti, sino para las personas que han dedicado miles de horas a escribirlos; por supuesto si tienen cursos online, al menos ya sabrás algo y te servirá de repaso lo que puedas ya saber, y también es posible que aprendas algo más de lo que yo pueda transmitirte, al fin y al cabo, la mejor forma de hacerlo es en persona pero en los tiempos que nos ha tocado vivir, es imposible.
De todas formas, las dudas que te surjan siempre me las puedes hacer llegar, en la medida de lo posible intentaré despejártelas (recuerda siempre que ando un pelín liado, si tardo algo más, discúlpame). También ocurre que aprendo con vuestras dudas, a veces me planteáis código que no se me ha ocurrido y es increíble las cosas que hacéis.
Mis técnicas de enseñanza son peculiares, de vez en cuando aparecen mis batallitas, y en mis clases físicas no es de extrañar que un día dé algo que no consiga transmitirlo cómo hacerlo y otro día lo desmenuce al máximo, para saltar esos problemas. En este formato, haré incapié en los errores que detecto en los alumnos, en un intento que los evitéis.
Siempre he dicho que, si te quieres dedicar a la ciberseguridad, debes saber programar.
Espero que os sirva.
El entorno de desarrollo
Existen mil entornos, cada uno puede utilizar el que considere oportuno pero, si preferís emplear el mismo que yo, debéis configurarlo TAL CUAL os indico. Este punto es fundamental, me he encontrado personas que no lo hacen tal cual digo, sino como les parece, y luego no pueden ejecutar, o no les sale lo que explico.
Vamos a emplear Visual Studio Code, porque:
- Es gratuito (se descarga de Internet y no hay que pagar por usarlo).
- Es multiplataforma (sirve para Windows, Linux e iOS, evidentemente descargando para cada sistema operativo su versión).
- Tiene plug-ins (agregados sería su traducción más idónea) que te facilitan la vida, como el conocido INTELLISENSE (escribe código por ti, o mejor dicho, te ayuda a escribir código) y del que nunca le hemos dado las gracias a los programadores de los entornos de desarrollo por esas «ayudas»
- Tiene un terminal integrado donde casi todo funciona (ya diré lo que sí y lo que no).
- Sirve para multitud de lenguajes. Yo lo he utilizado en Python, C#, Javascript, PHP, puedes crear espacios de trabajo, donde optimizar el código que generes, etc.
- Seguro que tiene alguna virtud más, ahora mismo no caigo, jaja.
- Habrá personas que no les guste, porque lo ha desarrollado Microsoft. Aquí siempre digo lo mismo, esta empresa ha contribuido enormemente al despliege de la tecnología informática. Se ha equivocado en ocasiones, pero «el que esté libre de pecado que tire la primera piedra», y hay que reconocer que esta herramienta es fantástica

Para descargarlo, vamos al siguiente enlace:
https://code.visualstudio.com/

Si no tienes Windows, debes acceder al enlace de «Other platforms» y aparecerá una pantalla similar a ésta:

Supongo que a estas alturas sabes qué tipo sistema operativo tienes, de 32 o 64 bits, es una Raspberry, una Orange Pi, o un Mac… Voy a dar por hecho que lo sabes, por lo que continúo.
Instalarlo es «sota, caballo y rey», por lo que vamos a lo siguiente. Lo ejecutas y debe salir una pantalla similar a ésta:

Soy partidario de ponerlo en español, porque en inglés nos las tendremos que ver, sí o sí, con la mayoría de la documentación que existe sobre Python, así que por estar «como en casa». Creo que se puede poner también en valenciano, catalán… Que cada uno guste como desee. Mis pantallazos irán en español.
Tenemos varias formas de hacerlo:
- Menu View -> Extensions
- Pulsando las teclas CTRL + SHIFT + X
- Hay un «icono», como el que muestro a continuación, que enlaza al mismo lugar:

En el lugar que aparece, en la zona izquierda del entorno, para escribir (se denomina «cuadro de texto»), tecleamos Spanish, y aparecerá un resultado de Microsoft:

Aunque Visual Studio Code tiene extensiones para Python, recomiendo instalar el lenguaje completo, que aparece en la página oficial del lenguaje:

¿Qué versión descargar? A día de redactar este artículo, va por la 3.9 (aunque hay pantallas de la 3.8, que es la última que he impartido físicamente), así que proceded a descargar la 3.9.
No, no voy a tocar nada de la 2.x. Me centro en la última versión, he de poner unos límites porque, si no, no se termina.

Si tienes Windows de 64 bits (lo más común hoy día), selecciona la versión de executable installer.

Vamos a proceder a instalarlo.
OJO, QUE NO ES
«SOTA, CABALLO Y REY»
Cuando ejecutamos el instalador, en la siguiente pantalla hay que seleccionar una serie de opciones (por favor, fundamental hacerlo bien, muchos de los errores vienen de no hacer lo que digo).

Recomiendo seleccionar «Add Python 3.9 to PATH» antes de hacer «Customize Installation»

En la siguiente pantalla, recomiendo seleccionar las siguientes opciones:

Si tienes el caso de varios usuarios en el equipo, te recomiendo que disminuyas la longitud de la ruta, ya que por defecto aparece muy profunda; y no selecciono la última opción a menos que tengas Visual Studio 2017 o posterior (no es mi caso).
Cuando termina la instalación, recomiendo encarecidamente seleccionar «Disable path length limit». Windows tiene por defecto un límite en la ruta de caracteres para guardar archivos, establecido en 256 dígitos. Parecería que son suficientes, pero la experiencia como Forense me demuestra que los usuarios suelen escribir en directorios y archivos mucho más allá de ese límite. Por si acaso, no cuesta nada hacer clic ahí, por si alguna vez lo superas. Si ya la has activado anteriormente, no aparecerá.

Por último, queda personalizar Visual Studio Code con el soporte para Python, que se hace desde la pantalla de inicio del propio editor:

Como tengo instaladas Javascript, Python y PHP no aparecen en azul, como Java o Azure. Es tan sencillo como pulsar sobre la que se desee (Python) y que la instale.
Falta también instalar el «intellisense de Python», esas herramientas que nos ayudan a la hora de crear código fuente. Se realiza con el mismo procedimiento: ir a Extensiones, en el cuadro de texto que aparece teclear «intellisense python» y seleccionar la que aparezca :

Una vez que termina, estamos en disposición de hacer nuestro primer programa de Python:
Nos vamos al menú Archivo, y seleccionamos «Abrir Carpeta»

Es conveniente tener los archivos ordenados en carpetas, organizados por lenguaje o por cualquier criterio que consideres adecuado. También podemos instalar un control de versiones pero se sale un poco de este artículo (=> Tarea para que investigues). Si no tienes ninguna carpeta, puedes crearla directamente en el cuadro de diálogo que te aparece.
Para crear nuestro primer archivo de Python, lo hacemos directamente en la zona izquierda del editor, apareciendo una pantalla parecida a la siguiente:

Lo del control de codigo fuente aparece porque no tengo instalado nada de GIT, y justo en la zona inferior de la imagen, podemos apreciar una serie de controles, siendo el primero el que más nos interesa:

Hacemos clic en él y podremos escribir el nombre de un archivo. En mi caso, como podéis comprobar, lo he llamado «codigofuente01.py»

Una característica de todos los cursos de programación que he impartido es que los alumnos han de transcribir todo el código, a mano (o con ayuda de intellisense), porque es la única forma de aprender. El copiar/pegar no facilita el aprendizaje, el pensar lo que estás escribiendo, sí lo hace, por lo que todo el código que veréis en este blog serán capturas de pantalla.
Con un doble clic sobre el nombre recién creado, en el área correspondiente al desarrollo de código fuente de Visual Studio Code (a la derecha), aparecerá un cursor parpadeante, que es donde escribiremos todo nuestro código.
Sé que este artículo es ya bastante largo, pero quiero que veáis algo de código fuente antes de finalizarlo. Lo primero que siempre escribo es:

Para sacar cualquier mensaje por el terminal, y probar que comenzamos a programar, he tuneado la primera frase a escribir, en honor a nuestro gran escritor universal, Miguel de Cervantes.
print, en minúsculas, y el mensaje que deseo presentar por pantalla entre comillas dobles (shift + tecla 2), es suficiente para visualizar por la terminal de Visual Studio Code el mensaje que queramos.
Grabamos el archivo, con las distintas opciones que tenemos a nuestro alcance:
- Pulsar CTRL + S
- Menu Archivo -> Guardar
- O bien, si tenemos activado el Autoguardado, podríamos pasar a ejecutar directamente:

La forma más rápida de ejecutar el programa es pulsar sobre el signo de «play»que se puede observar en la parte superior derecha de la pantalla:

Y aparecerá debajo su resultado:

Puede ocurrir, como cosa excepcional, que aparezca un mensaje similar al siguiente:

Es como describe Microsoft en la siguiente página:
https://docs.microsoft.com/es-es/visualstudio/python/linting-python-code?view=vs-2019
«Herramienta ampliamente usada que busca errores en el código de Python y promueve patrones correctos de codificación en Python», pero está dirigida hacia Visual Studio 2017. Para que no incordie demasiado, la instalamos, y la agregamos el path en las variables de entorno de Windows

Solo por si os sale (no tiene por qué), las variables de entorno de Windows, se encuentra en configuración avanzada del sistema.
Lo más básico: Comentarios
Lo primero que enseño siempre son los comentarios, esa parte del código que no se compila, pero que sirve de muchísimo, especialmente a la hora de revisar código que hace tiempo que hiciste y que es posible que ni te acuerdes de donde viene.
En Python, los comentarios simples se hacen con # (almohadilla, cuadradillo, en Twitter la llaman hashtag). Si tenéis curiosidad, hay un artículo que habla de la historia de #:
https://www.bbc.com/mundo/noticias-44279853

Visual Studio Code incorpora la facilidad de, si tenemos una linea demasiado larga y la hemos iniciado con #, en cualquier momento pulsamos la tecla Enter y automáticamente nos coloca la # en el principio de la siguiente línea.
Si quisiéramos un comentario de varias líneas, sin tener que escribir # en cada una de las líneas, recurrimos a las «triples comillas dobles» para empezar y para terminar el comentario:

(lo he tenido que buscar, mil millones de gracias, D. Miguel de Cervantes)
Las variables
En la vida real, solemos tener un cajón para los calcetines, otro para las camisas, otro para las camisetas, otro para la ropa interior… Podría darse el caso de tenerlo todo revuelto, pero eso no contribuye a encontrar lo que sea que estemos buscando con rapidez, y menos combinarlos entre sí.
En todos los lenguajes de programación existen variables, «cajones» donde guardar cosas, parafraseando el párrafo anterior. En algunos es bastante complejo asignar estos «cajones» porque admiten una cantidad considerable de elementos de un mismo tipo pero de distinto color (calcetines rojos, verdes, azules, por ejemplo). En Python, se ha simplificado muchísimo, de forma que no hay que hacer un máster en variables. Sólo hace falta designarle un nombre o identificador y su contenido, si es que lo tiene.

La instrucción print saca por pantalla el contenido de cada variable, a saber:

Las variables en Python pueden ser cadenas (texto para los que estáis empezando) o números.
Como vemos en el código anterior, sumar 2 cadenas es tan sencillo como interponer el signo «+» entre una y otra. Y multiplicarlas, un número determinado de veces, usar el asterisco (*) y el número de veces que queramos.
Si fuesen números, se procedería de igual forma:

Con el siguiente resultado:

Si en algún momento queremos saber qué tipo de dato alberga cada variable, se hace de la siguiente manera:

Con el consiguiente resultado:

str es la abreviatura de string, es decir, tipo cadena
int es la abreviatura de integer, es decir, tipo entero (numérico)
Si tuviéramos un número con decimales, por ejemplo, el numero Pi (3.1415), escribimos en el código fuente:

Y al ejecutarlo, en el terminal nos mostraría:

Ya que Python designa como float, traducido a «flotante», a todos los números decimales.
La precisión (es decir, los números que puede abarcar) el tipo entero (int) va desde el -231 a 231, números negativos, cero y números positivos
Existen también los números complejos, en los que no voy a entrar (por ahora), y ojo que dependiendo de la versión de Python, el tipo de números puede variar.
Funciones predefinidas
Las funciones, en cualquier lenguaje de programación, son fórmulas que, suministrándole los parámetros necesarios para que puedan realizar la operación para la cual han sido creadas, nos facilitan la existencia, tal como ocurre en la vida real.
En Python, podremos crear nuestras propias funciones, pero ahora mismo vamos a ver algunas de las que se incorporan de forma predefinida, sin tener que importar ningún módulo matemático (que también las veremos).
abs

Conversiones a número entero

y su salida es:

Se ha de hacer constar que, el número entero de 4.6 es 4, es decir, no está redondeando, sino tomando únicamente la parte entera del número decimal. En el caso de -4.6, es exactamente igual, -4; y en el de 2.9, es 2. Si quisiéramos redondear, lo veremos con la función matemática adecuada, un poco más adelante.
Conversión a cadena

El resultado de este código es:

3.5 lo deja tal cual se ha definido, pero el número 432 con 56 ceros detrás, lo convierte automáticamente a 4.32 con 58 ceros detrás. Es exactamente lo mismo, a nivel de cálculo, expresarlo de ambas formas.
Python es también un excelente conversor entre números binarios, octales, hexadecimales, como podéis apreciar a continuación:

Y su resultado es:

En octal:

Y su resultado:

Y en hexadecimal:

Con el resultado:

Redondeo matemático
Hemos visto anteriormente que, en determinados tipos númericos, Python truncaba el número para devolver la parte entera, por ejemplo, de un número decimal. Esto es un gran error matemático, de ahí que una de las funciones predefinidas para las que solo hace falta invocarla es round.
round funciona de la siguiente manera: si el número decimal que hay que redondear es mayor o igual que 5, redondea a su inmediato superior. Si es menor que 5, a su inmediato inferior, siguiendo las Reglas del Redondeo universalmente aceptadas. Lo vais a ver perfectamente con un ejemplo:

El resultado obtenido es:

En el primer número, 2.4, es menor que 5 la parte decimal, con lo que la función redondea a 2; en el segundo, 2.6, la parte decimal es mayor que 5, con lo que redondea al entero superior; en el tercero, como no tiene parte decimal, no tiene donde redondear, y se queda tal cual está.
Round admite una mayor exactitud a la hora de representar los decimales, por ejemplo:

Y su resultado:

Espero que los ejemplos que he realizado hayan sido lo suficientemente claros para ir teniendo una idea, y seguiremos en una próxima entrega.