diff --git a/Guia1/src/__pycache__/__init__.cpython-313.pyc b/Guia1/src/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..b41715e Binary files /dev/null and b/Guia1/src/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/src/__pycache__/main.cpython-313.pyc b/Guia1/src/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..aeeb9fb Binary files /dev/null and b/Guia1/src/__pycache__/main.cpython-313.pyc differ diff --git a/Guia1/src/config/__pycache__/__init__.cpython-313.pyc b/Guia1/src/config/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..d0b4b84 Binary files /dev/null and b/Guia1/src/config/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/src/config/__pycache__/settings.cpython-313.pyc b/Guia1/src/config/__pycache__/settings.cpython-313.pyc new file mode 100644 index 0000000..f276473 Binary files /dev/null and b/Guia1/src/config/__pycache__/settings.cpython-313.pyc differ diff --git a/Guia1/src/models/__pycache__/__init__.cpython-313.pyc b/Guia1/src/models/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..678fa76 Binary files /dev/null and b/Guia1/src/models/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/src/models/__pycache__/record.cpython-313.pyc b/Guia1/src/models/__pycache__/record.cpython-313.pyc new file mode 100644 index 0000000..157ad2d Binary files /dev/null and b/Guia1/src/models/__pycache__/record.cpython-313.pyc differ diff --git a/Guia1/src/repositories/__pycache__/__init__.cpython-313.pyc b/Guia1/src/repositories/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..1d22921 Binary files /dev/null and b/Guia1/src/repositories/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/src/repositories/__pycache__/abstract_repository.cpython-313.pyc b/Guia1/src/repositories/__pycache__/abstract_repository.cpython-313.pyc new file mode 100644 index 0000000..bc6646b Binary files /dev/null and b/Guia1/src/repositories/__pycache__/abstract_repository.cpython-313.pyc differ diff --git a/Guia1/src/repositories/__pycache__/record_repository.cpython-313.pyc b/Guia1/src/repositories/__pycache__/record_repository.cpython-313.pyc new file mode 100644 index 0000000..e158126 Binary files /dev/null and b/Guia1/src/repositories/__pycache__/record_repository.cpython-313.pyc differ diff --git a/Guia1/src/repositories/record_repository.py b/Guia1/src/repositories/record_repository.py index bded279..bafe4ec 100644 --- a/Guia1/src/repositories/record_repository.py +++ b/Guia1/src/repositories/record_repository.py @@ -1,6 +1,7 @@ from src.repositories.abstract_repository import AbstractRepository from src.models.record import Record from src.utils.file_loader import FileLoader +from unidecode import unidecode class RecordRepository(AbstractRepository): @@ -10,15 +11,25 @@ def __init__(self, file_path: str): def load_all(self): data = FileLoader.load_csv(self._file_path) - self._records = [ - Record(int(row["id"]), row["name"], row["address"]) - for row in data - ] + for row in data: + try: + id = int(row['id']) + if row['name'].strip() == '' or row['address'].strip() == '' or id < 0: + raise ValueError() + else: + self._records.append(Record(id, row['name'], row['address'])) + except: + print(f"Registro inválido ignorado {row}") + return self._records def search(self, term: str): - term = term.lower() - return [ - r for r in self._records - if term in r.name.lower() or term in r.address.lower() - ] \ No newline at end of file + terms = unidecode(term).lower().split() + results = [] + + for r in self._records: + nome = unidecode(r.name).lower() + add = unidecode(r.address).lower() + if all(palavra in nome or palavra in add for palavra in terms): + results.append(r) + return results \ No newline at end of file diff --git a/Guia1/src/services/__pycache__/__init__.cpython-313.pyc b/Guia1/src/services/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..7e17034 Binary files /dev/null and b/Guia1/src/services/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/src/services/__pycache__/record_service.cpython-313.pyc b/Guia1/src/services/__pycache__/record_service.cpython-313.pyc new file mode 100644 index 0000000..aab02d5 Binary files /dev/null and b/Guia1/src/services/__pycache__/record_service.cpython-313.pyc differ diff --git a/Guia1/src/utils/__pycache__/__init__.cpython-313.pyc b/Guia1/src/utils/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..84bd6ee Binary files /dev/null and b/Guia1/src/utils/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/src/utils/__pycache__/file_loader.cpython-313.pyc b/Guia1/src/utils/__pycache__/file_loader.cpython-313.pyc new file mode 100644 index 0000000..d06aef0 Binary files /dev/null and b/Guia1/src/utils/__pycache__/file_loader.cpython-313.pyc differ diff --git a/Guia1/tests/__pycache__/__init__.cpython-313.pyc b/Guia1/tests/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..6400053 Binary files /dev/null and b/Guia1/tests/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia1/tests/__pycache__/test_runner.cpython-313.pyc b/Guia1/tests/__pycache__/test_runner.cpython-313.pyc new file mode 100644 index 0000000..9d76f5e Binary files /dev/null and b/Guia1/tests/__pycache__/test_runner.cpython-313.pyc differ diff --git a/Guia1/tests/test_runner.py b/Guia1/tests/test_runner.py index f8004a8..005ea34 100644 --- a/Guia1/tests/test_runner.py +++ b/Guia1/tests/test_runner.py @@ -61,7 +61,7 @@ def test_search_multiple_terms(self): for r in results: text = (r.name + " " + r.address).lower() - if "joao" not in text or "rua" not in text or "a" not in text: + if "joão" not in text or "rua" not in text or "a" not in text: print("FALHA: Resultado incorreto na busca") return diff --git a/Guia2/src/__pycache__/__init__.cpython-313.pyc b/Guia2/src/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..13a46a2 Binary files /dev/null and b/Guia2/src/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia2/src/folha_pagamento/__pycache__/__init__.cpython-313.pyc b/Guia2/src/folha_pagamento/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..b23a162 Binary files /dev/null and b/Guia2/src/folha_pagamento/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia2/src/folha_pagamento/__pycache__/desenvolvedor.cpython-313.pyc b/Guia2/src/folha_pagamento/__pycache__/desenvolvedor.cpython-313.pyc new file mode 100644 index 0000000..a39269b Binary files /dev/null and b/Guia2/src/folha_pagamento/__pycache__/desenvolvedor.cpython-313.pyc differ diff --git a/Guia2/src/folha_pagamento/__pycache__/estagiario.cpython-313.pyc b/Guia2/src/folha_pagamento/__pycache__/estagiario.cpython-313.pyc new file mode 100644 index 0000000..456b628 Binary files /dev/null and b/Guia2/src/folha_pagamento/__pycache__/estagiario.cpython-313.pyc differ diff --git a/Guia2/src/folha_pagamento/__pycache__/funcionario.cpython-313.pyc b/Guia2/src/folha_pagamento/__pycache__/funcionario.cpython-313.pyc new file mode 100644 index 0000000..81b44c1 Binary files /dev/null and b/Guia2/src/folha_pagamento/__pycache__/funcionario.cpython-313.pyc differ diff --git a/Guia2/src/folha_pagamento/__pycache__/gerente.cpython-313.pyc b/Guia2/src/folha_pagamento/__pycache__/gerente.cpython-313.pyc new file mode 100644 index 0000000..6c90997 Binary files /dev/null and b/Guia2/src/folha_pagamento/__pycache__/gerente.cpython-313.pyc differ diff --git a/Guia2/src/folha_pagamento/desenvolvedor.py b/Guia2/src/folha_pagamento/desenvolvedor.py index 5c5d3c9..8bb9801 100644 --- a/Guia2/src/folha_pagamento/desenvolvedor.py +++ b/Guia2/src/folha_pagamento/desenvolvedor.py @@ -2,5 +2,37 @@ # Desenvolva a classe Desenvolvedor aqui. -class Desenvolvedor: - pass \ No newline at end of file +class Desenvolvedor(Funcionario): + def __init__(self, nome, matricula, salario_base, linguagem, senioridade): + super().__init__(nome, matricula, salario_base) + if not linguagem: + raise ValueError("Sem valor") + if not senioridade: + raise ValueError("Sem valor") + self.linguagem = linguagem.strip() + self.senioridade = senioridade.strip() + + def calcular_bonus(self): + if self.senioridade == "junior": + return self.salario_base * 0.05 + elif self.senioridade == "pleno": + return self.salario_base * 0.1 + elif self.senioridade == "senior": + return self.salario_base * 0.15 + + def calcular_descontos(self): + return self.salario_base * 0.08 + + def calcular_adicionais(self): + if self.linguagem == "Python": + return 500 + elif self.linguagem == "Java": + return 400 + elif self.linguagem == "JavaScript": + return 350 + else: + return 200 + + + + \ No newline at end of file diff --git a/Guia2/src/folha_pagamento/estagiario.py b/Guia2/src/folha_pagamento/estagiario.py index d50a433..0e543c2 100644 --- a/Guia2/src/folha_pagamento/estagiario.py +++ b/Guia2/src/folha_pagamento/estagiario.py @@ -2,5 +2,26 @@ # Desenvolva a classe Estagiario aqui. -class Estagiario: - pass \ No newline at end of file +class Estagiario(Funcionario): + def __init__(self, nome, matricula, salario_base, curso, carga_horaria): + super().__init__(nome, matricula, salario_base) + if not curso: + raise ValueError("Sem valor") + if not carga_horaria or carga_horaria <= 0: + raise ValueError("Sem valor ou valor incorreto") + self.curso = curso + self.carga_horaria = carga_horaria + + def calcular_bonus(self): + return self.salario_base * 0.03 + + def calcular_descontos(self): + return self.salario_base * 0.02 + + def calcular_adicionais(self): + if self.carga_horaria <= 20: + return 150 + elif self.carga_horaria <= 30: + return 250 + elif self.carga_horaria <= 40: + return 350 \ No newline at end of file diff --git a/Guia2/src/folha_pagamento/gerente.py b/Guia2/src/folha_pagamento/gerente.py index 31819a1..af03325 100644 --- a/Guia2/src/folha_pagamento/gerente.py +++ b/Guia2/src/folha_pagamento/gerente.py @@ -2,5 +2,32 @@ # Desenvolva a classe Gerente aqui. -class Gerente: - pass \ No newline at end of file +class Gerente(Funcionario): + def __init__(self, nome, matricula, salario_base, setor, qtd_equipe): + super().__init__(nome, matricula, salario_base) + if not setor: + raise ValueError("Sem valor") + if not qtd_equipe or qtd_equipe <= 0: + raise ValueError("Sem valor ou valor incorreto") + self.setor = setor + self.qtd_equipe = qtd_equipe + + def calcular_bonus(self): + if self.qtd_equipe <= 5: + return self.salario_base * 0.1 + elif self.qtd_equipe > 5 and self.qtd_equipe <= 10: + return self.salario_base * 0.15 + elif self.qtd_equipe > 10: + return self.salario_base * 0.2 + + def calcular_descontos(self): + return self.salario_base * 0.12 + + def calcular_adicionais(self): + + if self.qtd_equipe > 10: + return 2000 + elif self.qtd_equipe > 5: + return 1000 + else: + return 500 diff --git a/Guia2/tests/__pycache__/__init__.cpython-313.pyc b/Guia2/tests/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..acdf758 Binary files /dev/null and b/Guia2/tests/__pycache__/__init__.cpython-313.pyc differ diff --git a/Guia2/tests/__pycache__/integrity.cpython-313.pyc b/Guia2/tests/__pycache__/integrity.cpython-313.pyc new file mode 100644 index 0000000..e833617 Binary files /dev/null and b/Guia2/tests/__pycache__/integrity.cpython-313.pyc differ diff --git a/Guia2/tests/__pycache__/test_desenvolvedor.cpython-313-pytest-9.0.3.pyc b/Guia2/tests/__pycache__/test_desenvolvedor.cpython-313-pytest-9.0.3.pyc new file mode 100644 index 0000000..3c88159 Binary files /dev/null and b/Guia2/tests/__pycache__/test_desenvolvedor.cpython-313-pytest-9.0.3.pyc differ diff --git a/Guia2/tests/__pycache__/test_estagiario.cpython-313-pytest-9.0.3.pyc b/Guia2/tests/__pycache__/test_estagiario.cpython-313-pytest-9.0.3.pyc new file mode 100644 index 0000000..a3a5d37 Binary files /dev/null and b/Guia2/tests/__pycache__/test_estagiario.cpython-313-pytest-9.0.3.pyc differ diff --git a/Guia2/tests/__pycache__/test_gerente.cpython-313-pytest-9.0.3.pyc b/Guia2/tests/__pycache__/test_gerente.cpython-313-pytest-9.0.3.pyc new file mode 100644 index 0000000..4a6b471 Binary files /dev/null and b/Guia2/tests/__pycache__/test_gerente.cpython-313-pytest-9.0.3.pyc differ diff --git a/Guia2/tests/integrity.py b/Guia2/tests/integrity.py index 6d3ebd9..0e2fbc5 100644 --- a/Guia2/tests/integrity.py +++ b/Guia2/tests/integrity.py @@ -1,3 +1,6 @@ + + + from pathlib import Path import hashlib diff --git a/Guia3/src/alternativa.py b/Guia3/src/alternativa.py index 4dde61f..f2caa32 100644 --- a/Guia3/src/alternativa.py +++ b/Guia3/src/alternativa.py @@ -1,4 +1,10 @@ from typing import List, Tuple, Dict class Alternativa: - pass \ No newline at end of file + def __init__(self, texto, correta, explicacao = None): + self.texto = texto + self.correta = correta + self.explicacao = explicacao + + def get_correta(self): + return self.correta \ No newline at end of file diff --git a/Guia3/src/pergunta.py b/Guia3/src/pergunta.py index 5b3763d..4161784 100644 --- a/Guia3/src/pergunta.py +++ b/Guia3/src/pergunta.py @@ -1,4 +1,5 @@ from typing import List, Tuple, Dict +from abc import ABC -class Pergunta: +class Pergunta(): pass \ No newline at end of file diff --git a/Guia3/src/perguntadiscursiva.py b/Guia3/src/perguntadiscursiva.py index f4c26af..c743c9c 100644 --- a/Guia3/src/perguntadiscursiva.py +++ b/Guia3/src/perguntadiscursiva.py @@ -1,4 +1,15 @@ from typing import List, Tuple, Dict class PerguntaDiscursiva: - pass \ No newline at end of file + def __init__(self, texto, resposta_esperada = None): + self.texto = texto + self.resposta_esperada = resposta_esperada + + def validar_resposta(self, res): + if res == self.resposta_esperada: + return True + else: + return False + + def get_tipo(self): + return "discursiva" \ No newline at end of file diff --git a/Guia3/src/perguntamultiplaescolha.py b/Guia3/src/perguntamultiplaescolha.py index bcbe94d..64ed8de 100644 --- a/Guia3/src/perguntamultiplaescolha.py +++ b/Guia3/src/perguntamultiplaescolha.py @@ -1,4 +1,23 @@ from typing import List, Tuple, Dict -class PerguntaMultiplaEscolha: - pass \ No newline at end of file +class PerguntaMultiplaEscolha(): + def __init__(self, texto, alternativas, explicacao_geral = None): + self.texto = texto + self.alternativas = alternativas + self.explicacao_geral = explicacao_geral + + def validar_resposta(self, indice): + resposta = self.alternativas[indice] + return resposta.get_correta() + + def get_alternativa_correta(self): + for res in self.alternativas: + if res.get_correta() == True: + return res + + def get_tipo(self): + return "multipla_escolha" + + def get_explicacao(self): + return self.explicacao_geral + \ No newline at end of file diff --git a/Guia3/src/questionario.py b/Guia3/src/questionario.py index 7525582..5563fa5 100644 --- a/Guia3/src/questionario.py +++ b/Guia3/src/questionario.py @@ -1,4 +1,14 @@ from typing import List, Tuple, Dict +from src.tentativaquestionario import TentativaQuestionario class Questionario: - pass + def __init__(self, titulo): + self.titulo = titulo + self.perguntas = [] + + def adicionar_pergunta(self, pergunta): + self.perguntas.append(pergunta) + + def criar_attempt(self, usuario): + return TentativaQuestionario(self, usuario) + diff --git a/Guia3/src/respostadiscursiva.py b/Guia3/src/respostadiscursiva.py index 4ea6dbb..b02c5e5 100644 --- a/Guia3/src/respostadiscursiva.py +++ b/Guia3/src/respostadiscursiva.py @@ -1,4 +1,13 @@ from typing import List, Tuple, Dict class RespostaDiscursiva: - pass \ No newline at end of file + def __init__(self, pergunta, texto_resposta): + self.pergunta = pergunta + self.texto_resposta = texto_resposta + @property + def esta_correta(self): + return self.pergunta.validar_resposta(self.texto_resposta) + + def calcular_pontuacao(self): + if self.esta_correta == True: + return 1 \ No newline at end of file diff --git a/Guia3/src/respostaobjetiva.py b/Guia3/src/respostaobjetiva.py index 72ed2d0..294f514 100644 --- a/Guia3/src/respostaobjetiva.py +++ b/Guia3/src/respostaobjetiva.py @@ -1,4 +1,17 @@ from typing import List, Tuple, Dict class RespostaObjetiva: - pass \ No newline at end of file + def __init__(self, pergunta, indice_escolhido): + self.pergunta = pergunta + self.indiece_escolhido = indice_escolhido + + @property + def esta_correta(self): + return self.pergunta.validar_resposta(self.indiece_escolhido) + + def calcular_pontuacao(self): + if self.esta_correta == True: + return 1 + else: + return 0 + diff --git a/Guia3/src/tentativaquestionario.py b/Guia3/src/tentativaquestionario.py index 9947dd1..950b25f 100644 --- a/Guia3/src/tentativaquestionario.py +++ b/Guia3/src/tentativaquestionario.py @@ -1,4 +1,31 @@ from typing import List, Tuple, Dict class TentativaQuestionario: - pass \ No newline at end of file + def __init__(self, questionario, usuario): + self.questionario = questionario + self.usuario = usuario + self.respostas = [] + + def registrar_resposta(self, indice, resposta): + registro = [indice, resposta] + self.respostas.append(registro) + + def calcular_pontuacao(self): + pontuacao = 0 + for res in self.respostas: + pergunta = self.questionario.perguntas[res[0]] + + if pergunta.validar_resposta(res[1]) == True: + pontuacao = pontuacao +1 + return pontuacao + + def finalizar(self): + self._finalizado = True + pontuacao = self.calcular_pontuacao() + total = len(self.questionario.perguntas) + feedback = f"Você acertou {pontuacao} de {total} questões." + return pontuacao, feedback + + def is_finalizado(self): + return self._finalizado + \ No newline at end of file