基于python实现动物知识推理
dict1={'1':'有毛发','2':'产奶','3':'有羽毛','4':'会飞','5':'会下蛋','6':'吃肉','7':'有犬齿',
'8':'有爪','9':'眼盯前方','10':'有蹄','11':'反刍','12':'黄褐色','13':'有斑点','14':'有黑色条纹',
'15':'长脖','16':'长腿','17':'不会飞','18':'会游泳','19':'黑白二色','20':'善飞','21':'哺乳类',
'22':'鸟类','23':'食肉类','24':'蹄类','25':'金钱豹','26':'虎','27':'长颈鹿','28':'斑马',
'29':'鸵鸟','30':'企鹅','31':'信天翁'}#存放字母及其意义
dictlist=[{"21":["1"]},{"21":["2"]},{"22":["3"]},{"22":["4","5"]},{"23":["21","6"]},{"23":["7","8","9"]},{"23":["21","10"]},{"24":["21","11"]},{"25":["21","23","12","13"]},{"26":["21","23","12","14"]},{"27":["24","15","16","13"]}]#存放规则;
result=[]#存放结果
feature=[]#存放特征
def repeatlist(list1,list2):
for item1 in list1:
if item1 not in list2:
return False
return True
def Analysis():
global feature
global dictlist
flag=1
while flag==1:
for i in range(0,len(dictlist)):
flag=0
for key,value in dictlist[i].items():
if(repeatlist(value,feature)):
flag=1
result.append(key)
feature.append(key)
del dictlist[i]
feature=list(set(feature))
break
if flag==1:
break
def traittransform(list1,list2):
global dict1
for key,value in dict1.items():
for item in list1:
if value==item:
list2.append(key)
if len(list1)!=len(list2):
print("您的输入不符合要求")
return False
else:
return True
if __name__ == '__main__':
print("请输入特征的个数\n")
tempory=[]#暂时存放特征
num=int(input())
for i in range(0,num):
print("请输入第"+str(i+1)+"个特征")
trait=input()
tempory.append(trait)
if traittransform(tempory,feature):
Analysis()
print("推理的结果为",dict1[result[-1]])
#feature=["1","23","12","14"]