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
8 changes: 7 additions & 1 deletion Guia3/src/alternativa.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
from typing import List, Tuple, Dict

class Alternativa:
pass
def __init__(self, texto: str, correta: bool, explicacao=None):
self.texto = texto
self.correta = correta
self.explicacao = explicacao



17 changes: 15 additions & 2 deletions Guia3/src/pergunta.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
from typing import List, Tuple, Dict
from abc import ABC, abstractmethod
class Pergunta(ABC):
def __init__(self, texto, explicacao_geral=None):
self.__texto = texto
self.__explicacao_geral = explicacao_geral

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

def get_explicacao(self):
return self.__explicacao_geral

@abstractmethod
def get_tipo(self) -> str:
pass
21 changes: 19 additions & 2 deletions Guia3/src/perguntadiscursiva.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 PerguntaDiscursiva:
pass
class PerguntaDiscursiva(Pergunta):
def __init__(self, texto, explicacao_geral=None, resposta_esperada=None):
super().__init__(texto, explicacao_geral)
self.resposta_esperada = resposta_esperada

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

return resposta.lower() == self.resposta_esperada.lower()

def get_tipo(self) -> str:
return "discursiva"





26 changes: 24 additions & 2 deletions Guia3/src/perguntamultiplaescolha.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,26 @@
from typing import List, Tuple, Dict
from .pergunta import Pergunta
from .alternativa import Alternativa

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

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

return self.alternativas[indice] == self.get_alternativa_correta()

def get_alternativa_correta(self) -> Alternativa:
for alternativa in self.alternativas:
if alternativa.correta == True:
return alternativa
return None

def get_tipo(self) -> str:
return "multipla_escolha"



17 changes: 16 additions & 1 deletion Guia3/src/questionario.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
from typing import List, Tuple, Dict
from .tentativaquestionario import TentativaQuestionario

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

def registrar_resposta(self, indice_pergunta, valor):
pass

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

def criar_attempt(self, usuario):
tentativa = TentativaQuestionario(self, usuario)
return tentativa


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 typing import List, Tuple, Dict
from .pergunta import Pergunta
from abc import ABC, abstractmethod
class Resposta(ABC):
def __init__(self, pergunta: Pergunta, esta_correta: bool, pontuacao_obtida=None):
self.__pergunta = pergunta
self.esta_correta = esta_correta
self.pontuacao_obtida = pontuacao_obtida

class Resposta:
pass

14 changes: 12 additions & 2 deletions Guia3/src/respostadiscursiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
from typing import List, Tuple, Dict
from .resposta import Resposta

class RespostaDiscursiva:
pass
class RespostaDiscursiva(Resposta):
def __init__(self, pergunta, texto_resposta, pontuacao_obtida=None):
self.texto_resposta = texto_resposta
esta_correta = pergunta.validar_resposta(texto_resposta)
super().__init__(pergunta, esta_correta, pontuacao_obtida)

def calcular_pontuacao(self):
if self.esta_correta:
return 1.0
else:
return 0.0
15 changes: 13 additions & 2 deletions Guia3/src/respostaobjetiva.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
from typing import List, Tuple, Dict
from .resposta import Resposta
class RespostaObjetiva(Resposta):
def __init__(self, pergunta, indice_escolhido, pontuacao_obtida=None):
self.indice_escolhido = indice_escolhido
esta_correta = pergunta.validar_resposta(indice_escolhido)
super().__init__(pergunta, esta_correta, pontuacao_obtida)

class RespostaObjetiva:
pass
def calcular_pontuacao(self):
if self.esta_correta:
return 1.0
else:
return 0.0


41 changes: 40 additions & 1 deletion Guia3/src/tentativaquestionario.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,43 @@
from typing import List, Tuple, Dict
from .perguntamultiplaescolha import PerguntaMultiplaEscolha
from .respostaobjetiva import RespostaObjetiva
from .respostadiscursiva import RespostaDiscursiva

class TentativaQuestionario:
pass
def __init__(self, questionario, usuario, data_inicio=None, data_fim=None):
self.__questionario = questionario
self.usuario = usuario
self.__data_inicio = data_inicio
self.__data_fim = data_fim
self.respostas = []
self.__finalizado = False

def registrar_resposta(self, indice_pergunta, valor):
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)
return resposta

def adicionar_pergunta(self, p):
self.__questionario.adicionar_pergunta(p)

def finalizar(self):
self.__finalizado = True
pontuacao = self.calcular_pontuacao()
feedback = f"Pontuação final: {pontuacao}"
return pontuacao, feedback

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

def is_finalizado(self):
return self.__finalizado