人机交互程序 python实现人机对话


Posted in Python onNovember 14, 2017

自己随便写了一个人机交互的程序。不存在任何智能,只是可以识别姓名,可以记录对话内容,并保存等到下一次交互时加载。 (推荐面向对象版本)

# hello.py 
# 这是老早写的。不过今天加入了Pickle,然后润色了一下。 
# 可能有点无聊(不推荐使用) 
 
import pickle 
import os.path 
 
def search(x, data): 
  for k, d in enumerate(data): 
    if x == d['name']: 
      return k, d 
 
def save_data(A,pklname): 
  with open(pklname, 'wb') as pkl: 
    pickle.dump(A, pkl) 
 
def load_data(pklname): 
  with open(pklname, 'rb') as pkl: 
    return pickle.load(pkl) 
 
# communicating with computer 
data=[] if not os.path.isfile('data') else load_data('data') 
 
while True: 
  print('Welcome! [type "quit" if you want to quit.]') 
  name=input('--What is your name?\n--') 
  if name in {'quit','Quit','q','Q'}: 
    print('[You quit]') 
    break 
  if not search(name, data): 
    print('--Welcome, '+name+ '. I will remember you name.') 
    d={'name':name,'age':0,'history':[]} 
    data.append(d) 
  else: 
    print('--Hi, '+name+'. How I miss you.') 
 
  k, d=search(name, data) 
  while d['age']==0: 
    age=input('--How old are you?[I will repeat until you respond!]') 
    try: 
      if int(age)==0: continue 
      d['age']=int(age); data[k]=d 
    except: 
      pass 
  while True: 
    y=input('--Chan I help you? [yes/no]') 
    while not y:   
      y=input('--Yes or no?') 
    d['history'].append(y); data[k]=d 
    if y in {'no','No','n','N'}: 
      print('--%s.'%y) 
      print('--Bye bye.') 
      break 
    elif y in {'yes','Yes','y','Y'}: 
      print('--%s.'%y) 
      print('I am pleased to serve you.')     
    else: 
      print('I am sorry. I can not understand what you said.') 
      break     
 
# save data 
y=input('--Do you want to save the data? [yes/no]') 
while not y:   
  y=input('--Yes or no?')         
if y in {'no','No','n','N'}: 
  print('--%s. [You say no.]'%y) 
elif y in {'yes','Yes','y','Y'}: 
  print('--%s. [the data is saved in file named "data".]'%y) 
  save_data(data, 'data') 
else: 
  print('I am sorry. I can not understand what you said. data are not saved.')

下面是hello.py的面向对象编程版本(推荐)

# hello.py 
 
import pickle 
import os.path 
 
def search(x, data): 
  for k, d in enumerate(data): 
    if x == d['name']: 
      return k, d 
 
class Hello: 
  def __init__(self, name='', data=None): 
    self.name = name 
    self.data = data 
 
  def __getstate__(self): 
    return self.data 
 
  def __setstate__(self, data): 
    self.data = data 
 
  def mainloop(self): 
 
    while True: 
      print('Welcome! [type "quit" if you want to quit.]') 
      name=input('--What is your name?\n--') 
      if name in {'quit','Quit','q','Q'}: 
        print('[You quit]') 
        break 
      if not search(name, self.data): 
        print('--Welcome, '+name+ '. I will remember you name.') 
        d={'name':name,'age':0,'history':[]} 
        self.data.append(d) 
      else: 
        print('--Hi, '+name+'. How I miss you.') 
 
      k, d=search(name, self.data) 
      while d['age']==0: 
        age=input('--How old are you?[I will repeat until you respond!]') 
        try: 
          if int(age)==0: continue 
          d['age']=int(age); self.data[k]=d 
        except: 
          pass 
      while True: 
        y=input('--Chan I help you? [yes/no]') 
        while not y: 
          y=input('--Yes or no?') 
        d['history'].append(y); self.data[k]=d 
        if y in {'no','No','n','N'}: 
          print('--%s.'%y) 
          print('--Bye bye.') 
          break 
        elif y in {'yes','Yes','y','Y'}: 
          print('--%s.'%y) 
          print('I am pleased to serve you.') 
        else: 
          print('I am sorry. I can not understand what you said.') 
          break 
 
    # save data 
    y=input('--Do you want to save the data? [yes/no]') 
    while not y: 
      y=input('--Yes or no?') 
    if y in {'no','No','n','N'}: 
      print('--%s. [You say no.]'%y) 
    elif y in {'yes','Yes','y','Y'}: 
      print('--%s. [the data is saved in file named "data.pkl".]'%y) 
      with open('data.pkl', 'wb') as fo: 
        pickle.dump(self, fo) 
    else: 
      print('I am sorry. I can not understand what you said. data are not saved.') 
    # communicating with computer 
 
 
try: 
  with open('data.pkl', 'rb') as fo: 
    hello=pickle.load(fo) 
except: 
  hello=Hello('ai',[]) 
 
hello.mainloop()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符串中查找子串小技巧
Apr 10 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
浅谈python中的正则表达式(re模块)
Oct 17 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
Flask框架Flask-Login用法分析
Jul 23 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
Python更换pip源方法过程解析
May 19 Python
Python Tornado核心及相关原理详解
Jun 24 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
用Python制作灯光秀短视频的思路详解
Apr 13 Python
python密码错误三次锁定(实例讲解)
Nov 14 #Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 #Python
python+opencv实现的简单人脸识别代码示例
Nov 14 #Python
解读! Python在人工智能中的作用
Nov 14 #Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 #Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 #Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 #Python
You might like
Laravel5权限管理方法详解
2016/07/26 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
EasyUI创建人员树的实例代码
2017/09/15 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python合并文本文件示例
2014/02/07 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
出纳员岗位责任制
2014/02/11 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
教师个人事迹材料
2014/12/17 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
超市店长竞聘书
2015/09/15 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL