17 años en Internet

24 julio 2014

Aprendiendo Python, día 1

1.- ¿Qué es Python?

    Python es un lenguaje de scripting (lenguaje de programación interpretado) con dos objetivos clave: Ser inteligible y ser multiplataforma. Al ser un lenguaje interpretado, significa que cuando se ejecuta un programa escrito en Python no se ejecuta un código binario, si no el código fuente en si, permitiendo que cualquier usuario final pueda editarlo (ahora bien, existen herramientas de terceros que te permiten generar binarios .exe, por ejemplo).

    Por otro lado, al ser multiplataforma significa que todo lo que se tenga que ejecutar tendrá que funcionar de forma parecida (dentro de lo que se pueda) en distintos sistemas operativos. Esto es un punto a favor respecto a otros lenguajes de scripting como Batch (sistemas Windows), Bash o AWK (Unix)... además de contar con otra mejora importante respecto a estos: Python es un lenguaje de scripting con orientación a objetos.

2.- ¿Cómo se instala?

    En entornos Linux suele estar presente en la mayoría de repositorios, pudiendo instalarse fácilmente con programas como yum o apt-get (ejemplo, en Ubuntu bastaría con abrir una shell y teclear: sudo apt-get install python-all).  En entornos Windows basta con instalarse el instalable suministrado en la web oficial de Python.

3.- "Hello World" y  "What's your name?"

    El primer programa que hacemos siempre en cada lenguaje de programación que queremos aprender es el famoso "Hola Mundo"... Una sencilla aplicación de consola que lo único que hace es imprimir por salida estándar (pantalla) el texto de "Hola Mundo". Haciendo uso de nuestro editor de texto preferido vamos a crear un fichero de texto plano llamado helloworld.py y le vamos a poner el siguiente contenido:
print "Hello world!"
Guardamos el archivo, abrimos una terminal y ejecutamos:
python helloworld.py
    Verás que nos sale una nueva línea con el texto Hello world!. Como ves éste ha sido uno de los Hello World más sencillos que has hecho en tu vida: haciendo uso una mera línea de código. Si en Windows no te encuentra el programa "python", dale un vistazo a cómo definir las variables del sistema de Python, serguramente el ejecutable no se encuentra en ninguna ruta de tu Path.

    Ahora vamos con un paso más complicado, vamos a imprimir por salida estándar "Cómo te llamas?", vamos a hacer que se nos pregunte por entrada estándar nuestro nombre y acto seguido imprimiremos "Encantado de conocerte, XXXXX". Para ello crearemos el fichero de texto plano whatsyourname.py y añadiremos las siguientes líneas:
# -*- coding: utf-8 -*-
print "¿Cómo te llamas?"
s_name = raw_input()
print "Encantado de conocerte,", s_name
    La primera línea es necesaria porque estamos utilizando carácteres que no están presentes en la codificación ASCII estándar, como es el símbolo de apertura de interrogación o el acento en la o. Sin esa línea nuestro script no podría ejecutarse "por errores de código". Ahora bien, esta línea sería innecesaria si nuestros literales estuvieran escritos únicamente en inglés o en castellano pero sin carácteres no presentes en la codificación ASCII.

    En la tercera línea pedimos una entrada manual de datos y hacemos que el dato o datos suministrados se guarden en la variable s_name. Si nos fijamos, a diferencia de otros lenguajes de programación no hace falta definir ni inicializar previamente dicha variable. Por último, por defecto Python entiende que todas las variables son strings, pero podemos forzar su uso como float o integers (por ejemplo) haciendo uso de castings. Para demostrar esto (que todas las variables por defecto son cadenas de texto), os presentaré un pequeño cambio en el código:
# -*- coding: utf-8 -*-
print "¿Cómo te llamas?"
s_name = raw_input()
print "Encantado de conocerte, " + s_name
    Si ejecutamos ahora el código veremos que el comportamiento es exáctamente el mismo que antes, pero hemos añadido un espacio en blanco dentro de las comillas y hemos concatenado la cadena s_name haciendo uso del símbolo "+".

    Podemos presentar una tercera variación del código, dado que raw_input permite mostrar una cadena de texto a la vez que pide la entrada de datos:
# -*- coding: utf-8 -*-
s_name = raw_input("¿Cómo te llamas?\n")
print "Encantado de conocerte, " + s_name
    Por último, si eres usuario de Linux, existe una forma con la que puedes ejecutar tus programas de Python sin necesidad de escribir siempre "python " delante:
  1. Desde una terminal ejecuta which python para conocer la ruta donde se encuentra tu intérprete de Python. En mi caso se encuentra en /usr/bin/python.
  2. En la primera línea de tu script escribe lo siguiente: #!/usr/bin/python
  3. Dale permisos de ejecución a tu script: (desde consola) chmod +x script.py
  4. Ejecutalo escribiendo su ruta absoluta o relativa: ./script.py

4.- Conceptos básicos de Python

4.1- If, else if, else, enteros y cadenas.
    Python no usa llaves para separar bloques de código (como son clases, funciones o condiciones). Para delimitar esos bloques se hace uso de sangrías (tabulaciones) o 5 espacios en blanco. Suena raro, pero es práctico y genera código inteligible. Para entender esto os dejo un ejemplo de condiciones:

# -*- coding: utf-8 -*-
v_number = raw_input("Dame un número\n")
v_number = int(v_number) 
if v_number > 10:
        print v_number , "es > 10" 
elif v_number == 10:
        print v_number , "es 10" 
else:
        print v_number , "es < 10"
    Si nos fijamos, en el caso anterior hemos hecho un casting a int para poder realizar una comparación con un valor entero. De no haberlo hecho, Python habría entendido que v_number era una cadena de texto y por consiguiente de no ponerlo no obtendríamos el resultado esperado. Ejemplo de comparación correcta con cadenas de texto:
# -*- coding: utf-8 -*-
v_name = raw_input("Dame un nombre\n") 
if v_name == 'Sebas':
        print v_name + " es Sebas" 
else:
        print v_name + " no es Sebas"

4.2- Bucles
    Python permite dos formas de embuclado de flujos: los famosos while y for. Su funcionamiento es similar al del resto de lenguajes de programación, permitiendo que se ejecute un bloque de código de forma concurrente hasta que deje de cumplirse una condición.

Ejemplo de uso de while:
v_i = int(5) 
while v_i >= 0:
        print v_i
        v_i-=1
Ejemplo con un "while true":
# -*- coding: utf-8 -*-
while True:
        v_number = int(raw_input("Dame un número\n")) 
        if v_number == 0:
                break
    Donde con While True exigimos que el bucle sea infinito, pero con el break indicamos que el bucle morirá cuando insertemos el número 0.

    Por otro lado el bucle for realmente actúa como un bucle "foreach".

Ejemplo 1, contar del 0 al 4:
for v_i in range(5):
        print v_i
Ejemplo 2, contar del 5 al 9:
for v_i in range(5, 10):
        print v_i

Ejemplo 3, leer todas las líneas de un fichero de texto plano:
s_file_name = "mi_fichero.txt"
v_file = open(s_file_name) 
for s_line in v_file:
        print s_line
Ejemplo 4, deletrear una cadena de texto:
for c_char in 'QWERTY':
        print c_char
Ejemplo 5, tratar un array elemento a elemento:
l_nombres = ["sebas", "paula", "joan"] 
for s_nombre in l_nombres:
        print s_nombre

4.3- Colecciones
    Al igual que muchos de los lenguajes modernos, Python permite hacer uso de colecciones, siendo las más famosas de su catálogo las listas y los diccionarios. Una lista puede entenderse como un conjunto de elementos ordenados como una pila FIFO (first in, first out).
l_names = list()
l_names.append("sebas")
l_names.append("paula")
l_names.append("joan") 
for s_name in l_names:
        print s_name
    Por su parte, un diccionario es lo que se conoce como un array referenciado, donde el índice no tiene por qué ser un número entero (algo bastante típico en lenguajes como AWK o Perl). A diferencia de las listas, su orden es LIFO (last in, first out)... pero el orden puede cambiar si jugamos con el método sort.
# -*- coding: utf-8 -*-
l_age = dict() 
l_age["sebas"] = 30
l_age["paula"] = 20
l_age["joan"] = 25 
for v_index, v_value in l_age.items():
        print v_index + " tiene", v_value, "años"

4.4- Funciones
    Para crear una función bastará con escribir delante de su nombre la palabra referenciada "def", pondremos entre paréntesis los parámetros que requiere (si es que requiere alguno) y definiremos todo su contenido haciendo uso de un nivel de sangría.

Ejemplo 1:
# Funcion
def insult_user(s_name):
        if s_name == "Sebas":
                print "Guapo!"
        else:
                print "Feo!" 
# Hilo principal
s_name = raw_input("Dame un nombre\n")
insult_user(s_name)
Ejemplo 2:
# -*- coding: utf-8 -*-
def div_5(v_number):
        return float(v_number)/5 
v_number = raw_input("Dame un número\n")
print "Su división entre 5 da", div_5(v_number)

4.4- Objetos
    A diferencia de otros lenguajes de scripting, Python es un lenguaje orientado a objetos.

Ejemplo:
class footballer():
        #Variables de instancia
        s_name = None
        s_average = 50
        #Constructor de la clase
        def __init__(self, s_name, s_average):
                self.s_name = s_name
                self.s_average = s_average
        def lesionar(self):
                self.s_average = int(self.s_average)/2  
v_footballer_1 = footballer("Cristiano Ronaldo", 89)
v_footballer_2 = footballer("Sofiane Feghouli", 95)
v_footballer_3 = footballer("Lionel Messi", 90) 
v_footballer_2.lesionar() 
l_team = list()
l_team.append(v_footballer_1)
l_team.append(v_footballer_2)
l_team.append(v_footballer_3) 
for v_footballer in l_team:
        print v_footballer.s_name + " tiene una media de", v_footballer.s_average

No hay comentarios:

Publicar un comentario

Si te ha gustado la entrada o consideras que algún dato es erróneo o símplemente deseas dar algún consejo, no dudes en dejar un comentario. Todo feedback es bienvenido siempre que sea respetuoso. También puedes contactarme vía Twitter @Hamster_ruso si lo consideras necesario.