Python基础————做一个简单的问答机器人

嗨,大家好呀。大家在生活中应该接触过很多形形色色的问答机器人叭。例如,小爱同学、天猫精灵、小度......等等。那么大家有没有想过如何通过Python来编写出来简易的问答机器人呢?今天,它就来喽。

1.使用列表做一个简单的问答机器人

首先,我们需要创建一个嵌套列表,每个并集列表中包含一个问题和一个答案:

qa_list = [
    ["你好", "你好呀!"],
    ["今天天气怎么样", "我不知道今天的天气呢。"],
    ["你叫什么名字", "我是问答机器人。"]
]

然后,创建循环使我们可以不断的提问,通过循环遍历列表中的每一个子列表,判断用户输入的问题是否与子列表中的第一个元素匹配,如果匹配则输出对应的第二个元素作为答案,否则输出 “我不知道这个问题的答案。”。

while True:
    question = input("请提问:")
    found_answer = False
    for pair in qa_list:
        if pair[0] == question:
            print(pair[1])
            found_answer = True
            break
    if not found_answer:
        print("我不知道这个问题的答案。")
2.使用字典中的键值对来实现

这里我们利用字典的(count = {key1:value1})中key(键)是独一无二的和value(值)可重复的的特性写一个简易问答机器人。

首先,创建一个包含问题(key)和答案(value)的字典

q_Answer =  {
    "你好": "你好呀!",
    "今天天气怎么样": "我不知道今天的天气呢。",
    "你叫什么名字": "我是问答机器人。"
}

然后,通过while循环获取用户输入的问题(相当于键)去获取字典中的值,通过print函数输出就可以了。

while True:
    question = input("您好,请说出您的问题:")
    # 判断用户输入的问题是否在字典中,通过键去获取值。
    if question in q_Answer:
        print(q_Answer[question])
    else:
        print("我暂时回答不了这个问题,等我再努力一些叭")

3.使用字典结合match...case语句(进阶)

注:在 Python 3.10 及以上版本中支持 match...case 语句

我们学会了字典的问答机器人的写法之后,大大提升了代码的可读性以及减少了代码量,那么我们就可以结合第三方库来做一个获取实时信息的问答机器人,这里以获取当前时间datetime模块为例

from datetime import datetime

# 定义问题与答案的字典
qa_dict = {
    "你好": "你好呀!",
    # 对于“今天天气怎么样”的回答,表示不知道今天的天气,这一部分大家可以自己研究一下如何获取实时天气
    "今天天气怎么样": "我不知道今天的天气呢。",
    "你叫什么名字": "我是问答机器人。",
    # 对于“现在几点了”的回答是一个匿名函数,调用它会返回当前时间的格式化字符串
    "现在几点了": lambda: datetime.now().strftime('%H:%M:%S')
}

# 获取用户输入的问题
question = input("请提问:")

# 使用 match...case 语句进行问题匹配
match question:
    # 如果问题在字典中
    case key if key in qa_dict:
        answer = qa_dict[key]
        # 如果答案是可调用的(如匿名函数)
        if callable(answer):
            # 调用可调用对象并打印结果
            print(answer())
        else:
            # 直接打印答案字符串
            print(answer)
    # 如果没有匹配到任何问题
    case _:
        print("我不知道这个问题的答案。")

让我们来康康运行结果叭。

当然,我们也可以通过第三方库来实现文字转语音效果,例如,pyttsx3。

from datetime import datetime
import pyttsx3


def text_to_speech_pyttsx3(text, rate):
    engine = pyttsx3.init()
    # 获取当前语音速率
    current_rate = engine.getProperty('rate')
    # 设置新的语音速率
    engine.setProperty('rate', current_rate + rate)
    engine.say(text)
    engine.runAndWait()


qa_dict = {
    "你好": "你好呀!",
    "今天天气怎么样": "我不知道今天的天气呢。",
    "你叫什么名字": "我是问答机器人。",
    "现在几点了": lambda: datetime.now().strftime('%H:%M:%S')
}

question = input("请提问:")

match question:
    case key if key in qa_dict:
        answer = qa_dict[key]
        text_to_speech_pyttsx3(answer, 50)
        if callable(answer):
            print(answer())
        else:
            print(answer)
    case _:
        print("我不知道这个问题的答案。")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习代码的大黑猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值