Menu
CoddyTech

Hoàn thiện lần cuối

Bài học 10 trên 11 trong khóa học Dự án Python OOP: tạo trắc nghiệm của Coddy.

challenge icon

Thử thách

Dễ

Kết hợp mọi thứ lại.

Trong phương thức start của Quiz, hãy đếm số kết quả và gọi phương thức print_results từ bài học trước ở cuối.

Hãy kiểm tra các test case, chẳng hạn.

Tự làm thử

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'))

Tất cả bài học trong Dự án Python OOP: tạo trắc nghiệm

Tự luyện tập: Trình biên dịch Python online