'''
动物识别产生式系统
目标:
1.用户输入指令符号,可以查询特征库、规则库
2.用户可以根据特征识别动物
'''
class AnimalSystem:
def __init__(self):
# 目标动物
self.target_animals = ['金钱豹', '虎', '长颈鹿', '斑马', '鸵鸟', '企鹅', '信天翁']
# 规则库
self.rules = [
['毛发', '哺乳动物', False], # False表示还未匹配成功
['奶', '哺乳动物', False],
['羽毛', '鸟', False],
['会飞&会下蛋', '鸟', False],
['吃肉', '肉食动物', False],
['有犬齿&有爪&眼盯前方', '食肉动物', False],
['哺乳动物&有蹄', '蹄类动物', False],
['哺乳动物&反刍动物', '蹄类动物', False],
['哺乳动物&食肉动物&黄褐色&暗斑点', '金钱豹', False],
['哺乳动物&食肉动物&黄褐色&黑色条纹', '虎', False],
['蹄类动物&长脖子&长腿&暗斑点', '长颈鹿', False],
['有蹄类动物&黑色条纹', '斑马', False],
['鸟&长脖子&长腿&不会飞&黑白二色', '鸵鸟', False],
['鸟&会游泳&不会飞&黑白二色', '企鹅', False],
['鸟&会飞', '信天翁', False]
]
self.data = [] # 综合数据库
self.flag = False # 是否找到了, 终于判断程序终止
self.maxdepth = 50 # 最大搜索次数
self.result = '' # 结论
def print_rules(self):
# 输出规则
for i in range(len(self.rules)):
print(i, ':由', self.rules[i][0], ',可以得到:', self.rules[i][1])
def search(self):
# 执行单次搜索
for i in range(len(self.rules)):
# 没有匹配成功的执行
if not self.rules[i][2]:
relu = self.rules[i][0].split('&')
count = 0 # 计数,判断relu中的项是否都在综合数据库中
for j in relu:
if j in self.data:
count += 1
if count == len(relu): # 匹配成功了
res = self.rules[i][1] # 取出当前规则对应的结论
if res in self.target_animals: # 结论是否在目标的动物里面
self.flag = True # 更新找到的标记
self.result = res
break # 终止循环i
else: # 匹配成功,但不是结论
self.data.append(res)
self.rules[i][2] = True
if __name__ == '__main__':
animal = AnimalSystem()
animal.print_rules()