一张问卷有多个试题,每个试题有不同类型,用编程语言以面向对象形式描述层次结构
时间: 2024-09-15 09:09:51 浏览: 32
在面向对象编程中,我们可以通过定义一系列的类来表示不同类型的试题,并将它们组织成层次结构。这个层次结构中通常会有一个基类或抽象类作为所有试题的共同基类,其他具体的试题类型则继承自这个基类。以下是一个简化的示例:
```python
# 基类,定义所有试题共有的属性和方法
class Question:
def __init__(self, content, question_id):
self.content = content
self.question_id = question_id
def display(self):
# 显示题目内容,实际中可能更复杂,包含文本、图片等
print(f"题目ID: {self.question_id}")
print(self.content)
def evaluate(self, answer):
# 评估答案,返回是否正确
raise NotImplementedError("必须由子类实现评估方法")
# 单选题类,继承自Question
class SingleChoiceQuestion(Question):
def __init__(self, content, question_id, options, answer):
super().__init__(content, question_id)
self.options = options # 选项列表
self.answer = answer # 正确答案
def display(self):
super().display()
# 显示选项
for idx, option in enumerate(self.options):
print(f"{idx + 1}. {option}")
def evaluate(self, answer):
# 评估答案是否正确
return answer == self.answer
# 多选题类,继承自Question
class MultipleChoiceQuestion(Question):
def __init__(self, content, question_id, options, answers):
super().__init__(content, question_id)
self.options = options # 选项列表
self.answers = answers # 正确答案列表
def display(self):
super().display()
# 显示选项
for idx, option in enumerate(self.options):
print(f"{idx + 1}. {option}")
def evaluate(self, selected_answers):
# 评估答案是否正确,考虑是多选情况
correct_answers_count = sum(a in self.answers for a in selected_answers)
return correct_answers_count == len(self.answers)
# 示例使用
# 假设有以下试题
question1 = SingleChoiceQuestion("地球是太阳系的第几颗行星?", 1, ["1", "2", "3", "4"], "3")
question2 = MultipleChoiceQuestion("下列哪个是编程语言?", 2, ["Python", "Java", "C++", "HTML"], ["Python", "Java"])
# 显示问题
question1.display()
question2.display()
# 评估答案
print(question1.evaluate("3")) # 输出: True
print(question2.evaluate(["Python", "Java"])) # 输出: True
```
在这个例子中,我们定义了一个基类`Question`,它包含了所有类型试题共有的属性和方法,例如试题内容和显示方法。然后我们定义了两个子类`SingleChoiceQuestion`和`MultipleChoiceQuestion`来表示单选题和多选题,它们继承自`Question`类并扩展了适合自己类型的属性和方法,例如单选题和多选题的答案处理。
阅读全文