弱人工智能

最近憋了这么久,自己开发了一个本地人工智能(算不上真正的人工智能,只是一个问答机器人)有些繁琐,功能太多了,没法一个个解释,直接上代码

import re
import random
import time
from time import strftime,gmtime
import difflib#模糊匹配库
f=open('main.txt','r',encoding='utf-8')#读取本目录下main.txt数据库
main=f.read()#读取数据库
times=0#定义询问次数
mistake=0#定义非法询问
mid=0#初始化模糊搜索开关
sen=['风吹着我单薄的衣衫,我一个人走在想你的路上,又温暖,又凄凉。','爱一个人不是要拥有他,只要在远方默默地注视他,也就心满意足。','我现在,唯一拿的起放不下的是筷子,唯一陷进去出不来的是被窝。','男人喜欢漂亮脸蛋,女人喜欢甜言蜜语。所以女人化妆,男人撒谎。','叶子的离开,是风的追求,还是树的不挽留','风告诉我,美好总是在远方,所以它会一直不停的寻找。。。漂流的瓶子固执的躺在沙滩的怀抱,在等待,等待有一天美好会回来,所以一直等待。。。','早知如此绊人心,何如当初莫相识。','乱世浮尘,不堪遥望,唯有情意,晨光依旧。','如今最好,别说来日方长,时光难留,只有一去不返。','是谁把光阴剪成了烟花,一瞬间,看尽繁华。是谁把思念翻起了浪花,一转身,浪迹天涯。','一花一世界,一叶一追寻。一曲一场叹,一生为一人。','时光瘦,指缝宽,你的微笑始终向暖,赐了我一晌贪欢。','宠辱不惊,看庭前花开花落,去留无意,望天上云卷云舒。','永远太远,我们都承诺不起。时光变换,若干年后,变了的恐怕不只是容颜。','一朝春去红颜老,花落人亡两不知。','再美好也经不住遗忘,再悲伤也抵不过时间。','就算世界再荒芜,也总会有一个人是你的信徒。']#定义佳句


def welcome():#欢迎界面
    print('Hello!'+'\n'+'输入\'$\'可以关闭我,当前模糊匹配已开启,输入\'&\'可以关闭')#实现提示用户    
    data=strftime("%Y/%m/%d %H:%M")#获取当前时间
    time=int(strftime("%H"))#获取当前小时
    print('..:现在是'+data)#向用户反馈时间并更具不同时间段反馈不同内容
    if 5<time<10:#早上
        print('..:早上好呀,新的一天开始了,要努力唷~')
    if 9<time<13:#中午
        print('..:快到吃饭的点了,想好吃什么了吗?')
    if 12<time<15:#午觉
        print('..:我的麻麻告诉我这个时间段该午休咯....')
    if 14<time<18:#下午
        print('..:下午到了,要努力工作丫~')
    if 17<time<25:#晚上
        print('..:时候不早了,吃完饭就睡了吧,记住:睡前擦香香,会变更漂亮')
    if -1<time<3:
        print('..:这么晚还不睡,和我的爸爸一起变秃头吧.....')
    if 2<time<6:
        print('..:已经这个点了,别睡了了吧,通宵hhhhhhhhh....')
    mis()


def mis():#问答主界面
    while True:#实现循环对话
        key=input('User:')#等待用户输入,
        global mistake#定义全局变量
        global times
        global mid#是否开启模糊匹配开关
        if key=='$':
            print('美好的时光总是短暂的,再见咯~~~'+'\n'+random.choice(sen))
            break
        if key=='&':
            if mid==1:#模糊搜索关闭情况下提示
                print('..:提示:模糊搜索已关闭,无需再次关闭....')
                continue
            else:#关闭模糊搜索
                mid=1#关闭模糊搜索数值重置为1,关闭模糊搜索
                print('..:提示:关闭成功!!输入\'*\'便可打开')
                continue
        if key=='*':
            if mid==0:#模糊搜索开启情况下提示
                print('..:提示:模糊搜索已开启,无需再次开启....')
                continue
            else:#开启模糊搜索
                mid=0#关闭模糊搜索数值重置为0,开启模糊搜索
                print('..:提示:开启成功!!输入\'*\'可以再次关闭')
                continue
        if key=='':
            if mistake==0:
                print('..:不可以直接输入回车哟~~')
            if mistake==1:
                print('..:孩子乖,别闹~~~~~') 
            if mistake==2:
                print('..:别这样,SB')
            if mistake>=3:
                print('..:拜拜你个SB')
                break
            mistake+=1#非法询问累计
            continue
        decide(key,mid)#实现简单的操作执行        
        times+=1#询问次数累计
        mistake=0#一次正确输入则清零非法输入次数


def decide(key,mid):#实现模糊搜索过滤
    if mid==0:
        dim(key)#向模糊搜索传入问题
    else:#mid数值被重置,直接搜索,跳过模糊搜索
        find(key)


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 in return_words:
            find(return_word)#得到模糊问题
    elif nub==0:
        print('..:worry,数据库模糊匹配失败....')
    else:
        dim_more(return_words)#跳转到多个匹配结果处理


def dim_more(key):#模糊搜索多个匹配结果处理
    try:
        a=key[0]#获取每一个数据
        b=key[1]
        c=key[2]
        key_nub=input('你可能想问:'+'\n'+'1:'+a+'\n'+'2:'+b+'\n'+'3:'+c+'\n'+'..:输入序列号查看结果')
        try:#尝试把key_nub转换为整型,并执行匹配操作
            key_nub=int(key_nub)
            if key_nub==1:#根据输入序号传递问题
                find(a)
            elif key_nub==2:
                find(b)
            elif key_nub==3:
                find(c)
                
            else:#输入其他数值后跳转
                print('..:worry,请输入正确数值,正在跳转....')#输入错误跳转
        except:
            print('..:worry,输入非法字符,正在跳转....')
    except:
        d=key[0]
        find(d)
def find(key):#定义查找函数
    try:
        try:#正向查找
            answer=re.findall('{}@(.*?)\n'.format(key),main)#正向查找回答
            nub=int(len(answer))
            if nub!=1:#判断是否有多个回答
                code=input(answer[0]+'     回车查看更多回答'+'\n')#判断是否打印多个回答
                if code=='':#打印                                       
                    for All in answer:#循环打印多个回答            
                        print('...:'+All)#实现打印所有回答
                else:
                    #print('\n'+'..:')
                    mis()
                    
                
            else:
                print('..:'+answer[0])
        except:#反向查找
            answer=re.findall('\n(.*?)@{}'.format(key),main)#查找回答      
            print(answer[0])
    except:#数据库没有的打印错误
        print('...:'+'worry,数据库没有答案,正在跳转....')      
welcome()


至于数据库嘛,我没有连接,而是读取的本地txt文件
txt数据库格式为:问题@你想要的回答
数据库我就不发了,有想要的小伙伴加我QQ2113365920
我私发,再贴一下效果图吧,亲测可用,人头担保
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值