Contenido del capítulo

En este capítulo, vas a aprender los conceptos básicos sobre las funciones en Python, para que puedas comenzar a utilizarlas en tus proyectos.

Duración estimada de todo el contenido:
Duración del vídeo:
Contiene 12 ejercicios. Contiene 5 vídeos.
Tabla de contenidos
Logo

    ¿Qué es una función?

    Introducción a las funciones
    Introducción a las funciones

    Las funciones son bloques de código que pueden ser llamados cada vez que los necesitemos, sin condición alguna. Esto nos permite reutilizar y organizar el código de manera muy eficiente y práctica.

    Función en inglés se dice function.

    Espacio publicitario

    Exactamente, una función es un conjunto de instrucciones que realizan una tarea específica y tienen un nombre asociado a ellas.

    Las funciones pueden recibir datos de entrada, conocidos como argumentos, y pueden devolver resultados como salida, conocidos como valores de retorno.

    Puede que hayas escuchado o leído (de hecho en este curso lo has hecho) que cierta función devuelve cierta cosa. Por ejemplo, la función int() devuelve un valor entero. Pues bien, ese “devuelve” se refiere cuando hablamos de una función al valor de retorno que pueden tener las funciones.

    Las funciones sirven para reutilizar código. Una vez has definido una función, la puedes utilizar en diferentes partes, sin necesidad de volver a escribir su código cada vez.

    Una función agrupa y reutiliza código que se puede ejecutar en cualquier momento al llamarla. Un bucle repite un bloque de código un número específico de veces o mientras se cumpla una condición, y se ejecuta en el punto donde está ubicado en el código.

    Declaración de funciones

    Para declarar funciones en Python, deberás utilizar la siguiente sintaxis:

    def nombre_funcion(parámetro_1, parámetro_2, parámetro_n...):
        # Código de la función
        return # Solo si hay que devolver valores

    Para crear una función, lo debes hacer con la palabra reservada de Python llamada def.

    Lo siguiente es darle un nombre. Con este nombre, la podremos llamar después.

    A continuación, se pondrán unos paréntesis y dos puntos que abren su bloque de código indentado.

    Entre los paréntesis de la función, se pueden colocar opcionalmente parámetros. Estos parámetros (variables) servirán para pasar argumentos en la llamada (valores). Así, la función podrá hacer cosas diferentes dependiendo de que valores le pasemos en la llamada.

    Espacio publicitario

    Ejemplo práctico de función

    Con el fin de que entiendas mejor esta explicación teórica, te voy a poner un ejemplo de una función de saludo muy simple:

    def saludar():
        nombre = input("Introduzca su nombre, por favor: ")
        print(f"¡Muy buenas, {nombre}!")

    La función ya está creada, ahora solo hace falta llamarla, si no, no se va a ejecutar nada.

    La llamada a la función se hace nombrando a la propia función, junto con unos paréntesis:

    def saludar():
        nombre = input("Introduzca su nombre, por favor: ")
        print(f"¡Muy buenas, {nombre}!")
    
    saludar() # Llamada a la función
    Resultado en la consola
    Introduzca su nombre, por favor: Enrique
    ¡Muy buenas, Enrique!

    ¿Ves lo fácil que es crear una función y utilizarla?

    La teórica de las funciones puede parecer complicada, porque tienen muchas posibilidades, pero si vamos parte por parte, se puede hacer más fácil de entender.

    Parámetros de las funciones

    Parámetros y argumentos en las funciones
    Parámetros y argumentos en las funciones

    Los parámetros son variables con las que podemos introducir datos en las funciones. Estos se van a especificar en los paréntesis de la definición de la función.

    Parámetros en inglés se dice parameters.

    Ejemplo de uso de un parámetro en una función

    Con el siguiente ejemplo lo verás más claro:

    # Se crea la función
    def saludar(nombre):
        print(f"¡Muy buenas, {nombre}!")
    
    # Llamadas a la función
    saludar("Enrique")
    saludar("Gabriela")
    saludar("Javier")
    saludar("María")
    Resultado en la consola
    ¡Muy buenas, Enrique!
    ¡Muy buenas, Gabriela!
    ¡Muy buenas, Javier!
    ¡Muy buenas, María!

    En esta función estoy creando un parámetro llamado nombre.

    Lo que se imprime en la frase del print(), es el valor pasado (proporcionado) al parámetro nombre. Para darle un valor a este parámetro (pasárselo en jerga de programación), hay que escribir un argumento en la llamada.

    Espacio publicitario

    Un argumento es simplemente un valor que se le pasa a un parámetro, al llamar a la función.

    Observa la siguiente llamada:

    saludar("Enrique")

    "Enrique" es el argumento que se le pasa al parámetro nombre de la función saludar().

    Si te fijas, en cada llamada puedes hacer que el resultado que saca la función en la consola, varíe en torno al valor que le has dado en el argumento.

    Funciones con varios parámetros

    Una función puede tener más de un parámetro. Aquí tienes un ejemplo:

    def saludar(nombre, edad):
        print(f"¡Muy buenas, {nombre}!")
        print(f"Usted tiene {edad} años.")
    
    saludar("Enrique", 32)
    Resultado en la consola
    ¡Muy buenas, Enrique!
    Usted tiene 32 años.

    Parámetros obligatorios

    Los parámetros son obligatorios. Si hay dos en una función, cuando la llames le tienes que dar dos valores exactamente. Si no, ocurre el siguiente error:

    def saludar(nombre, edad):
        print(f"¡Muy buenas, {nombre}!")
        print(f"Usted tiene {edad} años.")
    
    saludar("Enrique")
    Error en la consola
    TypeError: saludar() missing 1 required positional argument: 'edad'.
    Error de tipo: a saludar(), le falta 1 argumento posicional requerido: 'edad'.

    El error indica que está faltando uno de los argumentos. En concreto, el argumento correspondiente para el parámetro edad. Esto pasa porque solo estoy proporcionando el valor correspondiente al primer parámetro (nombre).

    El orden de los argumentos

    El tipo de argumentos que estamos utilizando se llaman argumentos posicionales. Son argumentos que se asocian posicionalmente al orden de la declaración de parámetros de la función.

    Por ejemplo, si paso un primer argumento en una llamada, este se asocia al primer parámetro. En el ejemplo anterior es el parámetro nombre.

    Al pasar el segundo argumento a la llamada, este se asocia al segundo parámetro de la función. Parámetro edad en la función del ejemplo.

    def saludar(nombre, edad):

    En resumen, si tengo esta llamada:

    saludar("Enrique", 32)

    El valor "Enrique", se asocia al parámetro nombre, porque está posicionalmente el primero y el valor 32, se asocia al parámetro edad, porque está posicionalmente el segundo.

    Espacio publicitario

    Entonces, si pasas los argumentos en un orden incorrecto, la salida que te dé la función, será incoherente.

    Por ejemplo:

    def saludar(nombre, edad):
        print(f"¡Muy buenas, {nombre}!")
        print(f"Usted tiene {edad} años.")
    
    saludar(32, "Enrique")
    Resultado en la consola
    ¡Muy buenas, 32!
    Usted tiene Enrique años.

    En este caso, no hay errores de sintaxis o de otros tipos, pero el resultado es del todo incoherente.

    Diferencia entre parámetro y argumento

    No quiero ser redundante, pero hay que tener clara la diferencia entre parámetro y argumento; es fundamental para que interpretes de forma correcta las explicaciones de este curso o de cualquier otra fuente.

    Los parámetros son las variables que declaramos en los paréntesis de la declaración de la función. Los valores que les pasamos a esos parámetros en las llamadas, son los argumentos.

    En resumen, variable = parámetro y valor = argumento.

    Si te ayuda a entenderlo mejor, puedes visualizarlo como si fuese una variable normal:

    nombre = "Enrique"

    Argumentos en inglés se dice arguments.

    Argumentos de clave

    Argumentos de clave en las funciones
    Argumentos de clave en las funciones

    Hasta ahora, hemos visto los argumentos posicionales. Sin embargo, también se pueden utilizar otros tipos de argumentos, llamados argumentos de clave.

    A continuación, tienes un pequeño ejemplo de uso:

    def saludar(nombre, edad):
        print(f"¡Muy buenas, {nombre}!")
        print(f"Usted tiene {edad} años.")
    
    saludar(nombre="Enrique", edad=32)
    Resultado en la consola
    ¡Muy buenas, Enrique!
    Usted tiene 32 años.

    Con este tipo de argumentos especificamos el argumento y lo asociamos a su parámetro en la llamada, de forma explícita.

    Espacio publicitario

    ¿Qué diferencia tiene esto? Al especificar a qué parámetro corresponde cada argumento, los podemos colocar en el orden que queramos, y el resultado sigue siendo el mismo. Ya no tenemos un orden posicional, con lo que no cometeremos ningún fallo de orden posicional al llamar a las funciones.

    En un ejemplo anterior, he creado esta llamada con argumentos posicionales, la cual daba un resultado incoherente:

    def saludar(nombre, edad):
        print(f"¡Muy buenas, {nombre}!")
        print(f"Usted tiene {edad} años.")
    
    saludar(32, "Enrique")
    Resultado en la consola
    ¡Muy buenas, 32!
    Usted tiene Enrique años.

    Si utilizo el mismo orden en la llamada, pero con argumentos de clave, no saldrá un resultado incoherente, por mucho que estos no se correspondan con el orden de los parámetros:

    def saludar(nombre, edad):
        print(f"¡Muy buenas, {nombre}!")
        print(f"Usted tiene {edad} años.")
    
    saludar(edad=32, nombre="Enrique")
    Resultado en la consola
    ¡Muy buenas, Enrique!
    Usted tiene 32 años.

    En conclusión, el orden de los argumentos de clave no afecta en nada, ya que se indican por nombre, y no por posición. Un valor concreto va asociado a una clave concreta.

    En los argumentos posicionales, solo podemos posicionar los elementos en el orden correlativo, puesto que solo tenemos valores expresados en las llamadas de las funciones.

    Devolver valores con las funciones

    Llegamos a un tema importante que puede ser algo difícil de entender al principio. Sin embargo, es realmente de lo más fácil.

    Hasta ahora, hemos estado imprimiendo los resultados de las funciones para verlos en la consola. ¿Y si necesitamos utilizar esos datos en el programa? En ese caso, utilizaremos return, que lo que hace, es devolver el resultado al propio programa para poder utilizarlo.

    En consola no verás nada, a no ser que incluyas también un print().

    Antes de empezar con el uso de return, vamos a ver una simple función con un print(), como las que has visto hasta ahora. La siguiente función imprime el resultado de una suma, con un print():

    def suma(numero1,numero2):
        print(numero1 + numero2)
    
    suma(10,50)
    Resultado en la consola
    60

    Ahora te propongo un pequeño reto. Utiliza el resultado de la llamada en alguna parte del código, fuera de la función. Intenta hacer una suma del valor resultante con otro número cualquiera. ¿Se te ocurre alguna forma de hacerlo? Así como está hecha la función, no es posible.

    Espacio publicitario

    Se podría pensar que la solución es la que viene a continuación: Almacenar dentro de la función, el resultado en una variable, para utilizarlo cuando queramos. Sin embargo, pronto vemos que nos arroja un error al intentar utilizar la variable resultado fuera de la función:

    def suma(numero1,numero2):
        resultado = numero1 + numero2
    
    suma(10,50)
    
    print(resultado)
    Error en la consola
    NameError: name 'resultado' is not defined.
    Error de nombre: el nombre 'resultado' no está definido.

    Aunque la variable resultado está definida en la propia función, fuera de ella, no la podemos utilizar, debido a algo llamado scope, o alcance en español.

    Básicamente, es que no se pueden utilizar variables de dentro de una función, fuera de ellas. Es como si estuvieran en hojas de código separadas, por expresarlo de una forma entendible en este punto de tu aprendizaje.

    Quizás se te haya pasado por la cabeza intentar almacenar la llamada de la función, en una variable. Esto tampoco funcionará:

    def suma(numero1,numero2):
        print(numero1 + numero2)
    
    resultado = suma(10,50)
    
    print(resultado)
    Resultado en la consola
    60
    None

    El primer resultado procede del propio print() de la función. Luego, el valor que se almacena en la variable resultado, es un valor nulo o vacío, representado en Python con el valor None.

    Eso significa, que de estas formas, no puedo guardar el resultado de la operación realizada por la función. Si intento operar con ese valor, no va a funcionar:

    def suma(numero1,numero2):
        print(numero1 + numero2)
    
    resultado = suma(10,50)
    
    multiplicacion = resultado * 10
    
    print(f"El resultado multiplicado por 10 es: {resultado}")
    Error en la consola
    TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
    Error de tipo de dato: Tipo de operando no compatible(s) para *: 'NoneType' e 'int'.

    El error indica que no se puede operar un valor de tipo None con un entero. Tiene sentido, ya que el valor None, es un valor “vacío”. No hay nada que operar aritméticamente con un valor así.

    El uso de return en las funciones

    El uso de return en las funciones
    El uso de return en las funciones

    Dejemos todos estos intentos inservibles, y pasemos a utilizar return.

    Con return, devolveremos el resultado de la función al propio programa, para que pueda utilizarlo en otras operaciones fuera de la propia función.

    Una de las cosas que podemos hacer, es utilizar la llamada a la función dentro de una variable, para guardar su valor de retorno. El valor de retorno, es lo que devuelve return.

    Espacio publicitario

    Para que este valor de retorno sea efectivo, debe utilizarse esta palabra de Python, dentro de las funciones.

    Veamos un ejemplo práctico. Utilizaremos la misma función de suma, solo que esta vez, hay que sustituir la función print() con la operación aritmética, por un return:

    # Se define la función
    def suma(numero1,numero2):
        return numero1 + numero2
    
    # Almacenamos el resultado del return
    resultado = suma(10,50)
    
    # Imprimimos el valor capturado en la variable
    print(resultado)
    Resultado en la consola
    60

    Perfecto, ya tenemos el resultado fuera de la función para utilizarlo cuando queramos.

    print() y return en la misma función

    Si quieres utilizar print() y return en la misma función, lo puedes hacer.

    En el siguiente ejemplo, se imprime una frase en la consola, y luego, el resultado capturado del return:

    # Se define la función
    def suma(numero1,numero2):
        print("Se va a calcular la suma...")
        return numero1 + numero2
    
    # Almacenamos el resultado del return
    resultado = suma(10,50)
    
    # Imprime el valor capturado en la variable
    print(resultado)
    Resultado en la consola
    Se va a calcular la suma...
    60

    ¡Importante! return debe ser siempre la última instrucción dentro del bloque de código de la función. Esto es debido, a que la ejecución de return finaliza la ejecución de la función.

    En el siguiente ejemplo, return hace que el print(), no se llegue a ejecutar nunca, puesto que está escrito antes:

    def suma(numero1,numero2):
        return numero1 + numero2
        # No se ejecuta a partir de aquí
        print("Se va a calcular la suma.")
    
    suma(10,50)

    La parte subrayada es la que se excluye, no es alcanzable.

    Podrías ver return como el break de los bucles, ya que son muy similares. Ambos elementos finalizan la ejecución del bloque de código, pero return, además devuelve un valor al programa.

    Ten en cuenta estos dos datos importantes:

    break solo puede existir dentro de un bucle. Aunque luego lo pongas dentro de un condicional, pero este sigue estando dentro de un bucle. Por ejemplo, no puedes ponerlo en un condicional que no está dentro de uno.

    return, en cambio, sirve solo para las funciones.

    ¿Qué son las funciones predefinidas?

    Las funciones predefinidas
    Las funciones predefinidas

    Las funciones predefinidas son una serie de funciones que vienen integradas con el lenguaje Python. Estas nos sirven para hacer muchas de las típicas tareas que necesitaremos al programar.

    Funciones predefinidas se traduce al inglés, en el contexto de Python, como built-in functions.

    Espacio publicitario

    Algunas de las que has visto en este curso son estas:

    • print()
    • input()
    • int()
    • float()
    • str()
    • range()

    Estas funciones no son difíciles de aprender, hay algunas para usos más avanzados, pero todo es encontrar los momentos para ir aprendiendo y utilizando nuevas funciones.

    Esta página tienes una referencia completa y oficial, pero es bastante técnica para el momento en el que estás en tu aprendizaje:

    Referencia oficial de funciones predefinidas de Python.

    No obstante, en un futuro próximo, esta referencia te será de gran utilidad.

    Además, en esta plataforma, entre los diferentes cursos, explicaré hasta la última con todo lujo de detalles.

    A continuación, te dejo una tabla con las funciones predefinidas que tiene Python. No tienes que saber utilizarlas todas aún, pero tenlas a mano, para cada vez que las necesites consultar.

    A
    abs()
    aiter()
    all()
    anext()
    any()
    ascii()
    B
    bin()
    bool()
    breakpoint()
    bytearray()
    bytes()
    C
    callable()
    chr()
    classmethod()
    compile()
    complex()
    D
    delattr()
    dict()
    dir()
    divmod()
    E
    enumerate()
    eval()
    exec()
    F
    filter()
    float()
    format()
    frozenset()
    G
    getattr()
    globals()
    H
    hasattr()
    hash()
    help()
    hex()
    I
    id()
    input()
    int()
    isinstance()
    issubclass()
    iter()
    L
    len()
    list()
    locals()
    M
    map()
    max()
    memoryview()
    min()
    N
    next()
    O
    object()
    oct()
    open()
    ord()
    P
    pow()
    print()
    property()
    R
    range()
    repr()
    reversed()
    round()
    S
    set()
    setattr()
    slice()
    sorted()
    staticmethod()
    str()
    sum()
    super()
    T
    tuple()
    type()
    V
    vars()
    Z
    zip()
    _
    __import__()

    Espacio publicitario



    Espacio publicitario


    Ejercicios de Python para resolver

    89. La siguiente función no está sacando nada en la consola. ¿Qué puede estar pasando?

    def suma():
        operacion = 10 + 34
        print(f"El resultado es: {operacion}.")

    Sencillamente, le faltaba la llamada:

    def suma():
        operacion = 10 + 34
        print(f"El resultado es: {operacion}.")
    
    suma()
    Resultado en la consola
    El resultado es: 44.

    90. En el siguiente código, dime cuáles son los argumentos y cuáles son los parámetros.

    def suma(a, b):
        suma = a + b
        print(f"La suma de {a} y {b} es {suma}.")
    
    suma(10, 78)

    De la siguiente función, los parámetros son a y b.

    Los argumentos están en la llamada a la función. Son 10 y 78.

    91. Crea una función que determine mediante dos valores numéricos pasados, si uno es mayor que otro, menor, o también si es igual.

    Necesitas una función con dos parámetros. Dentro de ella, un condicional podría solucionar este problema de lógica.

    Mediante dos argumentos en la llamada, podemos evaluar si un número es mayor que el otro, si es igual, o si es menor que el otro:

    def comparador(a, b):
        if a > b:
            print(f"El número {a} es mayor que {b}.")
        elif a == b:
            print(f"El número {a} es igual que {b}.")
        else:
            print(f"El número {a} es menor que {b}.")
    
    comparador(10, 20)
    comparador(10, 10)
    comparador(50, 30)
    Resultado en la consola
    El número 10 es menor que 20.
    El número 10 es igual que 10.
    El número 50 es mayor que 30.

    La función acepta dos argumentos. El primero (a), se va a comparar con el segundo (b).

    Con un condicional if, se evalúa si el primer número pasado es mayor que el segundo.

    Con la parte elif, se evalúa si el valor es igual que el otro.

    Finalmente, con la parte del else, contemplamos cualquier otra cosa diferente. En este caso, si no es mayor, y no es igual, será inequívocamente menor.

    En las llamadas he probado las tres posibilidades.

    92. El siguiente código tiene algún problema. ¿Sabrías identificarlo y solucionarlo?

    def cuadrado(numero):
        print(numero * numero)
    
    cuadrado(2, 2)

    El problema está en el número de argumentos pasados en la llamada. La función cuadrado() solo tiene un parámetro, por lo que no es posible pasarle dos argumentos.

    Se soluciona así:

    def cuadrado(numero):
        print(numero * numero)
    
    cuadrado(2)
    Resultado en la consola
    4

    93. En la siguiente llamada, no se está mostrando nada en la consola. ¿Sabrías indicar por qué?

    def saludar():
        return "¡Hola! ¿Cómo estás?"
    
    saludar()

    El “problema” de que no se esté imprimiendo nada en la consola, es que no hay un print(). Esta función tiene solo un return.

    Entonces, realmente no hay ningún problema, es solo que la función no está diseñada para imprimir nada directamente.

    94. Cambia solo el código de la segunda línea (la del return), de la función anterior, para que el mensaje salga en la consola.

    Si quisieras imprimir esa frase, deberías cambiarlo por un print():

    def saludar():
        print("¡Hola! ¿Cómo estás?")
    
    saludar()
    Resultado en la consola
    ¡Hola! ¿Cómo estás?

    Espacio publicitario

    95. Utiliza el código del ejercicio 93.

    Captura el valor de retorno. Con ese valor de retorno, quiero que se imprima el saludo, sin tocar nada dentro de la función.

    Para hacer esto, puedes capturar el valor de retorno con una variable, que posteriormente se imprime con un print():

    def saludar():
        return "¡Hola! ¿Cómo estás?"
    
    saludo = saludar()
    
    print(saludo)
    Resultado en la consola
    ¡Hola! ¿Cómo estás?

    Hacer esto último es algo bastante absurdo y complica un código que debería ser más simple. Es solo para que veas como funciona return, no lo tomes como un buen ejemplo, ya que en este caso concreto, es más práctico que la función imprima el valor por ella misma.

    El uso de return es para los casos en los que necesites indiscutiblemente el valor de retorno. Si solo quieres imprimir algo, normalmente será mejor utilizar print() en su lugar.

    96. El siguiente código utiliza la constante PI, para calcular el área de un círculo mediante el valor en cm, que le pase un usuario en la consola:

    # Definimos la constante pi
    PI = 3.14159
    
    # Solicitamos al usuario el radio del círculo
    radio = float(input("Ingrese el radio del círculo: "))
    
    # Calculamos el área
    area = PI * radio ** 2
    
    # Imprimimos el resultado
    print(f"El área del círculo es: {area} cm cuadrados.")

    Analiza todo esto con calma, y construye una función con todo dentro. Fuera de la función, no habrá nada más que la llamada.

    Para construirla, sigue los siguientes pasos:

    1. Define la función con un nombre como area_circulo().
    2. Define y asigna la constante PI, con el valor que tiene en el código proporcionado.
    3. Solicita el valor de radio en una variable, con un input() (variable radio).
    4. Haz el cálculo del área en otra variable (igual que en el código proporcionado (variable area).
    5. Haz que la propia función imprima el resultado en la consola.
    6. ¡Recuerda! Fuera de la función, solo habrá una llamada.
    Hacer esto es más sencillo de lo que parece, el código proporcionado será exactamente el mismo, solo que estará dentro de una función, y se ejecutará con una llamada.

    En este ejercicio solo tenías que crear la función, añadir todo el código dentro, y finalmente, crear una llamada:

    def area_circulo():
        # Definimos la constante pi
        PI = 3.14159
    
        # Solicitamos al usuario el radio del círculo
        radio = float(input("Ingrese el radio del círculo: "))
    
        # Calculamos el área
        area = PI * radio ** 2
    
        # Imprimimos el resultado
        print("El área del círculo es:", area)
    
    # Llamada a la función
    area_circulo()
    Resultado en la consola
    Ingrese el radio del círculo: 2
    El área del círculo es: 12.56636

    En la consola he puesto un 2, pero puedes calcular de cualquier tamaño, incluso con valores decimales.

    97. Utiliza el código del ejercicio anterior y en lugar de imprimir el valor del resultado en la consola (elimina el print() de la función), quiero que lo almacenes en dos variables externas a la función (haz dos llamadas y captura sus valores de retorno). Mediante estos valores capturados, quiero que hagas una operación de suma.

    En la consola, solo se verá esta frase:

    La suma de las dos áreas de los círculos, es x.

    Se sustituye x por el valor que salga, dependiendo de los valores dados en las llamadas.

    En lugar de tener el print() en la función, se ha hecho más práctica, y ahora es capaz de devolver los resultados, gracias al uso de return. Así se han podido almacenar en variables y operar con ellos.

    def area_circulo():
        # Definimos la constante pi
        PI = 3.14159
    
        # Solicitamos al usuario el radio del círculo
        radio = float(input("Ingrese el radio del círculo: "))
    
        # Calculamos el área
        area = PI * radio ** 2
    
        # Devuelve el resultado
        return area
    
    # Llamadas a las funciones
    area_1 = area_circulo()
    area_2= area_circulo()
    
    # Se suman los valores de retorno de las llamadas
    suma_areas = area_1 + area_2
    
    # Se imprime el resultado final
    print(f"La suma de las dos áreas de los círculos, es {suma_areas}.")
    Resultado en la consola
    Ingrese el radio del círculo: 3
    Ingrese el radio del círculo: 7
    La suma de las dos áreas de los círculos, es 182.21222.

    98. La función predefinida len(), permite, entre otros usos, contar la longitud de caracteres que tiene una cadena de caracteres.

    Para aplicar su uso, solo tienes que envolver un str entre sus paréntesis, es decir, pasarlo como argumento.

    Modifica el siguiente código, para que se cuente la longitud de caracteres que tiene la frase:

    frase = "Es un buen día para estudiar Python."
    
    cuenta_caracteres = # Aplica el uso de len() aquí
    
    print(f"La frase tiene {cuenta_caracteres} caracteres.")

    Tan solo tenías que pasar el valor de la variable frase a la llamada de la función len().

    frase = "Es un buen día para estudiar Python."
    
    cuenta_caracteres = len(frase)
    
    print(f"La frase tiene {cuenta_caracteres} caracteres.")
    Resultado en la consola
    La frase tiene 36 caracteres.

    99. Modifica el código anterior, para que en lugar de contar siempre los caracteres de la misma frase, lo haga de un texto cualquiera, de una entrada en la consola.

    Es tan simple como cambiar la cadena literal por un input():

    frase = input("Introduzca algo de texto y cuento los caracteres: ")
    
    cuenta_caracteres = len(frase)
    
    print(f"La frase tiene {cuenta_caracteres} caracteres.")
    Resultado en la consola
    Introduzca algo de texto y cuento los caracteres: Programar requiere de mucha práctica y paciencia.
    La frase tiene 49 caracteres.

    100. Las funciones predefinidas min() y max(), son capaces de devolver el número menor y el mayor, respectivamente, de una lista como la del siguiente código. Intenta aplicar su uso en cada una de las variables:

    numeros = [5, 12, 34, 7, 19, 25, 8, 3, 16, 22, 100]
    
    numero_mayor = # Función max() aquí
    numero_menor = # Función min() aquí
    
    print(f"El número mayor en la lista es: {numero_mayor}.")
    print(f"El número menor en la lista es: {numero_menor}.")

    Estas funciones son muy fáciles de usar. Solo le das de argumento el elemento que quieras tratar:

    numeros = [5, 12, 34, 7, 19, 25, 8, 3, 16, 22, 100]
    
    # Se obtiene el número mayor de la lista de numeros
    numero_mayor = max(numeros)
    
    # Se obtiene el número menor de la lista de numeros
    numero_menor = min(numeros)
    
    print(f"El número mayor en la lista es: {numero_mayor}.")
    print(f"El número menor en la lista es: {numero_menor}.")
    Resultado en la consola
    El número mayor en la lista es: 100.
    El número menor en la lista es: 3.


    Espacio publicitario