当前位置:   article > 正文

Python 动物专家识别系统_用python编写动物识别系统

用python编写动物识别系统
  1. from tkinter import *
  2. import copy
  3. def find_data(process_data_list):
  4. # 依次进行循环查找并对过程排序
  5. #print(data_process_list)
  6. #print(data_result_list)
  7. #print(dict_input)
  8. for p, data_process in enumerate(data_process_list):
  9. # 用于判断此过程是否成立
  10. count = 0
  11. #print(process_data_list)
  12. #print(data_process)
  13. for i in process_data_list:
  14. if i in data_process:
  15. #print(i+'1')
  16. count += 1
  17. # 过程成立则数值相同,可以进入下一步
  18. if count == len(data_process):
  19. # 此过程中结果是否为最终结果,不是将此过程结果加入到过程中
  20. if data_result_list[p] not in result_list:
  21. # 弹出过程和此过程结果,因为此过程已经进行过,此结果存入需要查找的过程中
  22. result = data_result_list.pop(p)
  23. process = data_process_list.pop(p)
  24. #ins1(result,process)
  25. # 判断结果是否已经存在过程中,存在则重新寻找,不存在则加入过程,并将其存入最终结果
  26. if result not in process_data_list:
  27. dict_input[','.join(process)] = result
  28. end_result = find_data(process_data_list + [result])
  29. if end_result == 1:
  30. return 1
  31. else:
  32. return 0
  33. # 存在则直接寻找
  34. else:
  35. end_result = find_data(process_data_list)
  36. if end_result == 1:
  37. return 1
  38. else:
  39. return 0
  40. # 找到最终结果,取出结果后返回
  41. else:
  42. process = data_process_list.pop(p)
  43. dict_input[','.join(process)] = data_result_list[p]
  44. return 1
  45. return 0
  46. def ini1(data_process_list, data_result_list):
  47. Lstbox1.delete(0, END)
  48. for item in data_process_list:
  49. Lstbox1.insert(END, item)
  50. Lstbox2.delete(0, END)
  51. for item in data_result_list:
  52. Lstbox2.insert(END, item)
  53. def clear():
  54. Lstbox1.delete(0, END)
  55. Lstbox2.delete(0, END)
  56. txt.delete(1.0,END)
  57. def ins1(x,y):
  58. Lstbox1.insert(Lstbox1.size(),x)
  59. Lstbox2.insert(Lstbox2.size(),y)
  60. def ins():
  61. if entry.get() != '':
  62. if Lstbox1.curselection() == ():
  63. Lstbox1.insert(Lstbox1.size(), entry.get())
  64. else:
  65. Lstbox1.insert(Lstbox1.curselection(), entry.get())
  66. s = entry.get()
  67. global data_process_list
  68. data_process_list.append(s)
  69. def ins2():
  70. if entry.get() != '':
  71. if Lstbox2.curselection() == ():
  72. Lstbox2.insert(Lstbox2.size(), entry.get())
  73. # s = entry.get()
  74. # t = Lstbox2.size()
  75. # global data_result_list
  76. # data_result_list[t] = s
  77. else:
  78. Lstbox2.insert(Lstbox2.curselection(), entry.get())
  79. # s = entry.get()
  80. # t = Lstbox2.curselection()
  81. # global data_result_list
  82. # data_result_list[t] = s
  83. s = entry.get()
  84. global data_result_list
  85. data_result_list.append(s)
  86. def updt():
  87. if entry.get() != '' and Lstbox1.curselection() != ():
  88. selected = Lstbox1.curselection()[0]
  89. Lstbox1.delete(selected)
  90. Lstbox1.insert(selected, entry.get())
  91. s1 = entry.get()
  92. global data_process_list
  93. data_process_list[selected] = s1
  94. s = '你已经成功修改'
  95. gettt(s)
  96. def updt1():
  97. if entry.get() != '' and Lstbox2.curselection() != ():
  98. selected = Lstbox2.curselection()[0]
  99. Lstbox2.delete(selected)
  100. Lstbox2.insert(selected, entry.get())
  101. s1 = entry.get()
  102. global data_result_list
  103. data_result_list[selected]=s1
  104. s = '你已经成功修改'
  105. gettt(s)
  106. def delt():
  107. if Lstbox1.curselection() != ():
  108. t = list(Lstbox1.curselection())
  109. Lstbox1.delete(Lstbox1.curselection())
  110. Lstbox2.delete(t)
  111. t1 = Lstbox1.curselection()
  112. global data_process_list
  113. del data_process_list[t1]
  114. global data_result_list
  115. del data_result_list[t1]
  116. s='你已经成功删除'
  117. gettt(s)
  118. def gettt(s):
  119. txt.delete(1.0,END)
  120. txt.insert(END, s)
  121. def plus():
  122. term=entry.get()
  123. #print(term)
  124. if term=='0':
  125. entry.delete(0,'end')
  126. #print(list_data)
  127. global data_result_list
  128. tdataq_result_list=data_result_list.copy()
  129. global dict_input
  130. dict_input.clear()
  131. global data_process_list
  132. tdata_process_list=data_process_list.copy()
  133. end_result = find_data(list_data)
  134. data_result_list=tdataq_result_list
  135. data_process_list=tdata_process_list
  136. print(data_result_list)
  137. print(dict_input)
  138. print(end_result)
  139. if end_result == 1:
  140. s='推理:'+'\n'
  141. s3='综合数据库:'
  142. s3 = s3 + ' '.join(list_data) + ' '
  143. # 将结果进行打印
  144. for i in dict_input.keys():
  145. if dict_input[i] not in result_list:
  146. s3 = s3 + dict_input[i] + ' '
  147. s1=i+'-->'+dict_input[i]+'\n'
  148. s=s+s1
  149. #print(s)
  150. #print(f"{i}->{dict_input[i]}")
  151. # 得到最终结果即输出所识别动物
  152. if dict_input[i] in result_list:
  153. s2='所识别的动物为'+dict_input[i]+'\n'
  154. s=s+s2
  155. s=s3+'\n'+s
  156. gettt(s)
  157. else:
  158. # 将结果进行打印
  159. s3 = '综合数据库:'
  160. s3 = s3 + ' '.join(list_data) + ' '
  161. for i in dict_input.keys():
  162. s1='推理:'
  163. if dict_input[i] not in result_list:
  164. s3 = s3 + dict_input[i] + ' '
  165. s=i+'->'+dict_input[i]+'\n'+'并未得出最终结论,请继续补充事实'
  166. s=s3+'\n'+s1+s
  167. #print(s)
  168. gettt(s)
  169. if term:
  170. if database[term] not in list_data:
  171. list_data.append(database[term])
  172. else:
  173. s='输入为空'
  174. gettt(s)
  175. entry.delete(0,'end')
  176. # 打印前提条件
  177. s='前提条件为:'
  178. s1=' '.join(list_data) + '\n'
  179. s1=s+s1
  180. gettt(s1)
  181. # 进行递归查找,直到找到最终结果,返回1则找到最终结果
  182. # 用于储存中间过程
  183. global data_process_list
  184. data_process_list = []
  185. # 用于存储过程对应的结果
  186. global data_result_list
  187. data_result_list = []
  188. # 存储用于查询的数据
  189. global list_data
  190. list_data = []
  191. # 用于存储输出结果
  192. global dict_input
  193. dict_input = {}
  194. #做一个联系
  195. dict1={}
  196. # 规则库
  197. txt = '''有毛发,是哺乳动物
  198. 有奶,是哺乳动物
  199. 有羽毛,是鸟
  200. 会飞,会下蛋,是鸟
  201. 吃肉,是肉食动物
  202. 有犬齿,有爪,眼盯前方,是食肉动物
  203. 是哺乳动物,有蹄,是蹄类动物
  204. 是哺乳动物,是咀嚼反刍动物,是蹄类动物
  205. 是哺乳动物,是肉食动物,是黄褐色,身上有暗斑点,金钱豹
  206. 是哺乳动物,是肉食动物,是黄褐色,身上有黑色条纹,虎
  207. 是蹄类动物,有长脖子,有长腿,身上有暗斑点,长颈鹿
  208. 是蹄类动物,身上有黑色条纹,斑马
  209. 是鸟,有长脖子,有长腿,不会飞,有黑白二色,鸵鸟
  210. 是鸟,会游泳,不会飞,有黑白二色,企鹅
  211. 是鸟,善飞,信天翁'''
  212. # 将数据预处理
  213. datas = txt.split('\n')
  214. #print(datas)
  215. for data in datas:
  216. data = data.split(',')
  217. data_process_list.append(data[:-1])
  218. #print(data_process_list)
  219. data_result_list.append(data[-1].replace('\n', ''))
  220. # print(data_result_list)
  221. result_list = ['信天翁', '鸵鸟', '斑马', '长颈鹿', '虎', '金钱豹', '企鹅']
  222. # 数据库对应的过程
  223. database = {'有毛发': '有毛发', '有奶': '有奶', '有羽毛': '有羽毛', '会飞': '会飞', '会下蛋': '会下蛋', '吃肉': '吃肉', '有犬齿': '有犬齿',
  224. '有爪': '有爪', '眼盯前方': '眼盯前方', '有蹄': '有蹄', '是咀嚼反刍动物': '是咀嚼反刍动物', '是黄褐色': '是黄褐色', '身上有暗斑点': '身上有暗斑点', '身上有黑色条纹': '身上有黑色条纹',
  225. '有长脖子': '有长脖子', '有长腿': '有长腿', '不会飞': '不会飞', '会游泳': '会游泳', '有黑白二色': '有黑白二色', '善飞': '善飞', '是哺乳动物': '是哺乳动物',
  226. '是鸟': '是鸟', '是食肉动物': '是食肉动物', '是蹄类动物': '是蹄类动物', '金钱豹': '金钱豹', '虎': '虎', '长颈鹿': '长颈鹿', '斑马': '斑马',
  227. '鸵鸟': '鸵鸟', '企鹅': '企鹅', '信天翁': '信天翁'}
  228. root = Tk()
  229. root.title('夏雨花费脑筋的动物专家识别系统')
  230. root.geometry('900x600')
  231. frame1 = Frame(root, relief=RAISED)
  232. frame1.place(relx=0.0)
  233. frame3 = Frame(root, relief=RAISED)
  234. frame3.place(relx=0.2)
  235. frame4 = Frame(root, relief=RAISED)
  236. frame4.place(relx=0.4,relheight=0.4,width=300)
  237. frame2 = Frame(root, relief=GROOVE)
  238. frame2.place(relx=0.8)
  239. Lstbox1 = Listbox(frame1)
  240. Lstbox1.pack()
  241. Lstbox2 = Listbox(frame3)
  242. Lstbox2.pack()
  243. txt=Text(frame4)
  244. txt.pack()
  245. entry = Entry(frame2)
  246. entry.pack()
  247. btn1 = Button(frame2, text='初始化', command=lambda: ini1(data_process_list, data_result_list))
  248. btn1.pack(fill=X)
  249. btn2 = Button(frame2, text='添加', command=ins)
  250. btn2.pack(fill=X)
  251. btn3 = Button(frame2, text='添加2', command=ins2) # 添加和插入功能实质上是一样的
  252. btn3.pack(fill=X)
  253. btn4 = Button(frame2, text='修改', command=updt)
  254. btn4.pack(fill=X)
  255. btn9 = Button(frame2, text='修改2', command=updt1)
  256. btn9.pack(fill=X)
  257. btn5 = Button(frame2, text='删除', command=delt)
  258. btn5.pack(fill=X)
  259. btn6 = Button(frame2, text='清空', command=clear)
  260. btn6.pack(fill=X)
  261. btn7 = Button(frame2, text='查找', command=lambda:find_data(list_data))
  262. btn7.pack(fill=X)
  263. btn8 = Button(frame2, text='加入', command=plus)
  264. btn8.pack(fill=X)
  265. # 最终结果列表
  266. root.mainloop()

 其实也是参照了其他博主的代码,然后改了一些,添加了一些自己的东西

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/383380
推荐阅读
相关标签
  

闽ICP备14008679号