Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions Resposta_10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Relatório dos 7 Erros - Exercício 10
Erro 1: Classe com nome em minúscula
Problema: class pessoa: deveria ser class Pessoa:

Solução: Renomear para class Pessoa:
Conceito POO: Convenção de nomenclatura - classes em Python devem usar PascalCase
Erro 2: Atribuição sem self
Problema: nome = nome ao invés de self.nome = nome

Solução: Alterar para self.nome = nome
Conceito POO: Encapsulamento - o atributo não era armazenado na instância
Erro 3: Atributo privado sem inicialização adequada
Problema: self.__cpf = None sem parâmetro no __init__

Solução: Adicionar parâmetro cpf=None na assinatura do método
Conceito POO: Encapsulamento - atributos privados devem ser inicializados corretamente
Erro 4: Método sem parâmetro self
Problema: def apresentar(): está faltando self

Solução: Alterar para def apresentar(self):
Conceito POO: Métodos de instância sempre precisam do parâmetro self
Erro 5: Não usar super() na herança
Problema: Estudante não chama super().__init__(), duplicando código

Solução: Usar super().__init__(nome, idade, cpf=None) para herdar inicialização da classe pai
Conceito POO: Herança - reutilizar código da classe pai evita duplicação
Erro 6: Divisão por zero
Problema: calcular_media() divide por zero quando self.notas está vazio

Solução: Adicionar verificação if not self.notas: return 0
Conceito POO: Tratamento de exceções e validação de dados
Erro 7: Teste com estudante sem notas
Problema: print(estudante.calcular_media()) sem adicionar notas causa erro

Solução: Adicionar notas com estudante.adicionar_nota() antes de calcular
Conceito POO: Lógica de negócio - estado do objeto deve ser válido antes de operações
46 changes: 46 additions & 0 deletions tests/Resposta_10.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
class Pessoa: # Erro 1
def __init__(self, nome, idade, cpf = None):
self.nome = nome # Erro 2
self.idade = idade
self.__cpf = cpf # Erro 3

def apresentar(self): # Erro 4
return f"Olá, sou {self.nome}"

class Estudante(Pessoa):
def __init__(self, nome, idade, curso):
super().__init__(nome, idade, cpf = None)
self.curso = curso
self.notas = []

def adicionar_nota(self, nota):
if nota >= 0 and nota <= 10:
self.notas.append(nota)

def calcular_media(self):
if not self.notas:
return 0
media = sum(self.notas) / len(self.notas)
return media


class Professor(Pessoa):
def __init__(self, nome, idade, departamento, salario):
super().__init__(nome, idade, cpf = None)
self.departamento = departamento
self.salario = salario

def apresentar(self):
return f"Olá, sou o professor {self.nome} do departamento {self.departamento}"

# Testando o código
estudante = Estudante("João", 20, "Engenharia")
professor = Professor("Dr. Silva", 45, "Computação", 8000)

print(estudante.apresentar())
print(professor.apresentar())
estudante.adicionar_nota(7.5)
estudante.adicionar_nota(8.0)
estudante.adicionar_nota(9.5)
estudante.adicionar_nota(8.5)
print(f"Média do estudante: {estudante.calcular_media()}") # Erro 7
29 changes: 29 additions & 0 deletions tests/respExercicio01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso

def apresentar(self):
print ( f"Aluno: {self.nome}, Matrícula: {self.matricula}, Curso: {self.curso}")



class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria

def apresentar(self):
print ( f"Disciplina: {self.nome}, codigo: {self.codigo}, carga horaria: {self.carga_horaria}")

aluno1 = Aluno('João Silva', 2023001, 'Engenharia de Software')
aluno1.apresentar()

disciplina1 = Disciplina('Programação Orientada a Objetos', 'POO001', '60h')
disciplina1.apresentar()




30 changes: 30 additions & 0 deletions tests/respExercicio02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.notas = []

def adicionar_nota(self, nota):
self.notas.append(float(nota))

def calcular_media(self):
self.media = sum(self.notas) / len(self.notas)
return self.media

def status(self):
if self.media > 7:
print('aprovado')
else:
print('reprovado')

aluno1 = Aluno('João Silva', 2023001, 'Engenharia de Software')
aluno1.adicionar_nota(3)
aluno1.adicionar_nota(3)
aluno1.adicionar_nota(3)
media = aluno1.calcular_media()
print(aluno1.media)
aluno1.status()



30 changes: 30 additions & 0 deletions tests/respExercicio03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
class Professor:
def __init__(self, nome, departamento, salario):
self.nome = nome
self.departamento = departamento
self._salario = salario

@property
def obter_salario(self):
return self._salario

@obter_salario.setter
def obter_salario(self, novo_salario):
if novo_salario > 0:
self._salario = novo_salario
else:
print('Salario não pode ser menor que0')

def aumentar_salario(self, valor):
if valor > 0:
self._salario += valor
else:
print('O aumento não pode ser menor ou igual a zero')

prof = Professor("Dr. Silva", "Computação", 5000.0)
print(f"Salário atual: R$ {prof.obter_salario}")
prof.obter_salario = 6000.0 # Deve funcionar
print(f"Novo salário: R$ {prof.obter_salario}")
prof.obter_salario= -1000.0 # Deve dar erro
print(f"Salário após tentativa inválida: R$ {prof.obter_salario}")

31 changes: 31 additions & 0 deletions tests/respExercicio04.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
class Pessoa:
def __init__(self, nome, cpf, data_nascimento):
self.nome = nome
self.cpf = cpf
self.data_nascimento =data_nascimento

def apresentar(self):
return (f' Olá, sou {self.nome} , CPF: {self.cpf}')

class Funcionario(Pessoa):
def __init__(self, nome, cpf, data_nascimento, cargo):
super().__init__(nome, cpf, data_nascimento)
self.cargo = cargo

def apresentar(self):
return(f' Olá, sou {self.nome} , CPF: {self.cpf}')

class Tutor(Pessoa):
def __init__(self, nome, cpf, data_nascimento, area_atuacao):
super().__init__(nome, cpf, data_nascimento)
self.area_atuacao =area_atuacao

def apresentar(self):
return(f' Olá, sou {self.nome}, CPF: {self.cpf}, atuo na área de {self.area_atuacao}')

funcionario = Funcionario("João Silva", "123.456.789-00", "01/01/1990", "Secretário")
tutor = Tutor("Maria Santos", "987.654.321-00", "15/05/1985", "Programação")

print(funcionario.apresentar())
tutor.apresentar()

43 changes: 43 additions & 0 deletions tests/respExercicio05.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class Pessoa:
def __init__(self, nome, cpf, data_nascimento):
self.nome = nome
self.cpf = cpf
self.data_nascimento =data_nascimento

def apresentar(self):
return (f' Olá, sou {self.nome} , CPF: {self.cpf}')

class Funcionario(Pessoa):
def __init__(self, nome, cpf, data_nascimento, cargo, salario):
super().__init__(nome, cpf, data_nascimento)
self.cargo = cargo
self.salario = salario

def exibir_dados(self):
print("=== Dados do Funcionário ===")
print(f"Nome: {self.nome}")
print(f"CPF: {self.cpf}")
print(f"Data de Nascimento: {self.data_nascimento}")
print(f"Cargo: {self.cargo}")
print(f"Salário: R$ {self.salario:.2f}")








## Exemplo de Uso
##``python
funcionario = Funcionario("Ana Costa", "111.222.333-44", "20/03/1988", "Coordenadora", 4500.0)
funcionario.exibir_dados()

## Exemplo de Saída Esperada

#=== Dados do Funcionário ===
#Nome: Ana Costa
#CPF: 111.222.333-44
#Data de Nascimento: 20/03/1988
##Cargo: Coordenadora
##Salário: R$ 4500.0
32 changes: 32 additions & 0 deletions tests/respExercicio06.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
class Curso:
def __init__(self, nome, codigo):
self.nome = nome
self.codigo = codigo
self.disciplinas = []

def adicionar_disciplina(self, disciplinas):
self.disciplinas.append(disciplinas)

def listar_disciplinas(self):
for i in self.disciplinas:
print(f"{i.nome} - ({i.codigo})")

def carga_horaria_total(self):
total = sum( i.carga_horaria for i in self.disciplinas)
return total

class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria


curso = Curso("Engenharia de Software", "ES001")
disciplina1 = Disciplina("Programação Orientada a Objetos", "POO001", 60)
disciplina2 = Disciplina("Banco de Dados", "BD001", 80)

curso.adicionar_disciplina(disciplina1)
curso.adicionar_disciplina(disciplina2)
curso.listar_disciplinas()
print(f"Carga horária total: {curso.carga_horaria_total()}h")
41 changes: 41 additions & 0 deletions tests/respExercicio07.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.disciplinas_inscritas = []

def listar_disciplinas(self):
for d in self.disciplinas_inscritas:
print(d.nome)

class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria
self.alunos_matriculados = []

def listar_alunos(self):
for a in self.alunos_matriculados:
print(f"{a.nome} ({a.curso})")

class Secretaria:
@staticmethod
def inscrever_aluno(aluno, disciplina):
disciplina.alunos_matriculados.append(aluno)
aluno.disciplinas_inscritas.append(disciplina)

aluno1 = Aluno("João Silva", "2023001", "Engenharia de Software")
aluno2 = Aluno("Maria Santos", "2023002", "Ciência da Computação")
disciplina1 = Disciplina("POO", "POO001", 60)
disciplina2 = Disciplina("Banco de Dados", "BD001", 80)

secretaria = Secretaria()
secretaria.inscrever_aluno(aluno1, disciplina1)
secretaria.inscrever_aluno(aluno1, disciplina2)
secretaria.inscrever_aluno(aluno2, disciplina1)


aluno1.listar_disciplinas()
disciplina1.listar_alunos()
25 changes: 25 additions & 0 deletions tests/respExercicio08.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
class Departamento:
def __init__(self, nome, sigla):
self.nome = nome
self.sigla = sigla
self.professores = []


@classmethod
def criar_departamento_exatas(cls, nome):
sigla = 'EXA'
return cls(nome, sigla)

@classmethod
def criar_departamento_humanas(cls, nome):
sigla = 'HUM'
return cls(nome, sigla)

def adicionar_professor(self, professor):
self.professores.append(professor)

dept_exatas = Departamento.criar_departamento_exatas("Matemática e Computação")
dept_humanas = Departamento.criar_departamento_humanas("Letras e Filosofia")

print(f"Departamento: {dept_exatas.nome} - Sigla: {dept_exatas.sigla}")
print(f"Departamento: {dept_humanas.nome} - Sigla: {dept_humanas.sigla}")
37 changes: 37 additions & 0 deletions tests/respExercicio09.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso

def apresentar(self):
return ( f"Olá, sou o aluno {self.nome} e estudo no curso {self.curso}.")

class Professor:
def __init__(self, nome, departamento, salario):
self.nome = nome
self.departamento = departamento
self._salario = salario

def apresentar(self):
return (f"Olá, sou o professor {self.nome} e leciono no departamento {self.departamento}.")

class Funcionario:
def __init__(self, nome, cpf, data_nascimento, cargo, salario):
self.nome = nome
self.cpf = cpf
self.data_nascimento = data_nascimento
self.cargo = cargo
self.salario = salario

def apresentar(self):
return (f"Olá, sou o funcionário {self.nome} e meu cargo é {self.cargo}.")

pessoas = [
Aluno("João Silva", "2023001", "Engenharia de Software"),
Professor("Dr. Maria", "Computação", 8000.0),
Funcionario("Carlos Santos", "123.456.789-00", "01/01/1980", "Secretário", 3000.0)
]

for pessoa in pessoas:
print(pessoa.apresentar())
Loading