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.
class Contador:define el molde.def __init__(self, valor_inicial=0):es el constructor con un valor por defecto: el=0permite crearContador()sin argumentos, oContador(10)para arrancar en 10.self._valor = valor_inicialguarda 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 ac._valordirectamente.sumar,restaryresetson métodos que modifican ese estado:self._valor += n,self._valor -= nyself._valor = 0. No devuelven nada; su trabajo es cambiar el atributo del objeto. Cada uno recibeselfpara saber sobre qué contador actúa.valor(self)es distinto: no cambia nada,return self._valordevuelve el estado actual para poder consultarlo. Por eso en el programa principal escribesc.valor()con paréntesis: es una llamada a método, no un atributo suelto.- En
c.sumar(5), el objetocentra comoselfautomáticamente y5es lan. Cada operación deja el estado actualizado para la siguiente, yreset()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: 0Solució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.