用Python构建动物产生式识别系统

#用Python构建动物识别系统

构建动物识别系统需要使用字典、列表和集合,构造间接库和规则库,我的间接库和规则库的构造方法是:将特征语句通过函数转化为一个含所有关键词的集合,然后将这个集合用一个数字作为库字典的键对应值,将这个特征词集合和对应的数字存放在一个列表里,在查询比较时通过集合子集的关系进行动物特征集合的变化,最终求出动物名

Python代码实现如下:

GuiZe=dict()#间接库的字典
ZhiJie=dict()#规则库的字典
li10=[]#存放间接库键的集合和其在字典中对应的数字键
li20=[]#存放规则库键的集合和其在字典中对应的数字键
jj=0#定位间接库字典的键
gz=0#定位规则库字典的键
def changejh(str):#将字符串转化为集合的函数
    li0=set()
    tr=""
    for i in range(0,len(str)):
        if (str[i]!=" "):
            tr+=str[i]
        else:
            li0.add(tr)
            tr=""
            i+=1
    return li0#返回集合
def jianjiedata(jj):#构造间接数据库
    print("构建规则库:(输入0结束构建)")
    gz=input("请输入条件,以空格隔开:")
    gz+=" "
    while (gz!="0 "):
        jg=input("请输入结果:")
        GuiZe[jj]=jg#构造字典
        li1=changejh(gz)#将条件关键词拆分在一个集合内
        li10.append(li1)#将对应字典的键的集合存入列表
        li10.append(jj)#将对应字典的键存入列表,位置在集合的后面
        jj+=1
        gz = input("请输入条件,以空格隔开:")
        gz=gz+" "
    print("间接数据库构造完成!")
    return jj
def zhijiedata(gz):#构造直接数据库,方法同上
    print("构建直接数据库:(输入0结束构建)")
    tj=input("请输入条件,以空格隔开:")
    tj+=" "
    while (tj!="0 "):
        jg=input("请输入结果:")
        ZhiJie[gz]=jg
        li2=changejh(tj)
        li20.append(li2)
        li20.append(gz)
        gz+=1
        tj=input("请输入条件,以空格隔开:")
        tj=tj+" "
    print("直接数据库构造完成!")
    return gz
def recarchGuiZe(animalset,li10,GuiZe):#循环动物条件,将动物条件的集合在间接库或规则库中查找,当找到相对应的值时,将值加入动物集合,用过的条件删去
    for k in range(0,len(animalset)):
        for i in range(0, (len(li10) - 1)):
            if (type(li10[i])==int):
                continue
            elif (li10[i].issubset(animalset) or li10[i]==animalset):
                m=(i)/2
                animalset.add(GuiZe[m])
                animalset=animalset-li10[i]
    return animalset
def search():#查找动物
   animal=input("请输入动物的特征:(中间用空格隔开)")
   animal+=" "
   animalset=changejh(animal)#将动物的特征化为关键词的集合
   animalset=recarchGuiZe(animalset,li10,GuiZe)#返回经过间接库的过滤后的动物特征集合
   resout=recarchGuiZe(animalset,li20,ZhiJie)#返回经过规则库过滤后的动物特征集合,此时,如果规则库存在此动物,则集合只剩一个值即动物的名字,否则仍有多个特征值
   action=list(resout)#将动物特征集合化为列表,便于取值
   if (len(action)==1):
       print("这个动物是:"+action[0])
   else:
       print("查无此动物")

print("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")
chose = input()
while (chose!='0'):
    #print("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")

    if (chose=='1'):
        jj=jianjiedata(jj)
        #print(li10)
        chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")
    elif (chose=='2'):
        gz=zhijiedata(gz)
        #print(li20)
        chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")
    elif (chose=='3'):
        search()
        chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")
    else:
        print("输入不合法,请重新输入")
        chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")
  • 10
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值