Recapitulação - Calculadora Simples
Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 8 de 64.
Desafio
MédioSua classe Calculator em calculator.py deve:
- Ter um construtor que inicializa um atributo
resultcomo 0 - Incluir métodos para
add,subtract,multiplyedivideque cada um:- Receba um número como argumento
- Realize a operação entre o
resultatual e o número - Atualize o atributo
result - Retorne o novo resultado
- Incluir um método
clearque redefine oresultpara 0 - Incluir um método
get_resultque retorna o resultado atual - Para o método
divide, você deve lidar com a divisão por zero:- Verificando se o número fornecido é igual a 0
- Se for zero, imprima exatamente: "Error: Division by zero"
- Deixe o atributo
resultinalterado neste caso - Retorne o valor de
resultinalterado
O arquivo driver.py importará sua classe Calculator e a testará com um código semelhante 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 0Siga os comentários TODO no arquivo calculator.py para implementar toda a funcionalidade necessária.
Folha de consulta
Crie uma classe Calculator com operações 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.resultExemplo de uso:
calc = Calculator()
calc.add(5) # o resultado torna-se 5
calc.multiply(3) # o resultado torna-se 15
calc.divide(0) # imprime erro, resultado inalteradoExperimente você mesmo
from calculator import Calculator
# Manipulador de casos de teste
test_case = input()
if test_case == "constructor_test":
# Testa a criação da calculadora e o estado inicial
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# Testa a funcionalidade de adição
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":
# Testa a funcionalidade de subtração
calc = Calculator()
calc.add(20) # Começa com 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":
# Testa a funcionalidade de multiplicação
calc = Calculator()
calc.add(5) # Começa com 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":
# Testa a funcionalidade de divisão
calc = Calculator()
calc.add(100) # Começa com 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":
# Testa o tratamento de erro de divisão por zero
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # Deve imprimir uma mensagem de erro
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# Testa a funcionalidade de limpar
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":
# Testa todas as operações em sequência
calc = Calculator()
# Realiza uma série de operações
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()}")
# Testa o tratamento de erros
calc.divide(0) # Deve imprimir erro
print(f"After division by zero attempt: {calc.get_result()}")
# Limpa e começa do zero
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
Todas as lições de Object Oriented Programming
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário