Python:让程序对字符串中的关键字做出反应,而无需无休止的 if-else 噩梦
Python: Make program react to keywords in a string without endless if-else nightmare
所以,真实世界的上下文是我正在开发的聊天机器人,但这里是我正在努力完成的内容的浓缩版。
该函数应该接收消息,查看它是否包含某些关键字(有些区分大小写,有些不区分大小写)并打印 one 响应。目前我的代码看起来像这样:
def func(msg):
msg_low = msg.lower()
if "keyword_1" in msg_low:
print("Reaction 1")
elif "KeYwOrD_2" in msg:
print("Reaction 2")
elif "keywords_3" in msg_low:
print("Reaction 3")
等等,感觉很不对。
感觉应该有一个非常简单的解决方案,但我就是想不通。两个最大的问题是我想保留关键字的优先级和处理区分大小写的问题,我基本上在一个 if-else 块中处理两个不同的消息(msg 和 msg_low)。
可以使用列表理解来获取匹配项并使用第一个匹配项来获取反应
msg = "keyword_1 asdkflbahsjkdb KeYwOrD_2"
msg_low = msg.lower()
keywords = ["keyword_1", "KeYwOrd_2", "keywords_3"]
reactions = ["Reaction1", "Reaction2", "Reaction3"]
isCaseSensitive = [False, True, False]
#If case sensitive then check msg else msg_low
matched = [x for x in range(len(keywords)) if (isCaseSensitive[x] and keywords[x] in msg) or (keywords[x] in msg_low)]
#Get first match
reactions[min(matched)]
所以,真实世界的上下文是我正在开发的聊天机器人,但这里是我正在努力完成的内容的浓缩版。
该函数应该接收消息,查看它是否包含某些关键字(有些区分大小写,有些不区分大小写)并打印 one 响应。目前我的代码看起来像这样:
def func(msg):
msg_low = msg.lower()
if "keyword_1" in msg_low:
print("Reaction 1")
elif "KeYwOrD_2" in msg:
print("Reaction 2")
elif "keywords_3" in msg_low:
print("Reaction 3")
等等,感觉很不对。
感觉应该有一个非常简单的解决方案,但我就是想不通。两个最大的问题是我想保留关键字的优先级和处理区分大小写的问题,我基本上在一个 if-else 块中处理两个不同的消息(msg 和 msg_low)。
可以使用列表理解来获取匹配项并使用第一个匹配项来获取反应
msg = "keyword_1 asdkflbahsjkdb KeYwOrD_2"
msg_low = msg.lower()
keywords = ["keyword_1", "KeYwOrd_2", "keywords_3"]
reactions = ["Reaction1", "Reaction2", "Reaction3"]
isCaseSensitive = [False, True, False]
#If case sensitive then check msg else msg_low
matched = [x for x in range(len(keywords)) if (isCaseSensitive[x] and keywords[x] in msg) or (keywords[x] in msg_low)]
#Get first match
reactions[min(matched)]