Volver a Curso

Curso profesional de Python

0% Completado
0/0 Steps
  1. Antes de iniciar el curso.

    0.- Antes de empezar el curso
  2. Curso profesional de Python
    1.- Preparación del ambiente de trabajo.
  3. 2.- Estructura y elementos del lenguaje
    7 Temas
    |
    1 Cuestionario
  4. 3.- Principales métodos del objeto string
    7 Temas
    |
    1 Cuestionario
  5. 4.- Tipos de datos complejos
    4 Temas
    |
    1 Cuestionario
  6. 5.- Funciones definidas por el usuario
    4 Temas
    |
    1 Cuestionario
  7. 6.- Módulos, paquetes y namespaces
    3 Temas
    |
    1 Cuestionario
  8. 7.- POO/OOP (Programación Orientada a Objetos)
    8 Temas
    |
    1 Cuestionario
  9. 8.- Conversión de tipos
    5 Temas
    |
    1 Cuestionario
  10. 9.- Ficheros
    4 Temas
    |
    1 Cuestionario
  11. 10.- Bases de datos con SQLITE3
    3 Temas
    |
    1 Cuestionario
  12. 11.- Encuesta sobre el curso
  13. 12.- Proyecto final
    2 Temas
Lección Progreso
0% Completado
import datetime as dt

#Condiciones para obtener el delta. Deben estar en orden de coincidencia.
#date es la fecha que se comparará
CONDICIONES = {
    "Hoy": "today == date",
    "Ayer": "today - date == dt.timedelta(days=1)",
    "Esta semana": "today.isocalendar()[1] == date.isocalendar()[1]",
    "La semana pasada": "today.isocalendar()[1] - date.isocalendar()[1] == 1",
    "Este mes": "today.month == date.month",
    "El mes pasado": "today.month - date.month == 1",
    "Este año": "today.year == date.year",
    "El año pasado": "today.year - date.year == 1",
}

def ultima_modificacion(fecha):
    ''' Devuelve hace cuanto fue modificado un archivo recibiendo la fecha en la cual fue modificado.

    Parameters:
        str fecha: Fecha en isoformat en la que fue modificado el archivo.
    Returns:
        str: Representación textual de hace cuanto fue modificado el archivo.
    Raises:
        ValueError: En caso que la fecha que se ingresa sea mayor al día actual.
    '''
    date = dt.datetime.fromisoformat(fecha).date()
    today = dt.date.today()

    if date > today:
        raise ValueError("La fecha es mayor al día actual.")

    for k,v in CONDICIONES.items():
        if eval(v):
            return k
            
    # En caso que no se cumpla ninguna condición
    return "Hace más de un año"

if __name__ == '__main__':
    print(ultima_modificacion("2019-11-14"))

Continuando con el análisis de nuestro código, si observamos la línea 16 vemos que se define una función. Si bien aún no hablaremos de las funciones y sus características, a nivel general, una función es un procedimiento o rutina que se crean para cumplir un procedimiento específico.

Si observas el código, verás que a partir de la línea 17 hasta la línea 37 inclusive, el código se encuentra indentado o “sangrado”. Esto ocurre porque en Python las estructuras de control de flujo no poseen llaves que marquen dónde comienzan y terminan; el delimitador de comienzo son los dos puntos (:) y el propio indentado del código indica que dichas sentencias pertenecen al mismo bloque.

Si bien puedes indentar utilizando espacios y tabulaciones, el método de indentación más popular en Python son los espacios. Para lograr esto con mayor facilidad, puedes configurar tu editor de textos para que funcione de dicha manera, siempre que el editor lo permita.

Python posee controles de flujo tradicionales como if, while y for. Además posee try/except para el manejo de excepciones y with para el manejo de excepciones más limpio y legible a la hora de trabajar con archivos.

Antes de continuar analizando nuestro código, analicemos estas declaraciones.

Declaración if/elif/else:

La sentencia de control de flujo más conocida en un lenguaje de programación es el if. Esta declaración sirve para evaluar condiciones y ejecutar instrucciones si estas condiciones se cumplen. Por ejemplo…

>>> hoy = "Sábado"
>>> if hoy == "Sábado":
... 	print("Es fin de semana!")
...
Es fin de semana!

Es fin de semana!


  1. Creamos la variable hoy con el valor
    “Sábado”.

  2. Luego evaluamos que el contenido de la
    variable hoy sea igual a Sábado.

  3. Presionamos TAB e indicamos que, de
    ser así, imprimimos “Es fin de semana!”.

  4. Para finalizar el bloque dentro del
    if, simplemente volvemos a presionar ENTER.

  5. Como era de esperar, se imprime la
    leyenda “Es fin de semana!”.

Operadores de comparación

En el ejemplo anterior utilizamos el comparador ==, pero existen varios operadores de comparación; demos un vistazo.


  • == (igual): Si ambos operandos son iguales, entonces la
    condición es verdadera.

  • != (distinto): Si ambos operandos son distintos, entonces la
    condición es verdadera.

  • <> (distinto): Existe otro modo de comparar si un valor
    es distinto, y es el operador de menor/mayor.

  • > (mayor): Si el valor del primer operando es mayor al
    segundo, entonces la condición es verdadera.

  • < (menor): Si el valor del primer operando es menor al
    segundo, la condición es verdadera.


  • >= (mayor o igual): Si el valor del primer operando es
    mayor o igual al segundo, entonces la condición es verdadera.

  • <= (menor o igual): Si el valor del primer operando es
    menor o igual al segundo, entonces la condición es verdadera.

Vale aclarar que puedes combinar condiciones con los operadores booleanos and y or o puedes negar una condición con el operador not.

En caso de que la condición del if sea False, se comprobarán todos los siguientes elif (en caso de que existan) y de no cumplirse ninguna de estas condiciones, se ejecutará el contenido de else. Por ejemplo…

>>> anyo = 2019
>>> if anyo >= 1990 and anyo < 2000:
... 	print("Es la década del 90")
... elif anyo >= 2000 and anyo < 2010:
... 	print("Es la década del 00")
... elif 2010 <= anyo < 2020:
... 	print("Es la década del 10")
... else:
... 	print("Solo analizamos pocas décadas")
...
Es la década del 10

  1. Creamos una variable anyo con el valor
    2019.

  2. Utilizamos anyo dado a que no podemos
    utilizar la letra ñ en nombres de variables.

  3. En primera instancia, comparamos si el
    año es mayor o igual a 1990 y menor a 2000.

  4. De ser así, imprimimos que es la
    década del 90.

  5. En caso de que no se cumpla esta
    condición, evaluamos otra con elif.

  6. En este caso, comparamos Que el año
    sea mayor o igual a 2000 y menor a 2010 para imprimir que es la
    década del 00.

  7. En caso que no se cumpla, evaluamos si
    el año es mayor o igual a 2010 y menor a 2020, pero con una
    notación simplificada.

  8. De ser así, imprimimos que es la
    década del 10.

  9. En caso de que no se cumpla ninguna
    condición, imprimimos que solo analizamos pocas décadas.



  10. Y Tal como se esperaba, se imprime que
    es la década del 10

Declaración try/except:

La declaración try es utilizada para el manejo de excepciones. El bloque dentro del try es ejecutado y en caso de que se eleve alguna excepción, se comprueban todos los except en el orden que fueron indicados y en caso de que no ocurra ninguna coincidencia, se ejecuta el bloque dentro de la etiqueta except final.

La declaración try más básica es la siguiente:

>>> try:
... 	print('as' * 'df')
... except TypeError:
... 	print('Error multiplicando cadenas')
... except:
... 	print('Error desconocido')
...
Error multiplicando cadenas

Error multiplicando cadenas


  1. En primera instancia, utilizamos la
    palabra reservada try y dos puntos.

  2. Seguido, intentamos realiza una
    operación que elevará una excepción.

  3. En este caso, intentamos multiplicar
    dos cadenas.

  4. Luego, utilizamos la declaración
    except TypeError para comprobar si se elevó una excepción de tipo
    TypeError.

  5. De ser así, imprimimos que ocurrió
    un error multiplicando las cadenas.

  6. Luego de esto, utilizamos la palabra
    reservada except y dos puntos.

  7. Y dentro de except, indicamos que hay
    un error pero que no sabemos cual es.

  8. Tal como se esperaba, se imprime que
    hubo un error multiplicando cadenas.

Además de este uso básico, también es posible agregar las cláusulas else y finally. El bloque else se ejecuta si no se generó ninguna excepción y no se ejecutó ningún return, continue o break, cuyo funcionamiento descubriremos en los ciclos iterativos. Mientras que el bloque finally se ejecuta independientemente del resultado de los bloques try/except/else.

Estructuras de control iterativas

Ciclo while

La sentencia while se utiliza para ejecutar acciones repetidamente siempre que una condición sea verdadera. A este concepto también se lo conoce como loop.

Por ejemplo, si queremos imprimir los números del 1 al 10 con while, deberíamos realizar lo siguiente:

>>> tmp = 1
>>> while tmp <= 10:
... 	print(tmp)
... 	tmp += 1
...
1
2
3
4
5
6
7
8
9
10

  1. Primero creamos una variable temporal
    con el nombre tmp de valor 1.

  2. Luego, creamos el bucle while
    evaluando que tmp sea menor o igual a 10.

  3. Si esto se cumple, imprimimos el valor
    de tmp y luego incrementemos en 1el valor de tmp.

  4. A diferencia de la sentencia if, el
    bucle while vuelve a evaluar la condición una vez que se finalizan
    todas las instrucciones dentro del mismo.

  5. Si la condición vuelve a ser
    verdadera, se vuelven a ejecutar todas las instrucciones dentro del
    mismo.

  6. Por dicho motivo, el código se
    detiene cuando tmp llega al valor 11 (no se imprime este valor).

A diferencia de otros lenguajes, el bucle while en Python soporta la expresión else, que es ejecutada si la evaluación de while es False. Por ejemplo…

>>> tmp = 0
>>> while tmp <= 3:
... 	print(tmp)
... 	tmp += 1
... else:
... 	print("Se finalizó el ciclo.")
...
0
1
2
3
Se finalizó el ciclo.

  1. Creamos la variable temporal

  2. Creamos un bucle while evaluando que
    tmp sea menor o igual a 3

  3. En caso que sea correcto, imprimimos e
    incrementamos el valor de tmp

  4. En caso de que la evaluación sea
    False, imprimimos que se finalizó el ciclo.

Además, un bucle while puede ser detenido manualmente con la sentencia break. En dicho caso, el bloque else no es ejecutado. Por ejemplo…

>>> tmp = 0
>>> while tmp <= 5:
... 	print(tmp)
... 	if tmp == 3:
...         	break
... 	tmp += 1
... else:
... 	print("Se finalizó correctamente.")
...
0
1
2
3

  1. Volvemos a asignar tmp a 0

  2. Volvemos a crear el bucle while pero
    evaluando a 5

  3. Imprimimos el valor y evaluamos si tmp
    es igual a 3

  4. En dicho caso, ejecutamos la sentencia
    break que se encargará de forzar la finalización del bucle.

  5. Incrementamos el valor de tmp

  6. Creamos el else para cuando la
    evaluación de while no se cumpla

  7. Y en tal caso, imprimimos que se
    finalizó correctamente.



  8. Como se esperaba, cuando tmp alcanza
    el valor 3, se ejecuta la sentencia break, el ciclo se rompe y no se
    ejecuta el código dentro del else.

Ciclo for

A diferencia de otros lenguajes, el ciclo for en Python se utiliza para iterar sobre los elementos de una secuencia como una cadena, lista, tupla o cualquier iterable. Por ejemplo…

>>> dias = ["Lunes", "Martes", "Miércoles"]
>>> for dia in dias:
... 	print (dia)
...
Lunes
Martes
Miércoles

  1. Creamos una lista con 3 días de la
    semana

  2. Creamos un bucle for que itere sobre
    la variable días

  3. El bucle for comenzará en la posición
    0 de la variable días en la primera iteración e irá cambiando de
    posición conforme se vaya ejecutando el código dentro de sí
    mismo.

En caso de que vengas de otro lenguaje de programación -o no- y precises iterar de la manera más conocida, puedes utilizar la función range. Por ejemplo…

>>> for i in range(3):
... 	print(i)
...
0
1
2

  1. Creamos un ciclo for utilizando la
    función range

  2. Range devuelve un objeto iterable de
    enteros desde 0 hasta el número indicado como parámetro (sin
    incluir el mismo).

  3. Una vez dentro del for, imprimimos el
    valor de i.

  4. Como podemos observar, se imprimen los
    valores del 0 al 2 (no incluyendo el 3).

Para más información sobre la función range, puedes consultar la documentación oficial.