人机交互程序 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 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Python中的类学习笔记
Sep 23 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
python检测某个变量是否有定义的方法
May 20 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
python实现AES和RSA加解密的方法
Mar 28 Python
python 对字典按照value进行排序的方法
May 09 Python
python实现windows倒计时锁屏功能
Jul 30 Python
Python Flask实现进度条
May 11 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/20 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
短信提示使用 特效
2007/01/19 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python简明入门教程
2015/08/04 Python
怎样使用Python脚本日志功能
2016/08/14 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
python3实现猜数字游戏
2020/12/07 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
办公室秘书自我鉴定
2014/01/18 职场文书
开门红主持词
2014/04/02 职场文书
2014年冬季防火方案
2014/05/21 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
2014年实习生工作总结
2014/11/27 职场文书
童年读书笔记
2015/06/26 职场文书