Ritocco finale
Lezione 10 di 11 del corso Generatore di quiz - Progetto OOP in Python di Coddy.
Sfida
FacileMetti tutto insieme.
Nel metodo start in Quiz, conta il numero di risultati e alla fine chiama il metodo print_results della lezione precedente.
Controlla i casi di test, ad esempio.
Provalo tu
from abc import ABC, abstractmethod
class Question(ABC):
@abstractmethod
def print(self):
pass
@abstractmethod
def check(self, answer):
pass
class YesNoQuestion(Question):
def __init__(self, question, answer):
self.question = question
self.answer = answer
def print(self):
print('[?] ' + self.question + ' (yes/no)')
def check(self, answer):
return (answer == 'yes' and self.answer) or \
(answer == 'no' and not self.answer)
class OpenQuestion(Question):
def __init__(self, question, answers):
self.question = question
self.answers = answers
def print(self):
print('[?] ' + self.question)
def check(self, answer):
return answer in self.answers
class MultiOptionsQuestion(Question):
def __init__(self, question, options, answer_index):
self.question = question
self.options = options
self.answer_index = answer_index
def print(self):
print('[?] ' + self.question)
print()
for i in range(len(self.options)):
print('[' + str(i + 1) + '] ' + self.options[i])
def check(self, answer):
return self.answer_index == int(answer) - 1
class Quiz:
def __init__(self, questions):
self.questions = questions
def start(self):
for question in self.questions:
question.print()
print()
res = question.check(input('[+] '))
print()
print()
def print_results(self, results):
correct_answers = len([x for x in results if x])
print("Your score is " + str(correct_answers) + '/' + str(len(results)))
print()
for i in range(len(results)):
print('[' + str(i + 1) + '] ' + ('Pass' if results[i] else 'Fail'))
Tutte le lezioni di Generatore di quiz - Progetto OOP in Python
Esercitati da solo: Compilatore Python online