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
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
18 changes: 16 additions & 2 deletions Guia3/src/pergunta.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
from typing import List, Tuple, Dict
from abc import ABC, abstractmethod

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

@abstractmethod
def validar_resposta(self, resposta):
pass

def get_explicacao(self):
return self.explicacao_geral

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

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

def validar_resposta(self, texto: str) -> bool:
if self.resposta_esperada is None:
return False

if self.case_sensitive:
return texto == self.resposta_esperada

return texto.strip().lower() == self.resposta_esperada.strip().lower()

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

class PerguntaMultiplaEscolha:
pass
class PerguntaMultiplaEscolha(Pergunta):
def __init__(self, texto: str, alternativas: list, explicacao_geral: str = None):
super().__init__(texto, explicacao_geral)
self.alternativas = alternativas

def validar_resposta(self, indice: int) -> bool:
if indice < 0 or indice >= len(self.alternativas):
return False
return self.alternativas[indice].correta

def get_alternativa_correta(self):
for alt in self.alternativas:
if alt.correta:
return alt
return None

def get_tipo(self):
return "multipla_escolha"
12 changes: 11 additions & 1 deletion Guia3/src/questionario.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
from typing import List, Tuple, Dict

from .tentativaquestionario import TentativaQuestionario

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

def adicionar_pergunta(self, pergunta):
self.perguntas.append(pergunta)

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

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

@abstractmethod
def calcular_pontuacao(self) -> float:
pass
12 changes: 10 additions & 2 deletions Guia3/src/respostadiscursiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
from typing import List, Tuple, Dict
from .resposta import Resposta

class RespostaDiscursiva:
pass
class RespostaDiscursiva(Resposta):
def __init__(self, pergunta, texto_resposta: str):
super().__init__(pergunta)
self.texto_resposta = texto_resposta
self.esta_correta = bool(self.pergunta.validar_resposta(self.texto_resposta))
self.pontuacao_obtida = 1.0 if self.esta_correta else 0.0

def calcular_pontuacao(self) -> float:
return self.pontuacao_obtida
13 changes: 11 additions & 2 deletions Guia3/src/respostaobjetiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
from typing import List, Tuple, Dict
from .resposta import Resposta

class RespostaObjetiva:
pass
class RespostaObjetiva(Resposta):
def __init__(self, pergunta, indice_escolhido: int):
super().__init__(pergunta)
self.indice_escolhido = indice_escolhido
self.alternativa_selecionada = None
self.esta_correta = self.pergunta.validar_resposta(self.indice_escolhido)
self.pontuacao_obtida = 1.0 if self.esta_correta else 0.0

def calcular_pontuacao(self) -> float:
return self.pontuacao_obtida
38 changes: 37 additions & 1 deletion Guia3/src/tentativaquestionario.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,40 @@
from typing import List, Tuple, Dict
from datetime import datetime
from .respostaobjetiva import RespostaObjetiva
from .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 = []
self._finalizado = False

def registrar_resposta(self, indice_pergunta: int, valor):
if self._finalizado:
return

pergunta = self.questionario.perguntas[indice_pergunta]

if hasattr(pergunta, "alternativas"):
resposta = RespostaObjetiva(pergunta, int(valor))
else:
resposta = RespostaDiscursiva(pergunta, str(valor))

resposta.calcular_pontuacao()
self.respostas.append(resposta)

def calcular_pontuacao(self):
return sum(r.pontuacao_obtida for r in self.respostas)

def finalizar(self):
self.data_fim = datetime.now()
self._finalizado = True
pontuacao = self.calcular_pontuacao()
feedback = f"Usuário {self.usuario} fez {pontuacao} pontos"
return pontuacao, feedback

def is_finalizado(self):
return self._finalizado