class ExpertSystem:
def __init__(self):
# 规则库,格式:条件集合 => 结论
# 条件用集合表示,匹配所有条件则得出结论
self.rules = [
({"有羽毛", "会飞"}, "鸟"),
({"有羽毛", "不会飞"}, "鸡"),
({"有毛发", "会游泳"}, "海豹"),
({"有毛发", "会飞"}, "蝙蝠"),
({"有鳞片", "生活在水中"}, "鱼"),
({"有鳞片", "生活在陆地"}, "蜥蜴"),
({"有毛发", "有长耳朵"}, "兔子"),
({"有毛发", "会叫"}, "狗"),
({"有毛发", "不会叫"}, "猫"),
]
self.facts = set() # 用户输入的事实
def ask_user(self, question):
"""向用户提问,得到是/否回答"""
while True:
answer = input(question + " (y/n): ").strip().lower()
if answer in ("y", "n"):
return answer == "y"
print("请输入 y 或 n")
def infer(self):
"""根据事实推理出结论"""
for conditions, conclusion in self.rules:
if conditions.issubset(self.facts):
return conclusion
return "无法识别"
def run(self):
print("欢迎使用动物识别专家系统!请回答以下问题:")
# 逐条询问条件
questions = {
"有羽毛": "动物有羽毛吗?",
"会飞": "动物会飞吗?",
"不会飞": "动物不会飞吗?",
"有毛发": "动物有毛发吗?",
"会游泳": "动物会游泳吗?",
"生活在水中": "动物生活在水中吗?",
"生活在陆地": "动物生活在陆地吗?",
"有鳞片": "动物有鳞片吗?",
"有长耳朵": "动物有长耳朵吗?",
"会叫": "动物会叫吗?",
"不会叫": "动物不会叫吗?",
}
for fact, question in questions.items():
if self.ask_user(question):
self.facts.add(fact)
result = self.infer()
print(f"专家系统判断:该动物是【{result}】")
if __name__ == "__main__":
system = ExpertSystem()
system.run()
运行示例
动物有羽毛吗? (y/n): y
动物会飞吗? (y/n): n
动物不会飞吗? (y/n): y
动物有毛发吗? (y/n): n
动物会游泳吗? (y/n): n
动物生活在水中吗? (y/n): n
动物生活在陆地吗? (y/n): y
动物有鳞片吗? (y/n): n
动物有长耳朵吗? (y/n): n
动物会叫吗? (y/n): n
动物不会叫吗? (y/n): y
专家系统判断:该动物是【鸡】
发表回复