人机交互程序 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中的序列化存储的方法
Apr 28 Python
python函数局部变量用法实例分析
Aug 04 Python
详解Python验证码识别
Jan 25 Python
利用Python破解验证码实例详解
Dec 08 Python
python实现下载文件的三种方法
Feb 09 Python
python3 拼接字符串的7种方法
Sep 12 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python -m参数原理及使用方法解析
Aug 21 Python
Python实现石头剪刀布游戏
Jan 20 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
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
初识ThinkPHP控制器
2016/04/07 PHP
实例讲解php数据访问
2016/05/09 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
新郎父亲婚宴答谢词
2014/01/11 职场文书
公司合作意向书
2014/04/01 职场文书
领导班子整改措施
2014/10/24 职场文书
同意转租证明
2015/06/24 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
Apache自带的ab压力测试工具的实现
2022/07/23 Servers