elif声明结合"和"或"或"不工作

时间:2016-03-17 19:42:42

标签: python-3.x if-statement telegram telegram-bot python-telegram-bot

我为我的家族编写了这个电报机器人。机器人应该根据文本消息中的几个单词发送回复。假设我在包含单词" Thalia"的组中键入文本。和#34;爱"我希望机器人能够做出回应。以下作品。

elif "thalia" in text.lower():
    if "love" in text.lower():
        reply("I love u too babe <3." "\nBut I love my maker even more ;).")
    else:
        reply("Say my name!")

msg containing thalia and love

我这样编码是因为当我使用&#34;和&#34;或&#34;或&#34;关键词语句不起作用,机器人疯了。在上面,如果我编码:elif "thalia" and "love".....它不起作用。

如果还有其他方式来编码,我会很感激提示!

现在我正在使用&#34;和&#34;更多的单词尝试相同的技巧。和&#34;或&#34;但它不起作用。如果我离开&#34;和&#34;和&#34;或&#34;它工作正常。但是当然,我不能使用我想要的单词组合来进行这种特殊的回应。

 elif "what" or "when" in text.lower():
    if "time" or "do" in text.lower():
        if "match" in text.lower():
            reply ("If you need assistence with matches, type or press /matches")

it triggered the command without the 3 words in one sentence

如何在更专业的专业人士中重写此代码?方式,我需要改变什么来让它工作?机器人仅在使用像thalia爱情代码中的单词组合时才会响应。而不是&#34;匹配&#34;使用。*

1 个答案:

答案 0 :(得分:0)

Python非常像自然语言,但解释器无法填写人类听众的能力。 'a和b in c'必须写成'a in c in b in c'。

在编写if语句之前,您应该一次小写案例文本,而不是重复。然后在删除标点和符号后将其转换为一组单词,以避免对下方字符串的重复线性搜索。这是ascii-only输入的一个不完整的例子。

d = str.maketrans('', '', '.,!')  # 3rd arg is chars to delete
text = set(text.lower().translate(d).split())

您的'匹配'代码段可以写成如下。

elif (("what" in text or "when" in text) and 
      ("time" in text or "do" in text) and
      "match" in text)
    reply ("If you need assistence with matches, type or press /matches")

你也可以使用正则表达式匹配来做同样的事情,但是像上面这样的逻辑语句可能更容易入手。