Funciones

# Definimos una función llamada "saludo".
# Una función es un bloque de código que podemos reutilizar cuantas veces queramos.
# La palabra "def" le dice a Python que vamos a definir (crear) una función.
# Los paréntesis () vacíos significan que esta función no necesita ningún dato de entrada.
# Los dos puntos ":" al final son obligatorios — indican que empieza el cuerpo de la función.
def saludo():
    # El código dentro de la función va con sangría (4 espacios).
    # Esto le dice a Python que esta línea pertenece a la función.
    print("Hola")
 
# Aquí "llamamos" a la función por su nombre seguido de ().
# Sin esta línea, la función existe pero nunca se ejecuta.
# Resultado: imprime "Hola"
saludo()
 
# Podemos llamarla tantas veces como queramos sin repetir el código.
# Resultado: imprime "Hola" otra vez
saludo()


# Ahora la función recibe un "parámetro" llamado "nombre".
# Un parámetro es como una variable especial que recibe un valor cuando llamamos la función.
# La "f" antes de las comillas indica un "f-string": permite meter variables dentro del texto
# usando llaves {}. Aquí {nombre} se sustituirá por el valor recibido.
def saludo_personal(nombre):
    print(f"Hola {nombre} ¿Qué tal estás?")
 
# Al llamar la función, le pasamos el valor "Ana".
# Dentro de la función, "nombre" valdrá "Ana". Resultado: "Hola Ana ¿Qué tal estás?"
saludo_personal("Ana")
 
# La misma función, pero ahora "nombre" valdrá "Pep". Resultado: "Hola Pep ¿Qué tal estás?"
saludo_personal("Pep")

# Esta función recibe DOS parámetros: "nombre" y "edad".
# Dentro usamos un "if/else" para tomar decisiones según el valor de "edad".
def portero_discoteca(nombre, edad):
    # Si "edad" es mayor o igual a 18, entra.
    if edad >= 18:
        print(f"Adelante, {nombre}, disfruta de la fiesta")
    # En cualquier otro caso (edad < 18), no entra.
    else:
        print(f"Lo siento, {nombre}, no puedes entrar")
 
# Ana tiene exactamente 18: entra (>= incluye el 18).
portero_discoteca("Ana", 18)
# Pep tiene 16: no entra.
portero_discoteca("Pep", 16)
# José Luis tiene 116: entra igualmente, porque 116 >= 18.
portero_discoteca("José Luis", 116)
# El parámetro "nombres" recibirá una lista (varios valores entre corchetes []).
# El bucle "for" recorre la lista uno a uno, guardando cada elemento en "nombre".
def saludo_multiple(nombres):
    for nombre in nombres:
        print(f"Hola, {nombre}")
 
# Pasamos la lista directamente. Imprime: "Hola, Ana", "Hola, Pep", "Hola, Eva".
saludo_multiple(["Ana", "Pep", "Eva"])
 
# También podemos guardar la lista en una variable primero y luego pasarla.
# Resultado idéntico: la función no sabe si recibe una lista directa o una variable.
alumnos = ["Iu", "Rosa", "Juan"]
saludo_multiple(alumnos)
 
# La función no sabe que esto son flores, solo ve una lista de textos.
# Resultado: "Hola, Rosa", "Hola, Jazmín", "Hola, Crisantemo".
flores = ["Rosa", "Jazmín", "Crisantemo"]
saludo_multiple(flores)
 
# Una lista con un solo elemento sigue siendo una lista.
# Resultado: "Hola, pEPE" (respeta mayúsculas y minúsculas tal cual).
saludo_multiple(["pEPE"])
# Esta función dibuja un "arbolito" de asteriscos.
# Usamos un bucle "while" (mientras) en lugar de "for".
# "while" repite el bloque MIENTRAS la condición sea verdadera.
def arbolito(tamanyo):
    # "contador" empieza en 0. Es la variable que controla cuántas veces repetimos.
    contador = 0
    # El bucle continúa mientras "contador" sea menor o igual que "tamanyo".
    while contador <= tamanyo:
        # "*" * contador repite el carácter "*" tantas veces como indica "contador".
        # Con contador=0 imprime "" (nada), con 1 imprime "*", con 2 "**", etc.
        print("*" * contador)
        # ¡Muy importante! Aumentamos el contador en 1 en cada vuelta.
        # Sin esta línea, el bucle nunca terminaría (bucle infinito).
        contador += 1
 
# Imprime líneas con 0, 1, 2, 3, 4 y 5 asteriscos.
arbolito(5)
# Imprime líneas con 0, 1, 2 y 3 asteriscos.
arbolito(3)
# Hasta ahora las funciones solo imprimían. Esta función DEVUELVE un resultado con "return".
# El valor devuelto puede guardarse en una variable o usarse en una expresión.
def doble(numero):
    return numero * 2
 
# La función calcula 5*2=10 y lo devuelve... pero nadie lo recoge. No pasa nada visible.
doble(5)  # Esto no hace nada
 
# Ahora sí: pasamos el valor devuelto directamente a print(). Imprime: 10.
print(doble(5))  # Esto imprime 10
 
# También podemos guardar el resultado en una variable para usarlo más tarde.
resultado = doble(5)  # resultado vale 10
 
# Esta versión usa print() dentro en lugar de return.
# Imprime el resultado, pero NO lo devuelve: no podemos guardarlo en una variable.
def doble_sin_return(numero):
    print(numero * 2)
 
# Imprime 10, pero no podemos hacer resultado = doble_sin_return(5) de forma útil.
doble_sin_return(5)
# Esta función comprueba si un número es par y devuelve True (verdadero) o False (falso).
# El operador "%" calcula el RESTO de una división. Si numero % 2 == 0, es divisible entre 2.
def es_par(numero):
    if numero % 2 == 0:  # 14 % 2 = 0 → es par
        return True
    else:
        return False
 
# Guardamos el número en una variable para mayor claridad.
numero = 14
# "if es_par(numero)" equivale a "if True" cuando el número es par.
# La función devuelve True/False directamente, así que podemos usarla en el if.
if es_par(numero):
    print("Es par")
else:
    print("Es impar")

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos