一、前言
本篇综合运用前面全部 Python 基础知识点:循环、条件判断、列表字典、函数、输入输出,打造一款控制台文字对话机器人。无需第三方库,纯原生代码,运行即可和机器人聊天,适合新手综合练手。
二、整体设计思路
使用字典存储问答匹配库,key 为用户输入关键词,value 为机器人回复
循环对话,输入
退出即可结束程序支持模糊关键词匹配、多随机回复、兜底未知话术
封装对话函数,结构清晰易扩展
三、完整可运行代码
python
运行
import random
# 机器人问答知识库
chat_dict = {
"你好": ["你好呀!很高兴和你聊天~", "哈喽,有什么我能帮你的吗?", "你好,今天学习Python了吗?"],
"早上好": ["早安!新的一天也要好好写代码", "早上好,今天也要加油学习"],
"晚上好": ["晚上好,记得早点休息,别熬夜敲代码", "晚上好,今天学到什么新知识了?"],
"你是谁": ["我是Python简易聊天机器人,由代码编写而成", "我是你的编程学习助手"],
"Python": ["Python简单易学,适合自动化、爬虫、数据分析", "Python用途超多,办公自动化、做GUI、爬虫都能用"],
"代码": ["多敲代码才能熟练,练习小项目提升最快", "写代码遇到报错别慌,学会看异常提示"],
"再见": ["拜拜,下次再来聊天!", "再见,祝你学习顺利!"],
"几岁": ["我没有年龄,只要代码运行我就存在", "我是程序,不存在年龄哦"],
"吃饭": ["你快去好好吃饭吧,吃饱才有力气学编程", "今天吃什么好吃的啦?"],
"累了": ["那就休息一会,学习不用急于一时", "放松下再继续敲代码,效率更高"]
}
# 兜底随机回复(匹配不到关键词时使用)
default_reply = [
"这个问题我还不会,换个话题聊聊吧",
"我暂时听不懂,我们聊聊Python怎么样?",
"能换个说法问我吗?我理解能力有限~"
]
def get_bot_reply(user_text):
"""根据用户输入匹配机器人回复"""
user_text = user_text.strip()
# 遍历知识库,模糊匹配关键词
for keyword, reply_list in chat_dict.items():
if keyword in user_text:
# 随机挑选一条回复
return random.choice(reply_list)
# 无匹配则返回兜底语句
return random.choice(default_reply)
# 程序主循环
if __name__ == "__main__":
print("===== Python文字聊天机器人 =====")
print("提示:输入【退出】即可结束对话\n")
while True:
user_input = input("你:")
# 判断是否退出程序
if user_input == "退出":
print("机器人:再见!期待下次和你聊天")
break
# 获取机器人回复并打印
bot_msg = get_bot_reply(user_input)
print(f"机器人:{bot_msg}")
四、功能讲解
1. 问答知识库 chat_dict
字典结构:关键词: [多条随机回复],同一问题可以设置多种回答,避免对话单调。
你可以自由新增对话,示例:
python
运行
chat_dict["天气"] = ["今天天气怎么样?出门记得看天气预报", "不清楚当地天气,可以去查一下哦"]
2. random 随机回复
导入random内置库,random.choice(列表)每次随机抽取一条回复,对话更自然。
3. 模糊关键词匹配
判断用户输入包含关键词就触发回复,不用完全一模一样,例如输入你好呀、你好机器人都能匹配你好。
4. 无限对话循环 while True
程序持续接收输入,只有输入退出才执行break跳出循环,结束聊天。
5. 兜底回复机制
当输入内容不存在知识库关键词时,自动返回预设的默认话术,不会程序报错。
五、扩展升级 1:增加情绪判断
在原有代码基础上新增负面情绪识别,自动安慰用户
python
运行
# 在chat_dict上方新增负面关键词库
sad_words = ["难过", "伤心", "难受", "烦", "崩溃", "不会", "太难了"]
sad_reply = ["别难过,慢慢来,编程学习本来就有难度", "遇到困难很正常,多练几次就懂啦", "放平心态,一点点积累就会进步"]
# 修改get_bot_reply函数,增加情绪判断
def get_bot_reply(user_text):
user_text = user_text.strip()
# 先判断负面情绪
for word in sad_words:
if word in user_text:
return random.choice(sad_reply)
# 再匹配普通问答
for keyword, reply_list in chat_dict.items():
if keyword in user_text:
return random.choice(reply_list)
return random.choice(default_reply)
六、扩展升级 2:自动保存聊天记录到 txt
结合文件操作,把每一轮对话自动写入本地聊天记录.txt,永久留存对话:
在主循环内print(f"机器人:{bot_msg}")下方添加代码:
python
运行
# 保存对话记录
with open("聊天记录.txt", "a", encoding="utf-8") as f:
f.write(f"你:{user_input}\n机器人:{bot_msg}\n")
七、运行演示示例
plaintext
===== Python文字聊天机器人 =====
提示:输入【退出】即可结束对话
你:你好,我想学Python
机器人:哈喽,有什么我能帮你的吗?
你:Python代码好难,我有点烦
机器人:遇到困难很正常,多练几次就懂啦
你:再见
机器人:拜拜,下次再来聊天!
你:退出
机器人:再见!期待下次和你聊天
八、新手修改拓展教程
新增对话:直接在
chat_dict里添加一行关键词: [回复1,回复2]增加情绪安慰:复制情绪判断代码到函数内
保存聊天记录:添加文件写入代码
更改退出关键词:把判断条件
if user_input == "退出"改成别的文字,如if user_input == "拜拜"
九、常见问题
匹配失效:输入前后有空格,代码使用
.strip()清除空格解决回复永远同一套:忘记导入 random 库或未使用 choice 随机函数
聊天记录乱码:打开文件时必须添加
encoding="utf-8"无法退出:输入文字必须和判断关键词完全一致
十、下期预告
Python 系列入门篇到此全部完结,下一部分开启进阶拓展内容:NumPy 数组基础使用,进入数据分析板块。