Python零基础教程第十一课 综合项目 智能聊天机器人

浏览量:16 次 发布时间:2025-12-26 21:18 作者:明扬工控商城 下载docx

最近更新:Python零基础教程第七课:我的第一个工具箱——函数


欢迎来到第十一课。前面我们学习了Python的很多基础知识,今天我们要把这些知识用起来,做一个综合项目:智能聊天机器人。这个项目会用到我们学过的变量、条件判断、循环、列表、函数、文件操作和错误处理。

第一部分 项目目标

我们要做一个什么样的聊天机器人呢?

  1. 基本功能:能回答简单问题

  2. 扩展功能:能记住对话内容

  3. 特色功能:有不同性格模式

  4. 实用功能:能查询天气、计算等

通过这个项目,你会看到如何把学过的知识组合起来,做出一个真正有用的程序。

第二部分 项目设计

机器人架构设计

  1. 核心引擎:处理用户输入,生成回答

  2. 知识库:存储问题和答案

  3. 记忆系统:记住对话历史

  4. 功能模块:计算、天气查询等特殊功能

技术要点

  1. 字符串处理

  2. 字典存储知识

  3. 列表存储历史

  4. 函数模块化设计

  5. 文件保存对话记录

第三部分 基础版聊天机器人

让我们从最简单的版本开始。

第一步:创建新文件
新建文件,保存为"聊天机器人.py"

第二步:基础版代码

代码部分:
智能聊天机器人 1.0

def 显示欢迎():
print("=" * 50)
print(" 智能聊天机器人 v1.0")
print("=" * 50)
print("你好!我是你的智能助手。")
print("输入'退出'可以结束对话")
print("输入'帮助'可以查看帮助信息")
print("=" * 50)

def 获取回答(问题):
根据用户的问题返回回答

text
复制
下载
问题 = 问题.lower()  转换为小写,方便匹配

基础问答库
知识库 = {
    "你好": ["你好!", "嗨!", "很高兴见到你!"],
    "你叫什么名字": ["我叫小智,是你的智能助手。", "我是小智,很高兴为你服务。"],
    "今天天气怎么样": ["今天天气不错,适合出门散步。", "天气预报说今天会下雨,记得带伞。"],
    "你会做什么": ["我可以和你聊天,回答简单问题,还能帮你计算。", "我是你的助手,有什么需要帮忙的吗?"],
    "谢谢": ["不客气!", "很高兴能帮到你!", "这是我的荣幸!"],
    "再见": ["再见!期待下次聊天。", "拜拜!", "下次再见!"]
}

检查问题是否在知识库中
for 关键词, 回答列表 in 知识库.items():
    if 关键词 in 问题:
        import random
        return random.choice(回答列表)

默认回答
默认回答库 = [
    "这个问题很有趣,让我想想...",
    "我不太明白你的意思,能换个说法吗?",
    "这个问题我需要学习一下。",
    "你可以问我一些简单的问题,比如天气、时间等。"
]

import random
return random.choice(默认回答库)

def 基础版机器人():
显示欢迎()

text
复制
下载
对话历史 = []

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.加载记忆()

text
复制
下载
    不同性格的回答风格
    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("正在启动聊天机器人...")

text
复制
下载
选择性格
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("按回车键退出...")

第五部分 项目扩展想法

这个聊天机器人还可以继续扩展,以下是一些想法:

扩展1:添加更多功能

  1. 天气预报:使用天气API获取真实天气

  2. 新闻摘要:获取最新新闻

  3. 翻译功能:中英文翻译

  4. 提醒功能:设置定时提醒

扩展2:学习能力

  1. 学习新问答:当机器人不知道答案时,让用户教它

  2. 记忆用户名:记住用户的名字和喜好

  3. 上下文理解:理解对话的上下文

扩展3:图形界面

  1. 使用Tkinter创建窗口界面

  2. 添加表情和动画

  3. 语音输入和输出

第六部分 实际应用场景

聊天机器人可以应用在很多地方:

  1. 客服系统:回答常见问题

  2. 教育辅导:学习助手

  3. 智能家居:控制家庭设备

  4. 娱乐陪伴:聊天解闷

第七部分 今天学到了什么

今天通过这个综合项目,我们:

  1. 综合运用了之前学过的所有知识

  2. 学习了如何设计一个完整的程序

  3. 实践了面向对象编程

  4. 实现了文件存储和读取

  5. 创建了一个真正有用的应用程序

第八部分 继续学习建议

如果你对这个项目感兴趣,可以:

  1. 为机器人添加更多功能

  2. 改进回答的智能程度

  3. 学习使用API获取真实数据

  4. 为机器人添加图形界面

  5. 学习机器学习,让机器人更智能

第九部分 Python学习路线

通过这十一课的学习,你已经掌握了:

  1. Python基础语法

  2. 数据类型和结构

  3. 流程控制

  4. 函数和模块

  5. 文件操作

  6. 错误处理

  7. 项目开发

接下来你可以学习:

  1. 面向对象编程

  2. 常用第三方库

  3. 网络编程

  4. 数据库操作

  5. Web开发

  6. 数据分析

  7. 人工智能

第十部分 毕业寄语

恭喜你完成了Python零基础教程系列!

从第一课的好奇,到现在的自信,你已经走过了很长的路。记住:

  1. 编程不是魔法,而是逻辑

  2. 错误不是失败,而是学习的机会

  3. 复杂程序是由简单代码组成的

  4. 持续练习是最重要的

你已经具备了继续自学Python的能力。接下来:

  1. 继续编写小项目

  2. 参与开源项目

  3. 阅读优秀代码

  4. 帮助其他初学者

编程的世界很大,你现在已经拿到了入场券。继续探索,享受编程的乐趣吧!

记住:每个专家都曾是初学者,你的编程之旅才刚刚开始。加油!

附件:完整项目代码

你可以将上面的增强版聊天机器人代码保存为一个文件,然后运行它。这个项目包含了我们学过的所有重要概念,是一个很好的综合练习。

祝你编程愉快!如果有任何问题,随时可以回顾前面的课程,或者查阅Python官方文档。

再见,未来的程序员!


明扬工控商城

推荐阅读:

Python零基础教程第十一课 综合项目 智能聊天机器人

Python零基础教程第十课 认识新朋友 模块和包

Python零基础教程第九课:犯错了怎么办?——错误处理

Python零基础教程第八课:与文件对话

Python零基础教程第五课:重复的魔法——循环

Python零基础教程第七课:我的第一个工具箱——函数

Python零基础教程第十一课 综合项目 智能聊天机器人.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网