人机交互程序 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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
Python验证码识别的方法
Jul 10 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
pyqt5之将textBrowser的内容写入txt文档的方法
Jun 21 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python如何根据时间序列数据作图
May 12 Python
深入理解python多线程编程
Apr 18 Python
Python日志模块logging用法
Jun 05 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php 信息采集程序代码
2009/03/17 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
Python中作用域的深入讲解
2018/12/10 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
总经理岗位职责
2013/11/09 职场文书
教师党性分析材料
2014/02/04 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
教导处教学工作总结
2015/08/12 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
Go语言入门exec的基本使用
2022/05/20 Golang