人机交互程序 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 中文字符串的处理实现代码
Oct 25 Python
Python常见文件操作的函数示例代码
Nov 15 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python实现爬山算法的思路详解
Apr 09 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
Python Pandas数据结构简单介绍
Jul 03 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 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 csv操作类代码
2009/12/14 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
反腐倡廉警示教育活动总结
2014/05/05 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
离职报告范文
2014/11/04 职场文书
停课通知书
2015/04/24 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js
关于的python五子棋的算法
2022/05/02 Python