Menu
CoddyTech

最后润色

Coddy 测验生成器:Python 面向对象项目 课程的第 10 课,共 11 课。

challenge icon

挑战

简单

把所有内容整合起来。

在 Quiz 中的 start 方法里,统计结果的数量,并在最后调用上一课中的 print_results 方法。

检查测试用例,例如。

亲手试试

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

测验生成器:Python 面向对象项目中的所有课

自己练习: Python 在线编译器