问答机器人从0到1 06

问答机器人从0到1 06

#结束程序运行有问题sys.exit()当用户正确输入问题并回答了的时候再次输入$则无法使用
import re,sys,random#导入模块
from time import strftime,gmtime
import difflib
f=open('main.txt','r',encoding='utf-8')#以读取的方式打开txt数据库
main=f.read()#读取txt文件到缓存并赋值给main
dim_nub=0#定义模糊搜索开关
writer_nub=0
def welcome():
    print('先生,输入$可以关闭我嚛,模糊搜索已开启,输入&关闭')
    time_return()#时间问候
    birthday_return()#生日提醒
    wait_enter()
    #while True:
def wait_enter():
    global writer_nub
    if writer_nub==5:
        print('进入编辑模式成功!!')
        write_info()    
    question=input('...')#等待用户输入问题
    if question=='':
        pop(question,'用户直接回车')
        writer_nub+=1
        return_word('不可以直接回车哟')   
    open_function(question)
        
def open_function(function):
    global dim_nub
    if function=='$':
        print('后会有期!')
        quit()#结束程序运行
        
    elif function=='&':
        if dim_nub==1:
            return_word('模糊搜索已关闭,无需再次关闭')
        else:
            dim_nub=1
            return_word('模糊搜索已关闭,输入*开启')
    elif function=='*':
        if dim_nub==0:
            return_word('模糊搜索已开启,无需再次开启')
        else:
            dim_nub=0
            return_word('模糊搜索已开启,输入&可再次关闭')
    else:
        if dim_nub==0:
            trends(function)
            dim(function)
        elif dim_nub==1:
            trends(function)
            find_return(function)
def trends(word):
    key_word_time=['时间','现在几点了','现在几点','time','what time','现在几点了?','几点了?','几点了','几点?','几点']
    if word in key_word_time:
        return_word(strftime("%Y年%m月%d日 %H:%M"))
    else:
        pass
def birthday_return():
    f=open('身份证.txt','r',encoding='utf-8')#以读取的方式打开txt数据库
    main=f.read()#读取txt文件到缓存并赋值给main
    name=re.findall('\n(.*?)@',main,re.S)#问题列表
    answers=re.findall('@(.*?)\n',main,re.S)#回答列表
    days=[]#每个人的生日日期
    happy_peopel_now=''#初始化字符串今天生日的人
    #祝福别人生日快乐的语句
    happy_centence=['祝你坚强,祝你可爱,祝你一生被爱,生日快乐。','喜怒哀乐因为你,欢欣雀跃也为你,你就是我心情的遙控器。让我陪着你一起坚强,挽手一起度过风雨,生日快乐。','愿你无疾无忧,岁岁平安,愿你常有玩伴,常常快乐,愿你一生努力,一生被爱,愿你遇好人,读好书,看好景。生日快乐。','祝你从早上起床快乐到晚上进被窝,祝你生日快乐,祝你天天快乐。','没有原因你是宝物,世间万物我最偏爱你,祝你安宁,祝你自由,你仍旧是我心中无法承载的画卷,生日快乐。','直向西走,越过晨昏线,越过日界线,回到初识你的那一天,你说过要让我好好长大,你说过可以让我一直做个孩子,所以祝你生日快乐','新的一年,祝你去危就安,得偿所望,大小姐生日快乐。','祝你不止生日,还有除此之外的每一天都快乐。以及,但愿这漫长渺小的人生不负你每个光辉时分。']
    for answer in answers:#从身份证号码提取生日
        mouth=answer[10:14]
        days.append(mouth)
    data=strftime("%m%d")#获取今天日期
    dic = dict(map(lambda x,y:[x,y],name,days))#吧名字和生日键入字典(在这里没用以后会用)
    #print(dic)
    for i, day in enumerate(days):#在列表内通过日期的下标反推人名下标
        if day ==data:#换成今天的日期
            happy_name_list=name[i:i+1]#获取人名下标             
            if len(happy_name_list)==0:#判断是否多人生日
                happy_peopel_now=happy_name_list[0]+'\n'
            else:
                for happy_name in happy_name_list:
                    happy_peopel_now=happy_peopel_now+'\n'+happy_name
    if happy_peopel_now=='':#判断是否没人生日
        pass
    else: #提示用户
        return_word('提示你一下:今天生日的有{0}\n'.format(happy_peopel_now)+'我赌你没有准备礼物,我也没有,不过送你一句话:\n{}'.format(random.choice(happy_centence)))

def dim(word):#定义模糊搜索关键字
    keywords=re.findall('\n(.*?)@',main,re.S)#问题列表
    answers=re.findall('@(.*?)\n',main,re.S)#回答列表
    value=keywords+answers#合并问题和回答也就是正向和逆向搜索
    return_words=difflib.get_close_matches(word,value,10, cutoff=0.6)#模糊匹配
    nub=int(len(return_words))#判断有多少给合适条件
    if nub==1:#判断是否有多个回答
        for return_word_dim in return_words:
            find_return(return_word_dim)#得到模糊问题
    elif nub==0:
        pop(word,'模糊匹配失败')
        return_word('worry,数据库模糊匹配失败....')
    else:
        dim_more(return_words)#跳转到多个匹配结果处理


def dim_more(key):#模糊搜索多个匹配结果处理
    try:
        a=key[0]#获取每一个数据
        b=key[1]
        c=key[2]
        key_nub=input('你可能想问:\n1.{}\n2.{}\n3.{}\n'.format(a,b,c)+'..:输入序列号查看结果')
        try:#尝试把key_nub转换为整型,并执行匹配操作
            key_nub=int(key_nub)
            if key_nub==1:#根据输入序号传递问题
                find_return(a)
            elif key_nub==2:
                find_return(b)
            elif key_nub==3:
                find_return(c)
                
            else:#输入其他数值后跳转
                return_word('worry,请输入正确数值,正在跳转....')#输入错误跳转
        except:
            pop(key,'模糊搜索输入其他字符')
            return_word('worry,输入非法字符,正在跳转....')
    except:
        d=key[0]
        find_return(d)
def time_return():
    data=strftime("%Y年%m月%d日 %H:%M")#获取当前时间
    f=open('日志.txt','a')
    f.write('时间:{}\n'.format(data))#向日志中写入时间
    f.close
    print('当前日期为{}'.format(data))#打印当前时间
    hour=int(strftime("%H"))#获取当前小时
    if 4<hour<12:#不同的时间段不同回答
        print('上午好,先生')
    elif 11<hour<17:
        print('中午好,先生')
    elif 16<hour<24:
        print('晚上好')
    else:
        print('这么晚还不睡,和我的粑粑一起变秃头小宝贝叭~~~')
def find_return(question):
    try:
        #通过正则查找方便快捷
        try:#正向查找
            
            answer=re.findall('{}@(.*?)\n'.format(question),main,re.S)[0]#通过问题寻找答案
            pop(question,answer)
            return_word(answer)#打印回答
        except:#反向查找
            answer=re.findall('\n(.*?)@{}\n'.format(question),main)[0]#通过答案寻找问题
            pop(question,answer)
            return_word(answer)
    except:
        turn='没有找寻到答案,请换个说法试试:-)正在跳转....'
        pop(question,'数据库无答案')
        return_word(turn)
        
def return_word(word):
    print('>>>{}'.format(word))
    wait_enter()#跳转等待页面
def pop(q,w):
    f=open('日志.txt','a')
    f.write('问:{}---答:{}\n'.format(q,w))#向日志中写入对话流
    f.close()
def write_info():
    global writer_nub
    q=input('q:')
    a=input('a:')
    if q=='':
        writer_nub=0#退出编辑模式
        wait_enter()
    else:
        f=open('核准数据库.txt','a')
        f.write('{}@{}\n'.format(q,a))#把编辑模式对话流写入需要核准数据库
        f.close()
        write_info()
welcome()


本次新增1.拥有日志2.连续输入5次回车即可进入编辑模式,编辑模式中所有对话将存入核准数据库中

下一章将会增加管理员模式,图就不附上了。。。掰掰ヾ(•ω•`)o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值