最近更新:Python零基础教程第十课 认识新朋友 模块和包
2025-12-26
最近更新:Python零基础教程第九课:犯错了怎么办?——错误处理
2025-12-26
2025-12-26
2025-12-26
最近更新:Python零基础教程第七课:我的第一个工具箱——函数
2025-12-26
浏览量:16 次 发布时间:2025-12-26 21:18 作者:明扬工控商城 下载docx
最近更新:Python零基础教程第十课 认识新朋友 模块和包
2025-12-26
最近更新:Python零基础教程第九课:犯错了怎么办?——错误处理
2025-12-26
2025-12-26
2025-12-26
最近更新:Python零基础教程第七课:我的第一个工具箱——函数
2025-12-26
欢迎来到第十一课。前面我们学习了Python的很多基础知识,今天我们要把这些知识用起来,做一个综合项目:智能聊天机器人。这个项目会用到我们学过的变量、条件判断、循环、列表、函数、文件操作和错误处理。
我们要做一个什么样的聊天机器人呢?
基本功能:能回答简单问题
扩展功能:能记住对话内容
特色功能:有不同性格模式
实用功能:能查询天气、计算等
通过这个项目,你会看到如何把学过的知识组合起来,做出一个真正有用的程序。
核心引擎:处理用户输入,生成回答
知识库:存储问题和答案
记忆系统:记住对话历史
功能模块:计算、天气查询等特殊功能
字符串处理
字典存储知识
列表存储历史
函数模块化设计
文件保存对话记录
让我们从最简单的版本开始。
第一步:创建新文件
新建文件,保存为"聊天机器人.py"
第二步:基础版代码
代码部分:
智能聊天机器人 1.0
def 显示欢迎():
print("=" * 50)
print(" 智能聊天机器人 v1.0")
print("=" * 50)
print("你好!我是你的智能助手。")
print("输入'退出'可以结束对话")
print("输入'帮助'可以查看帮助信息")
print("=" * 50)
def 获取回答(问题):
根据用户的问题返回回答
问题 = 问题.lower() 转换为小写,方便匹配
基础问答库
知识库 = {
"你好": ["你好!", "嗨!", "很高兴见到你!"],
"你叫什么名字": ["我叫小智,是你的智能助手。", "我是小智,很高兴为你服务。"],
"今天天气怎么样": ["今天天气不错,适合出门散步。", "天气预报说今天会下雨,记得带伞。"],
"你会做什么": ["我可以和你聊天,回答简单问题,还能帮你计算。", "我是你的助手,有什么需要帮忙的吗?"],
"谢谢": ["不客气!", "很高兴能帮到你!", "这是我的荣幸!"],
"再见": ["再见!期待下次聊天。", "拜拜!", "下次再见!"]
}
检查问题是否在知识库中
for 关键词, 回答列表 in 知识库.items():
if 关键词 in 问题:
import random
return random.choice(回答列表)
默认回答
默认回答库 = [
"这个问题很有趣,让我想想...",
"我不太明白你的意思,能换个说法吗?",
"这个问题我需要学习一下。",
"你可以问我一些简单的问题,比如天气、时间等。"
]
import random
return random.choice(默认回答库)
def 基础版机器人():
显示欢迎()
对话历史 = []
while True:
用户输入 = input("\n你:").strip()
if not 用户输入:
print("小智:你好像没有说话?")
continue
添加到历史
对话历史.append(f"你:{用户输入}")
特殊命令处理
if 用户输入 == "退出":
print("小智:再见!期待下次聊天。")
break
elif 用户输入 == "帮助":
print("小智:以下是我支持的命令:")
print(" - 退出:结束对话")
print(" - 帮助:显示帮助信息")
print(" - 历史:查看对话历史")
print(" - 时间:显示当前时间")
print(" - 计算:进行简单计算")
continue
elif 用户输入 == "历史":
if 对话历史:
print("\n对话历史:")
for 对话 in 对话历史[-5:]: 显示最近5条
print(f" {对话}")
else:
print("小智:还没有对话历史。")
continue
elif 用户输入 == "时间":
import datetime
当前时间 = datetime.datetime.now()
print(f"小智:现在是 {当前时间.strftime('%Y年%m月%d日 %H:%M:%S')}")
对话历史.append(f"小智:现在是 {当前时间.strftime('%Y年%m月%d日 %H:%M:%S')}")
continue
elif 用户输入.startswith("计算"):
简单计算功能
try:
表达式 = 用户输入[2:].strip() 去掉"计算"两个字
if 表达式:
结果 = eval(表达式)
print(f"小智:{表达式} = {结果}")
对话历史.append(f"小智:{表达式} = {结果}")
else:
print("小智:请在'计算'后面输入数学表达式,例如:计算 3+5*2")
except:
print("小智:计算错误,请输入有效的数学表达式。")
continue
获取回答
回答 = 获取回答(用户输入)
print(f"小智:{回答}")
添加到历史
对话历史.append(f"小智:{回答}")
限制历史长度
if len(对话历史) > 20:
对话历史 = 对话历史[-20:]
if name == "main":
try:
基础版机器人()
except KeyboardInterrupt:
print("\n\n检测到中断,程序结束。")
except Exception as e:
print(f"程序出错:{e}")
现在让我们增加更多功能,让机器人更聪明。
第三步:增强版代码
代码部分:
智能聊天机器人 2.0
import json
import random
import datetime
import os
class 智能聊天机器人:
def init(self, 名字="小智", 性格="友好"):
self.名字 = 名字
self.性格 = 性格
self.对话历史 = []
self.记忆文件 = "对话记忆.json"
self.加载记忆()
不同性格的回答风格
self.性格库 = {
"友好": {
"打招呼": ["你好!", "很高兴见到你!", "你好呀!"],
"告别": ["再见!", "期待下次聊天!", "拜拜!"],
"疑问": ["我不太明白,能再说一次吗?", "这个问题我需要想想。", "让我思考一下..."]
},
"幽默": {
"打招呼": ["哟!来啦!", "哎呀,是你呀!", "什么风把你吹来了?"],
"告别": ["溜了溜了!", "我闪!", "下次带点笑话来!"],
"疑问": ["你说啥?风太大听不清!", "这个问题...容我三思!", "我书读得少,你别骗我!"]
},
"严肃": {
"打招呼": ["您好。", "很高兴为您服务。", "请讲。"],
"告别": ["再见。", "对话结束。", "期待下次交流。"],
"疑问": ["请重新表述您的问题。", "这个问题需要更精确的描述。", "我不理解这个问题。"]
}
}
扩展知识库
self.知识库 = self.创建知识库()
def 创建知识库(self):
创建更丰富的知识库
return {
"问候": {
"patterns": ["你好", "嗨", "早上好", "下午好", "晚上好"],
"responses": self.性格库[self.性格]["打招呼"]
},
"名字": {
"patterns": ["你叫什么", "你是谁", "你的名字"],
"responses": [f"我叫{self.名字},是你的{self.性格}助手。"]
},
"功能": {
"patterns": ["你会做什么", "你能干什么", "你有什么功能"],
"responses": ["我可以聊天、回答问题、计算、查询天气,还能记住我们的对话!"]
},
"天气": {
"patterns": ["天气", "下雨", "晴天", "温度"],
"responses": ["今天天气不错。", "记得带伞,可能会下雨。", "气温适宜,适合外出。"]
},
"感谢": {
"patterns": ["谢谢", "感谢", "多谢"],
"responses": ["不客气!", "很高兴能帮到你!", "这是我的荣幸!"]
},
"告别": {
"patterns": ["再见", "拜拜", "下次见", "走了"],
"responses": self.性格库[self.性格]["告别"]
},
"时间": {
"patterns": ["时间", "几点", "日期"],
"responses": []
},
"计算": {
"patterns": ["计算", "等于", "算式"],
"responses": []
}
}
def 加载记忆(self):
从文件加载对话记忆
try:
if os.path.exists(self.记忆文件):
with open(self.记忆文件, "r", encoding="utf-8") as f:
self.对话历史 = json.load(f)
print(f"已加载 {len(self.对话历史)} 条历史记录")
else:
self.对话历史 = []
except:
self.对话历史 = []
def 保存记忆(self):
保存对话记忆到文件
try:
with open(self.记忆文件, "w", encoding="utf-8") as f:
json.dump(self.对话历史, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"保存记忆失败:{e}")
def 显示欢迎(self):
print("=" * 60)
print(f" 智能聊天机器人 {self.名字} v2.0")
print("=" * 60)
print(f"性格模式:{self.性格}")
print(f"记忆状态:已保存 {len(self.对话历史)} 条对话")
print("\n支持功能:")
print(" 1. 日常聊天")
print(" 2. 简单计算(例如:计算 3+5*2)")
print(" 3. 时间查询")
print(" 4. 天气讨论")
print(" 5. 对话记忆")
print("\n特殊命令:")
print(" - 帮助:显示帮助信息")
print(" - 历史:查看对话历史")
print(" - 保存:保存当前对话")
print(" - 清除:清除对话历史")
print(" - 模式:切换性格模式")
print(" - 退出:结束对话")
print("=" * 60)
def 获取回答(self, 问题):
核心回答引擎
问题 = 问题.lower().strip()
首先检查特殊模式
if self.检查计算模式(问题):
return self.处理计算(问题)
检查时间查询
if any(关键词 in 问题 for 关键词 in ["时间", "几点", "日期"]):
return self.获取时间()
遍历知识库寻找匹配
for 类别, 数据 in self.知识库.items():
for pattern in 数据["patterns"]:
if pattern in 问题:
if 数据["responses"]:
return random.choice(数据["responses"])
没有匹配,根据性格返回默认回答
if self.性格 in self.性格库:
return random.choice(self.性格库[self.性格]["疑问"])
return "这个问题很有趣,但我还在学习中。"
def 检查计算模式(self, 问题):
检查是否是计算问题
计算关键词 = ["计算", "等于", "加", "减", "乘", "除", "+", "-", "*", "/"]
return any(关键词 in 问题 for 关键词 in 计算关键词)
def 处理计算(self, 问题):
处理计算问题
try:
清理问题
表达式 = 问题
如果是"计算"开头,去掉这个词
if 问题.startswith("计算"):
表达式 = 问题[2:].strip()
提取数学表达式
import re
数学表达式 = re.findall(r'[-+]?[0-9]*\.?[0-9]+[+\-*/][-+]?[0-9]*\.?[0-9]+', 表达式)
if 数学表达式:
结果 = eval(数学表达式[0])
return f"{数学表达式[0]} = {结果}"
else:
尝试直接计算整个表达式
结果 = eval(表达式)
return f"{表达式} = {结果}"
except ZeroDivisionError:
return "错误:除数不能为零!"
except:
return "计算错误,请输入有效的数学表达式。"
def 获取时间(self):
获取当前时间
当前时间 = datetime.datetime.now()
时间格式 = 当前时间.strftime("%Y年%m月%d日 %H时%M分%S秒")
return f"现在是 {时间格式}"
def 显示历史(self):
显示对话历史
if not self.对话历史:
return "还没有对话历史。"
历史文本 = "\n最近的对话历史:\n"
for i, 对话 in enumerate(self.对话历史[-10:], 1): 显示最近10条
历史文本 += f"{i}. {对话}\n"
return 历史文本
def 添加对话(self, 用户输入, 机器人回答):
添加对话到历史
时间戳 = datetime.datetime.now().strftime("%H:%M")
对话记录 = f"[{时间戳}] 用户:{用户输入} -> {self.名字}:{机器人回答}"
self.对话历史.append(对话记录)
限制历史长度
if len(self.对话历史) > 100:
self.对话历史 = self.对话历史[-100:]
def 清除历史(self):
清除对话历史
self.对话历史 = []
if os.path.exists(self.记忆文件):
os.remove(self.记忆文件)
return "对话历史已清除。"
def 切换性格(self):
切换机器人性格
性格列表 = list(self.性格库.keys())
当前索引 = 性格列表.index(self.性格)
下一个索引 = (当前索引 + 1) % len(性格列表)
self.性格 = 性格列表[下一个索引]
self.知识库 = self.创建知识库()
return f"已切换到 {self.性格} 模式"
def 运行(self):
主运行循环
self.显示欢迎()
print(f"{self.名字}:{random.choice(self.性格库[self.性格]['打招呼'])}")
while True:
try:
用户输入 = input("\n你:").strip()
if not 用户输入:
print(f"{self.名字}:你好像没有说话?")
continue
处理特殊命令
if 用户输入 == "退出":
告别语 = random.choice(self.性格库[self.性格]["告别"])
print(f"{self.名字}:{告别语}")
self.保存记忆()
break
elif 用户输入 == "帮助":
self.显示欢迎()
continue
elif 用户输入 == "历史":
历史 = self.显示历史()
print(f"{self.名字}:{历史}")
continue
elif 用户输入 == "保存":
self.保存记忆()
print(f"{self.名字}:对话已保存到 {self.记忆文件}")
continue
elif 用户输入 == "清除":
确认 = input("确认清除所有对话历史?(y/n): ")
if 确认.lower() == "y":
结果 = self.清除历史()
print(f"{self.名字}:{结果}")
continue
elif 用户输入 == "模式":
结果 = self.切换性格()
print(f"{self.名字}:{结果}")
continue
获取回答
回答 = self.获取回答(用户输入)
print(f"{self.名字}:{回答}")
添加到历史
self.添加对话(用户输入, 回答)
except KeyboardInterrupt:
print(f"\n{self.名字}:检测到中断,正在保存对话...")
self.保存记忆()
break
except Exception as e:
print(f"{self.名字}:出错了 - {e}")
def 主程序():
print("正在启动聊天机器人...")
选择性格
print("\n请选择机器人性格:")
print("1. 友好模式")
print("2. 幽默模式")
print("3. 严肃模式")
性格映射 = {"1": "友好", "2": "幽默", "3": "严肃"}
while True:
选择 = input("\n请输入选择 (1-3,默认1): ").strip()
if not 选择:
性格 = "友好"
break
elif 选择 in 性格映射:
性格 = 性格映射[选择]
break
else:
print("无效选择,请重新输入。")
创建机器人实例
机器人 = 智能聊天机器人(名字="小智", 性格=性格)
运行机器人
机器人.运行()
if name == "main":
try:
主程序()
except Exception as e:
print(f"程序启动失败:{e}")
input("按回车键退出...")
这个聊天机器人还可以继续扩展,以下是一些想法:
天气预报:使用天气API获取真实天气
新闻摘要:获取最新新闻
翻译功能:中英文翻译
提醒功能:设置定时提醒
学习新问答:当机器人不知道答案时,让用户教它
记忆用户名:记住用户的名字和喜好
上下文理解:理解对话的上下文
使用Tkinter创建窗口界面
添加表情和动画
语音输入和输出
聊天机器人可以应用在很多地方:
客服系统:回答常见问题
教育辅导:学习助手
智能家居:控制家庭设备
娱乐陪伴:聊天解闷
今天通过这个综合项目,我们:
综合运用了之前学过的所有知识
学习了如何设计一个完整的程序
实践了面向对象编程
实现了文件存储和读取
创建了一个真正有用的应用程序
如果你对这个项目感兴趣,可以:
为机器人添加更多功能
改进回答的智能程度
学习使用API获取真实数据
为机器人添加图形界面
学习机器学习,让机器人更智能
通过这十一课的学习,你已经掌握了:
Python基础语法
数据类型和结构
流程控制
函数和模块
文件操作
错误处理
项目开发
接下来你可以学习:
面向对象编程
常用第三方库
网络编程
数据库操作
Web开发
数据分析
人工智能
恭喜你完成了Python零基础教程系列!
从第一课的好奇,到现在的自信,你已经走过了很长的路。记住:
编程不是魔法,而是逻辑
错误不是失败,而是学习的机会
复杂程序是由简单代码组成的
持续练习是最重要的
你已经具备了继续自学Python的能力。接下来:
继续编写小项目
参与开源项目
阅读优秀代码
帮助其他初学者
编程的世界很大,你现在已经拿到了入场券。继续探索,享受编程的乐趣吧!
记住:每个专家都曾是初学者,你的编程之旅才刚刚开始。加油!
你可以将上面的增强版聊天机器人代码保存为一个文件,然后运行它。这个项目包含了我们学过的所有重要概念,是一个很好的综合练习。
祝你编程愉快!如果有任何问题,随时可以回顾前面的课程,或者查阅Python官方文档。
再见,未来的程序员!
将本文的Word文档下载到电脑
推荐度: