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
Binary file added Guia1/src/__pycache__/__init__.cpython-314.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added Guia1/src/utils/__pycache__/__init__.cpython-314.pyc
Binary file not shown.
Binary file not shown.
Binary file added Guia1/tests/__pycache__/__init__.cpython-314.pyc
Binary file not shown.
Binary file not shown.
5 changes: 4 additions & 1 deletion Guia3/src/alternativa.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from typing import List, Tuple, Dict

class Alternativa:
pass
def __init__(self, texto: str, correta: bool, explicacao: str = None):
self.texto = texto
self.correta = correta
self.explicacao = explicacao
19 changes: 17 additions & 2 deletions Guia3/src/pergunta.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
from typing import List, Tuple, Dict
from abc import ABC, abstractmethod

class Pergunta:
pass
class Pergunta(ABC):
def __init__(self, texto: str, explicacao_geral = None):
self._texto = texto
self._explicacao_geral = explicacao_geral

@abstractmethod
def validar_resposta(self, resposta) -> bool:
pass

@abstractmethod
def get_explicacao(self) -> str:
pass

@abstractmethod
def get_tipo(self) -> str:
pass
18 changes: 16 additions & 2 deletions Guia3/src/perguntadiscursiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
from typing import List, Tuple, Dict
from pergunta import Pergunta

class PerguntaDiscursiva:
pass
class PerguntaDiscursiva(Pergunta):
def __init__(self, texto, explicacao_geral = None, resposta_esperada: str = None):
super().__init__(texto, explicacao_geral)
self.resposta_esperada = resposta_esperada

def validar_resposta(self, texto: str):
if self.resposta_esperada is None:
return False
return texto.strip().lower() == self.resposta_esperada.strip().lower()

def get_explicacao(self) -> str:
return self.explicacao_geral

def get_tipo(self):
return "discursiva"
63 changes: 61 additions & 2 deletions Guia3/src/perguntamultiplaescolha.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,63 @@
from typing import List, Tuple, Dict
from pergunta import Pergunta

class PerguntaMultiplaEscolha:
pass
class PerguntaMultiplaEscolha(Pergunta):
def __init__(self, texto: str, alternativas: List[Tuple[str, bool]], explicacao_geral = None):
super().__init__(texto, explicacao_geral)
self.alternativas = alternativas
self.explicacao_geral = explicacao_geral

def _obter_texto_correta(self, alternativa):
if isinstance(alternativa, tuple):
return alternativa[0], alternativa[1]
if isinstance(alternativa, dict):
return alternativa.get("texto"), alternativa.get("correta", False)
if hasattr(alternativa, "texto") and hasattr(alternativa, "correta"):
return alternativa.texto, alternativa.correta
return None, False

def validar_resposta(self, resposta) -> bool:
if isinstance(resposta, int):
if 0 <= resposta < len(self.alternativas):
_, correta = self._obter_texto_correta(self.alternativas[resposta])
return correta
return False

if isinstance(resposta, str):
for alternativa in self.alternativas:
texto, correta = self._obter_texto_correta(alternativa)
if texto == resposta:
return correta
return False

if isinstance(resposta, (list, tuple, set)):
selecionadas = set()
for item in resposta:
if isinstance(item, int):
if 0 <= item < len(self.alternativas):
texto, _ = self._obter_texto_correta(self.alternativas[item])
selecionadas.add(texto)
else:
return False
elif isinstance(item, str):
selecionadas.add(item)
else:
return False

corretas = {texto for alternativa in self.alternativas if (texto := self._obter_texto_correta(alternativa)[0]) is not None and self._obter_texto_correta(alternativa)[1]}
return selecionadas == corretas

return False

def get_alternativa_correta(self):
for alt in self.alternativas:
_, correta = self._obter_texto_correta(alt)
if correta:
return alt
return None

def get_explicacao(self) -> str:
return self.explicacao_geral

def get_tipo(self) -> str:
return "multipla_escolha"
13 changes: 11 additions & 2 deletions Guia3/src/questionario.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
from typing import List, Tuple, Dict
from typing import List
from src.tentativaquestionario import TentativaQuestionario

class Questionario:
pass
def __init__(self, titulo: str):
self.titulo = titulo
self.perguntas: List = []

def adicionar_pergunta(self, pergunta) -> None:
self.perguntas.append(pergunta)

def criar_attempt(self, usuario: str):
return TentativaQuestionario(questionario = self, usuario = usuario)
11 changes: 9 additions & 2 deletions Guia3/src/resposta.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
from abc import ABC
from typing import List, Tuple, Dict

class Resposta:
pass
class Resposta(ABC):
def __init__(self,pergunta, esta_correta: bool, pontuacao_obtida: float):
self.pergunta = pergunta
self.esta_correta = esta_correta
self.pontuacao_obtida = pontuacao_obtida

def calcular_pontuacao(self):
pass
9 changes: 8 additions & 1 deletion Guia3/src/respostadiscursiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
from typing import List, Tuple, Dict
from src.pergunta import Pergunta

class RespostaDiscursiva:
pass
def __init__(self, pergunta, texto_resposta: str):
self.pergunta = pergunta
self.texto_resposta = texto_resposta
self.esta_correta = pergunta.validar_resposta(texto_resposta)

def calcular_pontuacao(self) -> float:
return 1.0 if self.esta_correta else 0.0
9 changes: 8 additions & 1 deletion Guia3/src/respostaobjetiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
from typing import List, Tuple, Dict

class RespostaObjetiva:
pass
def __init__(self, pergunta, indice_escolhido: int):
self.pergunta = pergunta
self.indice_escolhido = indice_escolhido
self.alternativa_selecionada = pergunta.alternativas[indice_escolhido]
self.esta_correta = pergunta.validar_resposta(indice_escolhido)

def calcular_pontuacao(self) -> float:
return 1.0 if self.esta_correta else 0.0
38 changes: 36 additions & 2 deletions Guia3/src/tentativaquestionario.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,38 @@
from typing import List, Tuple, Dict
from typing import List, Tuple
from datetime import datetime
from src.perguntamultiplaescolha import PerguntaMultiplaEscolha
from src.respostaobjetiva import RespostaObjetiva
from src.respostadiscursiva import RespostaDiscursiva

class TentativaQuestionario:
pass
def __init__(self, questionario, usuario: str):
self.questionario = questionario
self.usuario = usuario
self.data_inicio = datetime.now()
self.data_fim = None
self.respostas: List = []
self._finalizado: bool = False

def registrar_resposta(self, indice_pergunta: int, valor) -> None:
pergunta = self.questionario.perguntas[indice_pergunta]

if isinstance(pergunta, PerguntaMultiplaEscolha):
resposta = RespostaObjetiva(pergunta = pergunta, indice_escolhido=valor)
else:
resposta = RespostaDiscursiva(pergunta = pergunta, texto_resposta=valor)

self.respostas.append(resposta)

def calcular_pontuacao(self) -> float:
return sum(r.calcular_pontuacao() for r in self.respostas)

def finalizar(self) -> Tuple[float, str]:
self._finalizado = True
self.data_fim = datetime.now()
pontuacao = self.calcular_pontuacao()
total = len(self.questionario.perguntas)
feedback = f"Você acertou {pontuacao:.0f} de {total} perguntas."
return pontuacao, feedback

def is_finalizado(self) -> bool:
return self._finalizado
13 changes: 13 additions & 0 deletions Guia4/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
__pycache__/
*.pyc
*.pyo
*.pyd
venv/
.venv/
.venv
env/
.env
.pytest_cache/
.pytest_cache
.coverage
htmlcov/
Loading