试图过滤输入

Trying to filter input

我正在尝试过滤输入,因此不仅在输入准确输入时会被过滤,而且如果后面有单词或有 space 或其他内容时也会被过滤。

当前简化代码:

profanity = ["rude", "words"]

userInput = input(" : ")
if userInput in (profanity):
    inputLength = len(userInput)
    userInput = ""
    for i in range(inputLength):
        userInput += "*"
print (userInput)

所以在这个例子中,它将适用于 "rude""word",但不适用于 "rude ""rude %"% 等情况] 是任何 word/sentence。该列表本身有 127 个项目。

1./ 第一种情况: 你想审查粗鲁的 **** 但不是粗鲁的 c****

问题在于,当您实际上想要处理子字符串(或者更具体地说是标记,因为 pour 可能想要保留诸如 crude 之类的项目)时,您正在测试整个输入字符串

基本思路是标记您的输入字符串并独立验证每项工作。一个非常基本的方法(如果您不想深入研究更先进的 NLP 技术)是分割空格。

你可以试试这个:

profanity = ["rude", "words"]

userInput = input(" : ")
parts = userInput.split()
output = []
for p in parts:
    if p in profanity:
        output.append('*' * len(p))
    else:
        output.append(p)
print(' '.join(output))

记住这是一些您可以改进的基本代码。它不会处理标点符号 (rude.) 或不同大小写 (RUDE)

的情况

2./ 第二种情况: 你想审查 rude as **** AND crude as c****

如果你想替换任何粗鲁的实例(即使是粗鲁的或任何其他的)你可以使用相反的方法

profanity = ["rude", "words"]

userInput = input(" : ")
for p in profanity:
    if p in userInput:
        userInput = userInput.replace(p, '*' * len(p))
print(userInput)

无论如何,这是approaches/objectives的基本思想,还有很大的改进空间(标点符号、大写字母、表达式、更高级的 NLP...)

def filter_function(input):
    words_to_be_filtered = ["rude", "words"]
    searched = map(lambda x: x in input, words_to_be_filtered)
    return reduce(lambda x,y: x or y, searched, False)

inputs = ["something", "somethingrude", "sometwordshing"]
print(filter(filter_function, inputs))

上面的函数给出了以下结果:['somethingrude', 'sometwordshing']。我希望这对你有用。