Python实例题:简单的聊天机器人

目录

Python实例题

题目

要求:

解题思路:

代码实现:

Python实例题

题目

简单的聊天机器人

要求

  • 实现一个基于规则的聊天机器人,支持简单问答和对话。
  • 支持以下功能:
    • 问候语识别与回应
    • 天气查询(模拟)
    • 时间 / 日期查询
    • 简单数学计算
    • 随机笑话生成
  • 添加对话历史记录功能,可随时查看。
  • 支持退出对话的指令。

解题思路

  • 使用关键词匹配实现简单的问答逻辑。
  • 利用 Python 内置模块处理时间、数学计算等功能。
  • 维护对话历史列表存储交互记录。

代码实现

import random
import datetime
import re

class ChatBot:
    def __init__(self, name="豆包"):
        self.name = name
        self.history = []
        self.greetings = ["你好", "嗨", "哈喽", "Hi", "Hello"]
        self.goodbyes = ["再见", "拜拜", "Bye", "Goodbye"]
        self.weather_responses = ["今天天气晴朗,25℃", "预计会下雨,记得带伞", "天气有点冷,建议穿外套"]
        self.jokes = [
            "为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 == Dec 25。",
            "一个程序员去银行存钱,结果被抢劫了。警察问他:“你损失了多少钱?”他说:“不知道,我还没编译成功。”",
            "为什么Python程序员喜欢喝咖啡?因为他们不能Java。"
        ]
    
    def get_response(self, user_input):
        """根据用户输入生成回复"""
        user_input = user_input.strip().lower()
        self.history.append(("用户", user_input))
        
        # 问候语识别
        if any(greeting.lower() in user_input for greeting in self.greetings):
            response = random.choice(self.greetings) + f"!我是{self.name},有什么我可以帮助你的吗?"
        
        # 告别语识别
        elif any(goodbye.lower() in user_input for goodbye in self.goodbyes):
            response = random.choice(self.goodbyes) + "!祝你有个愉快的一天!"
        
        # 天气查询
        elif "天气" in user_input:
            response = random.choice(self.weather_responses)
        
        # 时间查询
        elif "时间" in user_input:
            current_time = datetime.datetime.now().strftime("%H:%M:%S")
            response = f"现在的时间是 {current_time}"
        
        # 日期查询
        elif "日期" in user_input:
            current_date = datetime.datetime.now().strftime("%Y年%m月%d日")
            response = f"今天的日期是 {current_date}"
        
        # 数学计算
        elif re.search(r'\d+\s*[+\-*/]\s*\d+', user_input):
            try:
                result = eval(re.search(r'(\d+\s*[+\-*/]\s*\d+)', user_input).group(0))
                response = f"计算结果: {result}"
            except:
                response = "抱歉,这个计算我无法完成。"
        
        # 笑话
        elif "笑话" in user_input:
            response = random.choice(self.jokes)
        
        # 历史记录查询
        elif "历史" in user_input or "记录" in user_input:
            if not self.history:
                response = "暂无对话历史。"
            else:
                response = "对话历史:\n"
                for speaker, msg in self.history:
                    response += f"{speaker}: {msg}\n"
        
        # 未知输入
        else:
            responses = [
                "我不太理解你的意思,可以换一种说法吗?",
                "请你详细说明一下,好吗?",
                "这个问题我需要想一想...",
                "我还在学习中,这个问题我暂时无法回答。"
            ]
            response = random.choice(responses)
        
        self.history.append((self.name, response))
        return response

def main():
    bot = ChatBot()
    print(f"{bot.name}: {random.choice(bot.greetings)}!我是{bot.name},有什么我可以帮助你的吗?")
    
    while True:
        user_input = input("用户: ")
        if user_input.lower() in ["退出", "bye", "exit", "quit"]:
            print(f"{bot.name}: {random.choice(bot.goodbyes)}!祝你有个愉快的一天!")
            break
        
        response = bot.get_response(user_input)
        print(f"{bot.name}: {response}")

if __name__ == "__main__":
    main()

你可能感兴趣的:(实例,python,开发语言)