人机交互程序 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抓取网页图片示例(python爬虫)
Apr 27 Python
Python实现获取网站PR及百度权重
Jan 21 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
深入理解python函数递归和生成器
Jun 06 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
python函数定义和调用过程详解
Feb 09 Python
没编程基础可以学python吗
Jun 17 Python
python如何对链表操作
Oct 10 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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
我的群发邮件程序
2006/10/09 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
python列表list保留顺序去重的实例
2018/12/14 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Python实现手绘图效果实例分享
2020/07/22 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
军训拉歌口号
2014/06/13 职场文书
新学期开学标语
2014/06/30 职场文书
新闻学专业求职信
2014/07/28 职场文书
参观邀请函范文
2015/02/02 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
小学校长个人总结
2015/03/03 职场文书
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python