人机交互程序 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格式化字符串实例总结
Sep 28 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
django 做 migrate 时 表已存在的处理方法
Aug 31 Python
Pandas 缺失数据处理的实现
Nov 04 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
pytorch forward两个参数实例
Jan 17 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
详解分布式系统中如何用python实现Paxos
May 18 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
php生成xml简单实例代码
2009/12/16 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
Joomla开启SEF的方法
2016/05/04 PHP
PHP微信API接口类
2016/08/22 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python备份Mysql脚本
2008/08/11 Python
利用python获得时间的实例说明
2013/03/25 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
python集合类型用法分析
2015/04/08 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Django实现学员管理系统
2019/02/26 Python
python输入错误后删除的方法
2019/10/12 Python
python实现复制文件到指定目录
2019/10/16 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
毕业研究生的自我鉴定
2013/11/30 职场文书
公司行政经理岗位职责
2013/12/24 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
诉讼授权委托书
2014/10/15 职场文书
员工手册董事长致辞
2015/07/29 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书