Ejercicio 04 — Escribe potencia(base, exp=2) usando un bucle

Dificultad: amarillo · Módulo 04 (Funciones)

Enunciado

Escribe potencia(base, exp=2) usando un bucle (sin **). Pide base y exponente al usuario.

Cómo se resuelve

Un parámetro con valor por defecto hace que un argumento sea opcional: si no lo pasas, la función usa el valor que fijaste al definirla.

  1. def potencia(base, exp=2):exp=2 es el valor por defecto. Puedes llamar potencia(3) (y exp valdrá 2) o potencia(3, 4) (y exp valdrá 4). base no tiene defecto, así que es obligatorio. Regla de Python: los parámetros con defecto van siempre después de los obligatorios.
  2. resultado = 1 y for _ in range(exp): resultado *= base — multiplicamos base por sí misma exp veces. El acumulador arranca en 1 (neutro del producto), y así exp = 0 devuelve 1 correctamente. Usamos _ como nombre de la variable del bucle porque no la necesitamos: solo cuenta cuántas vueltas dar.
  3. El enunciado prohíbe **: la idea es reconstruir la potencia con un bucle en vez de con el operador nativo.
  4. if entrada_exp == "": — este bloque, ya fuera de la función, decide si el usuario quiere el defecto. Si pulsa Enter sin escribir, input devuelve la cadena vacía "" y llamamos potencia(base) sin segundo argumento; si escribe algo, lo convertimos con int() y lo pasamos.

Trampa habitual: definir el defecto con un valor mutable, como def f(lista=[]), se comporta de forma sorprendente en Python porque el defecto se crea una sola vez y se comparte entre llamadas. Con un número como exp=2 no hay peligro, pero conviene saberlo pronto: los defectos mutables (listas, diccionarios) son una fuente clásica de bugs.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

# Curso de Python — Modulo 04: Funciones
# Ejercicio 04 — PRACTICA (rellena los TODO)
# Enunciado: Escribe potencia(base, exp=2) usando un bucle (sin **). Pide base y exponente al usuario.
# Dificultad: amarillo
# Ejecutar: python3 ej04_practica.py
 
 
def potencia(base, exp=2):
    """Calcula base elevado a exp usando un bucle. Por defecto exp=2."""
    # TODO: inicializa resultado a 1
    # TODO: repite el bucle exp veces (range(exp)) multiplicando resultado por base en cada iteracion
    # TODO: devuelve resultado
    pass
 
 
# TODO: pide la base con int(input(...))
base = None  # reemplaza None
 
# TODO: pide el exponente con input(); si el usuario pulsa Enter sin escribir nada (cadena vacia ""),
#       llama a potencia(base) sin el segundo argumento (usa el default)
#       si no, convierte a int y llama a potencia(base, exp)
entrada_exp = None  # reemplaza None: input("Introduce el exponente (Enter para usar 2): ")
 
# TODO: imprime con f-string: "<base> ^ <exp> = <resultado>"

Solución — cópiala y ejecútala

# Curso de Python — Modulo 04: Funciones
# Ejercicio 04 — MODELO (resuelto)
# Enunciado: Escribe potencia(base, exp=2) usando un bucle (sin **). Pide base y exponente al usuario.
# Dificultad: amarillo
# Ejecutar: python3 ej04_modelo.py
 
 
def potencia(base, exp=2):
    """Calcula base elevado a exp usando un bucle. Por defecto exp=2."""
    resultado = 1
    for _ in range(exp):
        resultado *= base
    return resultado
 
 
base = int(input("Introduce la base: "))
entrada_exp = input("Introduce el exponente (Enter para usar 2): ")
 
# Si el usuario pulsa Enter sin escribir nada, usamos el valor por defecto
if entrada_exp == "":
    print(f"{base} ^ 2 = {potencia(base)}")
else:
    exp = int(entrada_exp)
    print(f"{base} ^ {exp} = {potencia(base, exp)}")

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones