人机交互程序 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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
Django数据库表反向生成实例解析
Feb 06 Python
python保存网页图片到本地的方法
Jul 24 Python
opencv python 图像去噪的实现方法
Aug 31 Python
用Python实现大文本文件切割的方法
Jan 12 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
Python APScheduler执行使用方法详解
Dec 10 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脚本的10个技巧(4)
2006/10/09 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
微信小程序多张图片上传功能
2017/06/07 Javascript
vue组件的写法汇总
2018/04/12 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
Spy++的使用方法及下载教程
2021/01/29 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
高中生学习生活的自我评价
2013/11/27 职场文书
安全生产检讨书
2014/01/21 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
读书笔记格式
2015/07/02 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
django中websocket的具体使用
2022/01/22 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫