Ejercicio 06 — Implementa la clase Contador con metodos sumar(n), restar(n), reset()…

Dificultad: rojo · Módulo 08 (Clases y archivos)

Enunciado

Implementa la clase Contador con metodos sumar(n), restar(n), reset() y valor().

Cómo se resuelve

Un contador es el ejemplo clásico de objeto con estado: guarda un valor que va cambiando, y los métodos son las únicas puertas para tocarlo.

  1. class Contador: define el molde. def __init__(self, valor_inicial=0): es el constructor con un valor por defecto: el =0 permite crear Contador() sin argumentos, o Contador(10) para arrancar en 10.
  2. self._valor = valor_inicial guarda el estado dentro del objeto. El guion bajo inicial (_valor) es una convención que avisa “esto es interno, no lo toques desde fuera”: la idea es que se modifique solo a través de los métodos, no accediendo a c._valor directamente.
  3. sumar, restar y reset son métodos que modifican ese estado: self._valor += n, self._valor -= n y self._valor = 0. No devuelven nada; su trabajo es cambiar el atributo del objeto. Cada uno recibe self para saber sobre qué contador actúa.
  4. valor(self) es distinto: no cambia nada, return self._valor devuelve el estado actual para poder consultarlo. Por eso en el programa principal escribes c.valor() con paréntesis: es una llamada a método, no un atributo suelto.
  5. En c.sumar(5), el objeto c entra como self automáticamente y 5 es la n. Cada operación deja el estado actualizado para la siguiente, y reset() lo devuelve a 0.

Trampa habitual: confundir c.valor con c.valor(). Sin paréntesis obtienes el método en sí (el objeto función), no el número; hay que llamarlo con () para que se ejecute y devuelva el valor.

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 08: Clases, dataclasses y archivos
# Ejercicio 06 — PRACTICA (rellena los TODO)
# Enunciado: Implementa la clase Contador con metodos sumar(n), restar(n), reset() y valor().
# Dificultad: rojo
# Ejecutar: python3 ej06_practica.py
 
 
class Contador:
    """Contador numerico con operaciones basicas."""
 
    def __init__(self, valor_inicial=0):
        # TODO: guarda valor_inicial en un atributo interno (convencion: _valor)
        pass
 
    def sumar(self, n):
        # TODO: incrementa self._valor en n
        pass
 
    def restar(self, n):
        # TODO: decrementa self._valor en n
        pass
 
    def reset(self):
        # TODO: reinicia self._valor a 0
        pass
 
    def valor(self):
        # TODO: devuelve el valor actual de self._valor
        pass
 
 
# --- Programa principal ---
c = Contador()
# TODO: imprime el valor inicial
# Salida esperada: Valor inicial: 0
 
# TODO: llama a c.sumar(5) e imprime el resultado
# Salida esperada: Tras sumar 5: 5
 
# TODO: llama a c.sumar(3) e imprime el resultado
# Salida esperada: Tras sumar 3: 8
 
# TODO: llama a c.restar(2) e imprime el resultado
# Salida esperada: Tras restar 2: 6
 
# TODO: llama a c.reset() e imprime el resultado
# Salida esperada: Tras reset: 0

Solución — cópiala y ejecútala

# Curso de Python — Modulo 08: Clases, dataclasses y archivos
# Ejercicio 06 — MODELO (resuelto)
# Enunciado: Implementa la clase Contador con metodos sumar(n), restar(n), reset() y valor().
# Dificultad: rojo
# Ejecutar: python3 ej06_modelo.py
 
 
class Contador:
    """Contador numerico con operaciones basicas."""
 
    def __init__(self, valor_inicial=0):
        # El estado interno se guarda en un atributo privado por convencion (_valor)
        self._valor = valor_inicial
 
    def sumar(self, n):
        """Incrementa el contador en n."""
        self._valor += n
 
    def restar(self, n):
        """Decrementa el contador en n."""
        self._valor -= n
 
    def reset(self):
        """Reinicia el contador a 0."""
        self._valor = 0
 
    def valor(self):
        """Devuelve el valor actual del contador."""
        return self._valor
 
 
# --- Programa principal ---
c = Contador()
print(f"Valor inicial: {c.valor()}")
 
c.sumar(5)
print(f"Tras sumar 5: {c.valor()}")
 
c.sumar(3)
print(f"Tras sumar 3: {c.valor()}")
 
c.restar(2)
print(f"Tras restar 2: {c.valor()}")
 
c.reset()
print(f"Tras reset: {c.valor()}")

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