Python


脥ndice

  1. Introducci贸n
  2. Python
  3. Variables
  4. Formateo de Cadenas
  5. Condiciones
  6. Secuencias
  7. Funciones
  8. M贸dulos
  9. Programaci贸n Orientada a Objetos
  10. Programaci贸n Funcional
  11. Decoradores
  12. Funciones Lambda
  13. Excepciones

Introducci贸n

Hasta ahora, hemos discutido c贸mo construir p谩ginas web simples utilizando HTML y CSS, y c贸mo utilizar Git y GitHub para llevar un registro de los cambios en nuestro c贸digo y colaborar con otros.

Hoy, profundizaremos en Python, uno de los dos principales lenguajes de programaci贸n que utilizaremos a lo largo de este curso.

Python

  • Python es un lenguaje muy poderoso y ampliamente utilizado que nos permitir谩 construir r谩pidamente aplicaciones web bastante complejas. En este curso, utilizaremos Python 3, aunque Python 2 a煤n se utiliza en algunos lugares. Al buscar recursos externos, ten cuidado de asegurarte de que est茅n utilizando la misma versi贸n.
  • Comencemos donde comenzamos con muchos lenguajes de programaci贸n: 隆Hola, mundo! Este programa, escrito en Python, se ver铆a as铆:
python
1print("Hello, world!")
  • Para desglosar lo que sucede en esa l铆nea, hay una funci贸n print incorporada en el lenguaje Python, que toma un argumento entre par茅ntesis y muestra ese argumento en la l铆nea de comandos.
  • Para escribir y ejecutar este programa en sus computadoras, primero escribir谩n esta l铆nea en su editor de texto preferido y luego guardar谩n el archivo con un nombre, por ejemplo,"algo.py". Luego, abrir谩n su terminal, se dirigir谩n al directorio que contiene el archivo y escribir谩n"python algo.py". En el caso del programa anterior, las palabras "隆Hola, mundo!" se mostrar谩n en la terminal.
  • Dependiendo de c贸mo est茅 configurada su computadora, es posible que deban escribir "Python3" en lugar de "Python" antes del nombre del archivo, e incluso es posible que deban descargarPythonsi a煤n no lo han hecho. Despu茅s de instalar Python, recomendamos que tambi茅n descarguenPip, ya que lo necesitar谩n m谩s adelante en el curso.
  • Cuando escriben "python archivo.py" en su terminal, un programa llamado int茅rprete, que descargaron junto con Python, lee su archivo l铆nea por l铆nea y ejecuta cada l铆nea de c贸digo. Esto es diferente de lenguajes como C o Java, que deben compilarse a c贸digo de m谩quina antes de poder ejecutarse.

Variables

  • Una parte clave de cualquier lenguaje de programaci贸n es la capacidad de crear y manipular variables. Para asignar un valor a una variable en Python, la sintaxis se ve as铆:
python
1a = 28
2b = 1.5
3c = "Hello!"
4d = True
5e = None

Cada una de estas l铆neas toma el valor a la derecha del signo igual=y lo almacena en la variable que se encuentra a la izquierda.

A diferencia de algunos otros lenguajes de programaci贸n, los tipos de variables en Python son inferidos, lo que significa que si bien cada variable tiene un tipo, no es necesario declarar expl铆citamente de qu茅 tipo es al crear la variable. Algunos de los tipos de variables m谩s comunes son:

  • int: Un n煤mero entero.
  • floatUn n煤mero decimal.
  • strUna cadena de caracteres o secuencia de caracteres.
  • bool: Un valor que es True o False.
  • NoneType: Un valor especial (None) que indica la ausencia de un valor.

Ahora trabajaremos en escribir un programa m谩s interesante que pueda tomar la entrada del usuario y saludar al usuario. Para hacer esto, utilizaremos otra funci贸n incorporada llamada input, que muestra un mensaje al usuario y devuelve lo que el usuario proporciona como entrada. Por ejemplo, podemos escribir lo siguiente en un archivo llamado"name.py":

python
1name = input("Name: ")
2print("Hello, " + name)
Python terminal

Un par de cosas para se帽alar aqu铆:

  • En la primera l铆nea, en lugar de asignar la variable"name" a un valor expl铆cito, la estamos asignando a lo que devuelve la funci贸n"input".
  • En la segunda l铆nea, estamos utilizando el operador"+" para combinar o concatenar dos cadenas. En Python, el operador"+" se puede utilizar para sumar n煤meros o concatenar cadenas y listas.

Formato de Cadenas

Si bien podemos utilizar el operador"+" para combinar cadenas como hicimos anteriormente, en las 煤ltimas versiones de Python, existen formas a煤n m谩s sencillas de trabajar con cadenas, conocidas como"cadenas formateadas" o"f-strings" en resumen.

Para indicar que estamos utilizando cadenas formateadas, simplemente agregamos una f antes de las comillas. Por ejemplo, en lugar de usar "Hello, " + name como hicimos anteriormente, podr铆amos escribirf"Hello, {name}" para obtener el mismo resultado. Incluso podemos insertar una funci贸n en esta cadena si lo deseamos, y convertir nuestro programa anterior en una sola l铆nea:

python
1name = input("C贸mo te llamas? ")
2print(f"Hola, {name}")

Condiciones

  • Al igual que en otros lenguajes de programaci贸n, Python nos brinda la capacidad de ejecutar segmentos de c贸digo diferentes basados en diferentes condiciones. Por ejemplo, en el programa a continuaci贸n, cambiaremos nuestra salida dependiendo del n煤mero que un usuario escriba:
  • python
    1num = input("Number: ")
    2if num > 0:
    3 print("Number is positive")
    4elif num < 0:
    5 print("Number is negative")
    6else:
  • Entrando en c贸mo funciona el programa anterior, las sentencias condicionales en Python contienen una palabra clave(if, elif o else)y luego(excepto en el caso de else)una expresi贸n booleana, es decir, una expresi贸n que se eval煤a como True o False. Luego, todo el c贸digo que queremos ejecutar si cierta expresi贸n es verdadera se encuentra sangrado directamente debajo de la declaraci贸n. La sangr铆a es obligatoria como parte de la sintaxis de Python.
  • Sin embargo, al ejecutar este programa, nos encontramos con unaexcepci贸nque se ve as铆:
  • Python terminal error
  • Una excepci贸n es lo que sucede cuando ocurre un error mientras estamos ejecutando nuestro c贸digo Python, y con el tiempo te volver谩s mejor en la interpretaci贸n de estos errores, lo que es una habilidad muy valiosa.
  • Veamos un poco m谩s de cerca esta excepci贸n espec铆fica: Si observamos en la parte inferior, veremos que nos encontramos con un TypeError, lo que generalmente significa que Python esperaba que una variable fuera de un tipo espec铆fico, pero encontr贸 que era de otro tipo. En este caso, la excepci贸n nos dice que no podemos usar el s铆mbolo>para comparar una cadena(str)y un entero(int), y luego arriba podemos ver que esta comparaci贸n ocurre en la l铆nea 2.
  • En este caso, es evidente que 0 es un entero, por lo que debe ser el caso que nuestra variable"num es una cadena. Esto sucede porque resulta que la funci贸n"input siempre devuelve una cadena, y debemos especificar que debe convertirse(o fundirse)en un entero utilizando la funci贸n"int. Esto significa que nuestra primera l铆nea ahora se ver铆a as铆:
  • python
    1num = int(input("Number: "))
  • Ahora, el programa funcionar谩 tal como lo ten铆amos previsto!

Secuencias

Una de las partes m谩s poderosas del lenguaje Python es su capacidad para trabajar con secuencias de datos adem谩s de variables individuales.

Hay varios tipos de secuencias que son similares en algunos aspectos, pero diferentes en otros. Al explicar esas diferencias, utilizaremos los t茅rminos mutables/inmutables y ordenados/desordenados. Mutable significa que una vez que se ha definido una secuencia, podemos cambiar elementos individuales de esa secuencia, y ordenado significa que el orden de los objetos es importante.

Cadenas

  1. Ordenadas: S铆
  2. Mutables: No

Ya hemos examinado las cadenas un poco, pero en lugar de solo variables, podemos pensar en una cadena como una secuencia de caracteres. Esto significa que podemos acceder a elementos individuales dentro de la cadena. Por ejemplo:

python
1name = "Mario"
2print(name[0])
3print(name[1])

imprime el primer car谩cter(o 铆ndice-0) en la cadena, que en este caso es M, y luego imprime el segundo car谩cter(铆ndice-1), que es"a".

Listas

  1. Ordenadas: S铆
  2. Mutables: S铆

Unalista en Pythonte permite almacenar cualquier tipo de variable. Creamos una lista utilizando corchetes cuadrados y comas, como se muestra a continuaci贸n. Al igual que con las cadenas, podemos imprimir una lista completa o algunos elementos individuales. Tambi茅n podemos agregar elementos a una lista utilizandoappendy ordenar una lista utilizandosort.

python
1# Esto es un comentario en Python
2nombres = ["Harry", "Ron", "Hermione"]
3# Imprimir la lista completa:
4print(nombres)
5# Imprimir el segundo elemento de la lista:
6print(nombres[1])
7# Agregar un nuevo nombre a la lista:
8nombres.append("Draco")
9# Ordenar la lista:
10nombres.sort()
11# Imprimir la nueva lista:
12print(nombres)
Python console

Tuplas

  1. Ordenadas: S铆
  2. Mutables: No

Las tuplas generalmente se utilizan cuando necesitas almacenar solo dos o tres valores juntos, como los valoresx e ypara un punto. En el c贸digo de Python, utilizamos par茅ntesis:

python
1point = (12.5, 10.6)
2# Otra tupla
3mitupla = ("manzana", "banana", "frutilla")

Unatuplaes uno de los 4 tipos de datos incorporados en Python que se utilizan para almacenar colecciones de datos. Los otros 3 son List, Set y Dictionary, todos con diferentes caracter铆sticas y usos.

Una tupla es una colecci贸n que est谩 ordenada y no se puede modificar.

  1. Los elementos de una tupla est谩n ordenados, no se pueden cambiar y permiten valores duplicados.
  2. Los elementos de una tupla se indexan, el primer elemento tiene el 铆ndice[0], el segundo elemento tiene el 铆ndice[1], y as铆 sucesivamente.

Conjuntos

  1. Ordenadas: No
  2. Mutables: N/D

Losconjuntosson diferentes de las listas y las tuplas en que son desordenados. Tambi茅n son diferentes porque, mientras puedes tener dos o m谩s elementos iguales dentro de una lista/tupla, un conjunto solo almacenar谩 cada valor una vez. Podemos definir un conjunto vac铆o utilizando la funci贸n"set". Luego, podemos usar"add" y"remove" para agregar y quitar elementos de ese conjunto, y la funci贸n"len" para encontrar el tama帽o del conjunto. Ten en cuenta que la funci贸n"len"funciona en todas las secuencias en Python. Tambi茅n ten en cuenta que, a pesar de agregar 4 y 3 al conjunto dos veces, cada elemento solo puede aparecer una vez en un conjunto.

python
1# Crear un conjunto vac铆o:
2s = set()
3
4# Agregar algunos elementos:
5s.add(1)
6s.add(2)
7s.add(3)
8s.add(4)
9s.add(3)
10s.add(1)
11
12# Quitar el 2 del conjunto
13s.remove(2)
14
15# Imprimir el conjunto:
16print(s)
17
18# Encontrar el tama帽o del conjunto:
19print(f"El conjunto tiene {len(s)} elementos.")
20
21""" Este es un comentario de varias l铆neas en Python:
22Salida:
23{1, 3, 4}
24El conjunto tiene 3 elementos.
25"""

Diccionarios

  1. Ordenadas: No
  2. Mutables: S铆

Losdiccionariosde Python, o dicts, ser谩n especialmente 煤tiles en este curso. Un diccionario es un conjunto de pares clave-valor, donde cada clave tiene un valor correspondiente, al igual que en un diccionario, cada palabra(la clave) tiene una definici贸n correspondiente(el valor). En Python, utilizamos llaves(corchetes) para contener un diccionario y dos puntos para indicar claves y valores. Por ejemplo:

python
1# Definir un diccionario
2casas = {"Harry": "Gryffindor", "Draco": "Slytherin"}
3# Imprimir la casa de Harry
4print(casas["Harry"])
5# Agregar valores a un diccionario:
6casas["Hermione"] = "Gryffindor"
7# Imprimir la Casa de Hermione:
8print(casas["Hermione"])
9
10""" Output:
11Gryffindor
12Gryffindor
13"""

Bucles

  1. Ordenadas: No
  2. Mutables: S铆

LosbuclesLos son una parte incre铆blemente importante de cualquier lenguaje de programaci贸n, y en Python, existen dos formas principales:bucles forybucles while. Por ahora, nos centraremos en los bucles for.

  • Los buclesforse utilizan para iterar sobre una secuencia de elementos, realizando un bloque de c贸digo (sangrado debajo) para cada elemento en una secuencia. Por ejemplo, el siguiente c贸digo imprimir谩 los n煤meros del 0 al 5:
python
1for i in [0, 1, 2, 3, 4, 5]:
2print(i)
3
4""" Output:
50
61
72
83
94
105
11"""
  • Podemos condensar este c贸digo utilizando la funci贸n range de Python, que nos permite obtener f谩cilmente una secuencia de n煤meros. El siguiente c贸digo produce el mismo resultado que nuestro c贸digo anterior:
python
1for i in range(6):
2 print(i)
3
4""" Output:
50
61
72
83
94
105
11"""
  • 隆Este tipo de bucle puede funcionar para cualquier secuencia! Por ejemplo, si deseamos imprimir cada nombre en una lista, podr铆amos escribir el siguiente c贸digo:
  • python
    1# Crea una lista:
    2nombres = ["Harry", "Ron", "Hermione"]
    3
    4# Imprime en pantalla cada nombre:
    5for nombre in nombres:
    6 print(name)
    7
    8""" Output:nombres
    9Harry
    10Ron
    11Hermione
    12"""
  • Podemos ser a煤n m谩s espec铆ficos si lo deseamos y recorrer cada car谩cter en un solo nombre.
  • python
    1name = "Harry"
    2for char in name:
    3 print(char)
    4
    5""" Output:
    6H
    7a
    8r
    9r
    10y
    11"""

    Funciones

    Ya hemos visto algunas funciones de Python, comoprinteinput, pero ahora vamos a adentrarnos en escribir nuestras propias funciones. Para comenzar, escribiremos una funci贸n que toma un n煤mero y lo eleva al cuadrado:

    python
    1def square(x):
    2return x * x

    Observa c贸mo utilizamos la palabra clave"def"para indicar que estamos definiendo una funci贸n, que estamos tomando una 煤nica entrada llamada"x" y que utilizamos la palabra clave"return"para indicar cu谩l debe ser la salida de la funci贸n.

    Luego podemos "llamar" a esta funci贸n de la misma manera en que hemos llamado a otras:
    utilizando par茅ntesis:

    python
    1for i in range(10):
    2print(f"The square of {i} is {square(i)}")
    3
    4""" Output:
    5El cuadrado de 0 es 0
    6El cuadrado de 1 es 1
    7El cuadrado de 2 es 4
    8El cuadrado de 3 es 9
    9El cuadrado de 4 es 16
    10El cuadrado de 5 es 25
    11El cuadrado de 6 es 36
    12El cuadrado de 7 es 49
    13El cuadrado de 8 es 64
    14El cuadrado de 9 es 81
    15"""

    M贸dulos

    A medida que nuestros proyectos se vuelvan m谩s grandes, ser谩 煤til poder escribir funciones en un archivo y ejecutarlas en otro. En el caso anterior, podr铆amos crear un archivo llamado"functions.py"con el c贸digo:

    python
    1def square(x):
    2return x * x

    Y otro archivo llamado"square.py"con el c贸digo:

    python
    1for i in range(10):
    2print(f"The square of {i} is {square(i)}")

    Sin embargo, cuando intentemos ejecutar"square.py", nos adentraremos en el siguiente error:

    Name error

    Nos encontramos con este problema porque, de forma predeterminada, los archivos de Python no saben acerca de los dem谩s, por lo que debemos importar expl铆citamente la funci贸n"square" desde el m贸dulo"functions" que acabamos de escribir. Ahora, cuando"square.py"se ve as铆:

    python
    1from functions import square
    2
    3for i in range(10):
    4 print(f"The square of {i} is {square(i)}")

    Alternativamente, podemos optar por importar el m贸dulo completo"functions" y luego utilizar la notaci贸n de punto para acceder a la funci贸n"square":

    python
    1import functions
    2
    3for i in range(10):
    4 print(f"The square of {i} is {functions.square(i)}")

    Existen muchos m贸dulos incorporados en Python que podemos importar, como "math" o "csv", que nos brindan acceso a a煤n m谩s funciones. Adem谩s, podemos descargar a煤n m谩s m贸dulos para acceder a una funcionalidad adicional. Pasaremos mucho tiempo utilizando el m贸dulo Django, que veremos en la pr贸xima etapa.

    Programaci贸n Orientada a Objetos

    LaProgramaci贸n Orientada a Objetoses un paradigma de programaci贸n, o una forma de pensar acerca de la programaci贸n, que se centra en objetos que pueden almacenar informaci贸n y realizar acciones.

    • Clases: Ya hemos visto varios tipos diferentes de variables en Python, pero 驴qu茅 pasa si queremos crear nuestro propio tipo? Una clase en Python es esencialmente una plantilla para un nuevo tipo de objeto que puede almacenar informaci贸n y realizar acciones. Aqu铆 tienes una clase que define un punto bidimensional:
    python
    1class Point():
    2# Un m茅todo para definir como crear un punto:
    3def __init__(self, x, y):
    4 self.x = x
    5 self.y = y

    en en cuenta que en el c贸digo anterior, utilizamos la palabra clave"self"para representar el objeto con el que estamos trabajando actualmente."self"debe ser el primer argumento para cualquier m茅todo dentro de una clase de Python.

    • Ahora, veamos c贸mo realmente podemos usar la clase de arriba para crear un objeto:
    python
    1p = Point(2, 8)
    2print(p.x)
    3print(p.y)
    4
    5""" Output:
    62
    78
    8"""

    Ahora, veamos un ejemplo m谩s interesante en el que, en lugar de almacenar solo las coordenadas de un punto, creamos una clase que representa un vuelo de aerol铆nea:

    python
    1class Vuelo():
    2# M茅todo para crear un vuelo nuevo y su capacidad:
    3def __init__(self, capacidad):
    4 self.capacidad = capacidad
    5 self.pasajeros = []
    6
    7 # M茅todo para agregar pasajeros al vuelo:
    8def agregar_pasajero(self, nombre):
    9 self.pasajeros.append(nombre)

    Sin embargo, esta clase tiene una falla, ya que aunque establecemos una capacidad, todav铆a podr铆amos agregar demasiados pasajeros. Vamos a mejorarla para que antes de agregar un pasajero, verifiquemos si hay espacio en el vuelo:

    python
    1class Vuelo():
    2# M茅todo para crear un vuelo nuevo y su capacidad:
    3def __init__(self, capacidad):
    4 self.capacidad = capacidad
    5 self.pasajeros = []
    6
    7# M茅todo para agregar pasajeros al vuelo:
    8def agregar_pasajero(self, nombre):
    9 if not self.asientos_disponibles():
    10 return False
    11 self.pasajeros.append(nombre)
    12 return True
    13
    14# M茅todo para devolver el n煤mero de los asientos disponibles:
    15def acientos_disponibles(self):
    16 return self.capacidad - len(self.pasajeros)

    Observa que arriba utilizamos la l铆nea"if not self.asientos_disponibles"para determinar si hay o no asientos disponibles. Esto funciona porque en Python, el n煤mero 0 puede interpretarse como False, y tambi茅n podemos usar la palabra clave"not"para indicar lo contrario de la declaraci贸n siguiente, por lo que "not True" es False y"not False" es True. Por lo tanto, si "asientos_disponibles"devuelve 0, toda la expresi贸n se evaluar谩 como True.

    Ahora, probemos la clase que hemos creado instanciando algunos objetos:

    python
    1# Crear un nuevo vuelo con capacidad para 3 pasajeros
    2vuelo = Vuelo(3)
    3
    4# Crear una lista de personas
    5personas = ["Harry", "Ron", "Hermione", "Ginny"]
    6
    7# Intentar a帽adir a cada persona de la lista al vuelo
    8for persona in personas:
    9 if vuelo.agregar_pasajero(persona):
    10 print(f"Se a帽adi贸 a {persona} al vuelo con 茅xito")
    11 else:
    12 print(f"No hay asientos disponibles para {persona}")
    13
    14""" Resultado:
    15Se a帽adi贸 a Harry al vuelo con 茅xito
    16Se a帽adi贸 a Ron al vuelo con 茅xito
    17Se a帽adi贸 a Hermione al vuelo con 茅xito
    18No hay asientos disponibles para Ginny
    19"""

    Programaci贸n Funcional

    Adem谩s de admitir la Programaci贸n Orientada a Objetos, Python tambi茅n admite el Paradigma deProgramaci贸n Funcional, en el cual las funciones se tratan como valores, al igual que cualquier otra variable.

    Decoradores

    Una cosa que es posible gracias a la programaci贸n funcional es la idea de un decorador, que es una funci贸n de orden superior que puede modificar otra funci贸n. Por ejemplo, escribamos un decorador que anuncie cu谩ndo una funci贸n est谩 a punto de comenzar y cu谩ndo termina. Luego, podemos aplicar este decorador utilizando el s铆mbolo "@".

    python
    1def anunciar(f):
    2def envoltorio():
    3 print("A punto de ejecutar la funci贸n")
    4 f()
    5 print("Terminado con la funci贸n")
    6return envoltorio
    7
    8@anunciar
    9def hola():
    10print("隆Hola, mundo!")
    11
    12hola()
    13
    14""" Resultado:
    15A punto de ejecutar la funci贸n
    16隆Hola, mundo!
    17Terminado con la funci贸n
    18"""

    Los decoradores tambi茅n se pueden usar en las clases para losgettersysetters, para las clases abstractas, usar m茅tdos est谩ticos, entre otros. Veamos un ejemplo en una clase con los decoradores de getters y setters:

    python
    1# Clase con decoradores getters y setters
    2class Persona:
    3 # Se inicializa una clase con sus atributos
    4 def __init__(self, nombre, apellido, edad):
    5 self._nombre = nombre
    6 self._apellido = apellido
    7 self._edad = edad
    8
    9 # Decorador para obtener el nombre
    10 @property
    11 def nombre(self):
    12 return self._nombre
    13
    14 # Decorador para agregar o cambiar el nombre
    15 @nombre.setter
    16 def nombre(self, nombre):
    17 self._nombre = nombre
    18
    19 @property
    20 def edad(self):
    21 return self._edad
    22
    23 @edad.setter
    24 def edad(self, edad):
    25 self._edad = edad
    26
    27 def nombre_completo(self):
    28 return f"Nombre completo: {self._nombre} {self._apellido}"

    Para probar esta clase podemos crear un archivo nuevo llamadotest_persona.pyy creamos los siguientes objetos:

    python
    1# Creamos dos objetos para pruebas
    2persona = Persona("Manuel", "Calavera", 98)
    3persona1 = Persona("Dominic", "Decocco", 38)
    4persona.nombre_completo()
    5persona1.nombre_completo()
    6"""Salida en consola
    7Nombre completo: Manuel Calavera
    8Nombre completo: Dominic Decocco
    9"""
    10# Modificar el nombre
    11persona.nombre = "Neo"
    12persona.nombre_completo()
    13"""Salida en consola
    14Nombre completo: Manuel Calavera
    15Nombre completo: Dominic Decocco
    16Nombre completo: Neo Calavera
    17"""
    18# Obtener edad
    19print(persona1.edad) # en consola: 38

    Funciones Lambda

    Las funciones lambda proporcionan otra forma de crear funciones en Python. Por ejemplo, si queremos definir la misma funci贸n cuadrado que hicimos anteriormente, podemos escribir:

    python
    1square = lambda x: x * x

    Donde la entrada est谩 a la izquierda de los dos puntos (:) y la salida est谩 a la derecha.

    Esto puede ser 煤til cuando no queremos escribir una funci贸n completamente separada para un uso 煤nico o peque帽o. Por ejemplo, si deseamos ordenar algunos objetos donde inicialmente no est谩 claro c贸mo deben ordenarse. Imagina que tenemos una lista de personas, pero con nombres y casas en lugar de solo nombres que deseamos ordenar:

    python
    1people = [
    2 {"name": "Harry", "house": "Gryffindor"},
    3 {"name": "Cho", "house": "Ravenclaw"},
    4 {"name": "Draco", "house": "Slytherin"}
    5]
    6
    7people.sort()
    8
    9print(people)

    Esto, sin embargo nos deja este error:

    Type error

    Esto sucede porque Python no sabe c贸mo comparar dos diccionarios para verificar si uno es menor que el otro.

    Podemos resolver este problema incluyendo un argumento "key" en la funci贸n de ordenamiento, que especifica qu茅 parte del diccionario deseamos utilizar para ordenar:

    python
    1people = [
    2 {"name": "Harry", "house": "Gryffindor"},
    3 {"name": "Cho", "house": "Ravenclaw"},
    4 {"name": "Draco", "house": "Slytherin"}
    5]
    6
    7def f(person):
    8 return person["name"]
    9
    10people.sort(key=f)
    11
    12print(people)
    13
    14""" Output:
    15[{'name': 'Cho', 'house': 'Ravenclaw'},
    16{'name': 'Draco', 'house': 'Slytherin'},
    17{'name': 'Harry', 'house': 'Gryffindor'}]
    18"""

    Si bien esto funciona, hemos tenido que escribir una funci贸n completa que solo estamos utilizando una vez. Podemos hacer que nuestro c贸digo sea m谩s legible utilizando una funci贸n lambda:

    python
    1people = [
    2 {"name": "Harry", "house": "Gryffindor"},
    3 {"name": "Cho", "house": "Ravenclaw"},
    4 {"name": "Draco", "house": "Slytherin"}
    5]
    6
    7people.sort(key=lambda person: person["name"])
    8
    9print(people)
    10
    11""" Output:
    12[{'name': 'Cho', 'house': 'Ravenclaw'},
    13{'name': 'Draco', 'house': 'Slytherin'},
    14{'name': 'Harry', 'house': 'Gryffindor'}]
    15"""

    Excepciones

    Durante esta conferencia, nos hemos encontrado con varias excepciones diferentes, por lo que ahora veremos algunas nuevas formas de lidiar con ellas.

    En el siguiente fragmento de c贸digo, tomaremos dos n煤meros enteros del usuario e intentaremos dividirlos:

    python
    1x = int(input("x: "))
    2y = int(input("y: "))
    3
    4result = x / y
    5
    6print(f"{x} / {y} = {result}")

    En muchos casos, el programa funciona bien:

    Divisi贸n buena

    Sin embargo, nos encontraremos con problemas cuando intentemos dividir por 0:

    Divisi贸n mala

    Podemos manejar este error desordenado utilizando elmanejo de excepciones. En el siguiente bloque de c贸digo,intentaremos dividir los dos n煤meros,exceptocuando obtengamos unZeroDivisionError :

    python
    1import sys
    2
    3x = int(input("x: "))
    4y = int(input("y: "))
    5
    6try:
    7 result = x / y
    8except ZeroDivisionError:
    9 print("Error: No se puede dividir por 0.")
    10 # Salir del programa
    11 sys.exit(1)
    12
    13print(f"{x} / {y} = {result}")

    En este caso cuando intentemos esto de nuevo:

    Divisi贸n 0

    Sin embargo, a煤n nos encontramos con un error cuando el usuario ingresa valores que no son n煤meros para x e y:

    Value error

    Podemos resolver este problema de similar manera:

    python
    1import sys
    2
    3try:
    4 x = int(input("x: "))
    5 y = int(input("y: "))
    6except ValueError:
    7 print("Error: Entrada no v谩lida.")
    8 sys.exit(1)
    9
    10try:
    11 result = x / y
    12except ZeroDivisionError:
    13 print("Error: No se puede dividir por 0.")
    14 # Salir del programa
    15 sys.exit(1)
    16
    17print(f"{x} / {y} = {result}")

    隆Eso es todo para esta clase! La pr贸xima clase, usaremos el m贸dulo Django de Python para construir algunas aplicaciones.

    Compartir

    Todos los nombres de productos, logos y marcas son propiedad de sus respectivos creadores.