首页 > 解决方案 > 是否有python函数用于过滤if语句中的某些单词

问题描述

我正在尝试制作一个响应命令的不和谐“爸爸机器人”。当有人说“我是”时,它会打印出嗨“无论他们输入什么”,我是爸爸机器人,这很好用,但我的很多朋友都输入了“我”而不是“我”,这意味着我允许这样做好吧,但现在它会触发以“im”结尾的单词,例如他或瞄准。

这是我尝试过的代码,我也尝试过使用 for 循环遍历数组。

im = ["aim", "bim", "cim", "dim", "eim", "fim", "gim", "him", "iim", "jim", "kim", "lim", "mim", "nim", "oim", "pim", "qim", "rim", "sim", "tim", "uim", "vim", "wim", "xim", "yim", "zim"]

#part of a larger if statement 
elif ("i'm " in message.content.lower() or "im " in message.content.lower()) and not message.content.lower() in im:
    if "i'm" in message.content:
        you = message.content.split("i'm")
    elif "im" in message.content:
        you = message.content.split("im")
    elif "Im" in message.content:
        you = message.content.split("Im")
    else:
        you = message.content.split("I'm")
    await message.channel.send(f"""Hi{you.pop(1)} I'm Dadbot""")

我也尝试过使用这样的 for 循环

if "im" in message.content:
                for x in im:
                    if im(x) in message.content:
                        go = 1
                        break
                    go = 0
            if go == 1:

代码应该忽略任何其他文本,并且应该只响应“im”、“Im”、“I'm”和“I'm”

看起来像这样的东西:

User:

"I'm hungry"

Dad bot:

"Hi hungry I'm Dadbot"

这是我得到的错误:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 251, in _run_event
    await coro(*args, **kwargs)
  File "C:/Users/User/PycharmProjects/dadBot/dadBot.py", line 26, in on_message
    elif ("i'm " in message.content.lower() or "im " in message.content.lower()) and not im in message.content.lower():
TypeError: 'in <string>' requires string as left operand, not list

标签: pythondiscord.py

解决方案


我想到了一个像这样的小正则表达式^(im|i\'m)\s+(.*)

例子:

import re
ip = "im hungrey"
list_ip = re.match(r"^(im|i\'m)\s+(.*)",ip, re.IGNORECASE)
if list_ip:
   print('Hi '+ list_ip.group(2) + ' '+list_ip.group(1)+ ' Dadbot')

输出:

i/p: "im hungrey"
o/p: Hi hungrey im Dadbot
i/p: "him hi"
o/p: null
i/p: "i'm all"
o/p: Hi all i'm Dadbot

解释:

  1. 在 python 中使用re- regex 进行模式匹配
  2. 我正在匹配单词并对值进行分组
  3. group(1)(im|i\'m)- 它给了我第一个词
  4. group(2)is (.*)- 它给出了输入的剩余部分

推荐阅读