Resumen - Calculadora simple
Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 8 de 64.
Desafío
IntermedioTu clase Calculator en calculator.py debe:
- Tener un constructor que inicialice un atributo
resulta 0 - Incluir métodos para
add,subtract,multiplyydivideque cada uno:- Tome un número como argumento
- Realice la operación entre el
resultactual y el número - Actualice el atributo
result - Devuelva el nuevo resultado
- Incluir un método
clearque restablezca elresulta 0 - Incluir un método
get_resultque devuelva el resultado actual - Para el método
divide, debes manejar la división por cero:- Comprobando si el número proporcionado es igual a 0
- Si es cero, imprimir exactamente: "Error: Division by zero"
- Dejar el atributo
resultsin cambios en este caso - Devolver el valor de
resultsin cambios
El archivo driver.py importará tu clase Calculator y la probará con un código similar a este:
from calculator import Calculator
calc = Calculator()
calc.add(5) # result becomes 5
calc.multiply(3) # result becomes 15
calc.subtract(2) # result becomes 13
calc.divide(0) # prints "Error: Division by zero", result remains 13
calc.divide(2) # result becomes 6.5
calc.clear() # result becomes 0Sigue los comentarios TODO en el archivo calculator.py para implementar toda la funcionalidad requerida.
Hoja de referencia
Crea una clase Calculator con operaciones aritméticas básicas:
class Calculator:
def __init__(self):
self.result = 0
def add(self, number):
self.result += number
return self.result
def subtract(self, number):
self.result -= number
return self.result
def multiply(self, number):
self.result *= number
return self.result
def divide(self, number):
if number == 0:
print("Error: Division by zero")
return self.result
self.result /= number
return self.result
def clear(self):
self.result = 0
def get_result(self):
return self.resultEjemplo de uso:
calc = Calculator()
calc.add(5) # el resultado pasa a ser 5
calc.multiply(3) # el resultado pasa a ser 15
calc.divide(0) # imprime error, el resultado no cambiaPruébalo tú mismo
from calculator import Calculator
# Manejador de casos de prueba
test_case = input()
if test_case == "constructor_test":
# Prueba la creación de la calculadora y el estado inicial
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# Prueba la funcionalidad de suma
calc = Calculator()
result1 = calc.add(10)
print(f"After adding 10: {result1}")
result2 = calc.add(5)
print(f"After adding 5: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "subtraction_test":
# Prueba la funcionalidad de resta
calc = Calculator()
calc.add(20) # Comienza con 20
result1 = calc.subtract(8)
print(f"After subtracting 8 from 20: {result1}")
result2 = calc.subtract(2)
print(f"After subtracting 2: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "multiplication_test":
# Prueba la funcionalidad de multiplicación
calc = Calculator()
calc.add(5) # Comienza con 5
result1 = calc.multiply(4)
print(f"After multiplying by 4: {result1}")
result2 = calc.multiply(2)
print(f"After multiplying by 2: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "division_test":
# Prueba la funcionalidad de división
calc = Calculator()
calc.add(100) # Comienza con 100
result1 = calc.divide(4)
print(f"After dividing by 4: {result1}")
result2 = calc.divide(5)
print(f"After dividing by 5: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "division_by_zero_test":
# Prueba el manejo de errores de división por cero
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # Debería imprimir un mensaje de error
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# Prueba la funcionalidad de limpieza (clear)
calc = Calculator()
calc.add(25)
calc.multiply(3)
print(f"Before clear: {calc.get_result()}")
result = calc.clear()
print(f"After clear: {result}")
print(f"Current result: {calc.get_result()}")
elif test_case == "comprehensive_test":
# Prueba todas las operaciones en secuencia
calc = Calculator()
# Realiza una serie de operaciones
calc.add(10) # result = 10
calc.multiply(3) # result = 30
calc.subtract(5) # result = 25
calc.divide(5) # result = 5
print(f"After sequence of operations: {calc.get_result()}")
# Prueba el manejo de errores
calc.divide(0) # Debería imprimir un error
print(f"After division by zero attempt: {calc.get_result()}")
# Limpiar y empezar de nuevo
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
Todas las lecciones de Object Oriented Programming
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - Jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso - Lista personalizada10Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancarias