Python实战:基于文件读写的简易聊天机器人
本文介绍如何利用Python的文件读写功能,结合字典匹配与定时轮询机制,开发一个简易的本地聊天机器人。通过监听指定文本文件的变化,程序可实现预设回复或复读功能,适合Python初学者理解IO操作与基础逻辑控制。
一、前言
在初步掌握Python文件读写操作后,本文通过一个趣味项目来巩固所学知识,并复习相关基础概念。
import time
doc_local='D:\learning_folder\interaction.txt'
def iRead():
fr = open(doc_local, 'r')
message=fr.read()
return message
def iWrite(message):
fw = open(doc_local, 'w')
fw.write(message)
fw.close()
def dTime(num):
a=time.time()
b=time.time()
while (b-a)<num:
b=time.time()
return None
answer={'i am temmie':'you are temmie? who am i?','temmie':'temmie!!!','wang!':'wangwangwang!!!'}
iWrite('test begin')
message0 = iRead()
print(message0)
while True:
dTime(1.0000000)
mes = iRead()
if mes!=message0:
v=answer.get(mes)
if v==None:
if mes=='q' :
print('退出运行')
break
else:
print('message:', mes, end='\t')
a_out=('temmie say again:{0}'.format(mes))
message0 = a_out
iWrite(a_out)
print(a_out)
else:
print('message:', mes, end='\t')
b_out=('{0}'.format(answer.get(mes)))
message0 =b_out
iWrite(b_out)
print('answer:',b_out)
该项目的运行逻辑如下:用户在指定位置的记事本文件中输入内容并保存,程序会读取该文件并生成回复。若输入内容匹配预设字典中的键,则返回对应的预设回答;若未匹配到任何预设内容,程序将作为“复读机”重复用户输入的内容。
代码实现中,每次读取到的输入与生成的回复均会被打印输出,以便观察交互过程。
二、效果演示

除了基础对话,该机器人还支持进行“接龙”游戏(如crepper或成语接龙)。如果用户时间充裕,可以尝试通过这种方式与机器人进行更复杂的互动。

三、完整代码
核心代码主要包含三个自定义函数,分别负责读取文件内容、写入文件内容以及实现定时等待功能。
def iRead():
fr = open(doc_local, 'r')
message=fr.read()
return message
def iWrite(message):
fw = open(doc_local, 'w')
fw.write(message)
fw.close()
def dTime(num):
a=time.time()
b=time.time()
while (b-a)<num:
b=time.time()
return None
其中,`answer`变量被定义为一个字典,用于存储预设的问答对。
程序启动时,首先调用写入函数将初始内容“test begin”写入文件,以清空之前的历史记录并提示程序开始运行。随后读取文件内容,此时读取到的值应为'test begin'。
iWrite('test begin')
message0 = iRead()
接下来进入一个无限循环,只有当检测到用户输入字符'q'时,循环才会终止并退出程序。
在循环内部,程序每隔1秒读取一次文件内容。如果文件内容与上一次读取的值相同,则视为用户未进行新输入;如果文件内容发生变化,则将该变化内容作为键在预设字典中进行检索。若字典返回None,表示无对应预设答案,程序执行复读逻辑;若返回具体值,则输出该预设回复。
while True:
dTime(1.0000000)
mes = iRead()
if mes!=message0:
v=answer.get(mes)
if v==None:
if mes=='q' :
print('退出运行')
break
else:
print('message:', mes, end='\t')
a_out=('temmie say again:{0}'.format(mes))
message0 = a_out
iWrite(a_out)
print(a_out)
else:
print('message:', mes, end='\t')
b_out=('{0}'.format(answer.get(mes)))
message0 =b_out
iWrite(b_out)
print('answer:',b_out)
到此这篇关于Python实战整活之聊天机器人的文章就介绍到这了,更多相关python聊天机器人内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









