人机交互程序 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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
Python列表append和+的区别浅析
Feb 02 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python中asyncio模块的深入讲解
Jun 10 Python
Win10环境python3.7安装dlib模块趟过的坑
Aug 01 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
python实现图片素描效果
Sep 26 Python
python包的导入方式总结
Mar 02 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实现从上传文件创建缩略图的方法
2015/04/02 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
python实现获取Ip归属地等信息
2016/08/27 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python定时器实例代码
2017/11/01 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
python爬虫添加请求头代码实例
2019/12/28 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
Python restful框架接口开发实现
2020/04/13 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
python的pip有什么用
2020/06/17 Python
Python模块常用四种安装方式
2020/10/20 Python
美术社团活动总结
2014/06/27 职场文书
四查四看整改措施
2014/09/19 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
考博导师推荐信范文
2015/03/27 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
公司仓库管理制度
2015/08/04 职场文书
学习计划是什么
2019/04/30 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
修改并编译golang源码的操作步骤
2021/07/25 Golang
Go 语言中 20 个占位符的整理
2021/10/16 Golang
详解python的异常捕获
2022/03/03 Python