人机交互程序 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入门之语句(if语句、while语句、for语句)
Jan 19 Python
Python编程入门的一些基本知识
May 13 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
基于Python实现的微信好友数据分析
Feb 26 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
python查看模块,对象的函数方法
Oct 16 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
解决python线程卡死的问题
Feb 18 Python
python能自学吗
Jun 18 Python
在python3.9下如何安装scrapy的方法
Feb 03 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
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
简单的js表格操作
2016/09/24 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
python基础教程之五种数据类型详解
2017/01/12 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python读取指定字节长度的文本方法
2019/08/27 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
python读取ini配置文件过程示范
2019/12/23 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
美国在线家具网站:GDFStudio
2021/03/13 全球购物
成立公司计划书
2014/05/07 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
销售督导岗位职责
2015/04/10 职场文书
离婚案件答辩状
2015/05/22 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
vue elementUI批量上传文件
2022/04/26 Vue.js