¿Qué es una función?
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
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
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")
¡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)
¡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")
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")
¡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
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)
¡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")
¡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")
¡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)
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)
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)
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}")
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
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)
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)
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 dereturn
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 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()
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)
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)
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()
¡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)
¡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.
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:
- Define la función con un nombre como
area_circulo()
.- Define y asigna la constante
PI
, con el valor que tiene en el código proporcionado.- Solicita el valor de radio en una variable, con un
input()
(variableradio
).- Haz el cálculo del área en otra variable (igual que en el código proporcionado (variable
area
).- Haz que la propia función imprima el resultado en la consola.
- ¡Recuerda! Fuera de la función, solo habrá 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()
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}.")
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.")
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.")
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}.")
El número mayor en la lista es: 100.
El número menor en la lista es: 3.
Espacio publicitario