使用if语句和循环的净化器代码

时间:2013-07-21 18:07:41

标签: python

您好我正在研究净化器程序。我之前发布了类似的代码,它们都有效。我这次尝试的是另一种方法。

这是我想要的一个例子

输入=这是废话 output =这是xxxx

这是我到目前为止的代码

def main():
    message = []
    userInput = str(input("Enter the sentence: "))
    for i in userInput:
        if((i=='c' or i =='C') and (i =='r' or i=='R')):
            i = 'x' * len(i)
        message.append(i)
    print(' '.join(message))

如果我在if语句中没有“and”但上面的代码有效,但只要我添加“和”这就是我得到的输出

Enter the sentence: CR
C R

我希望输出为xx。 我怎么能实现这一目标? 谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

条件if((i=='c' or i =='C') and (i =='r' or i=='R')):请求i a(大写与否)CR!所以它总是错误的。

答案 1 :(得分:3)

您无需循环输入。只需检查字符串是否包含“crap”并将其替换为“xxxx”:

import re
crap = re.compile(re.escape("crap"), re.IGNORECASE)
message = crap.sub("xxxx", userInput)

如果您有多个字符串的列表,则可以为每个字符串创建一个正则表达式,并将其替换为具有特定长度的相同字符串:

import re
message = userInput
for s in forbidden_words:
    word = re.compile(re.escape(s), re.IGNORECASE)
    message = word.sub("x" * len(s), message)

答案 2 :(得分:1)

您应该使用or代替and。但是,对于您的给定输入,您可以使用以下循环:

if i.lower in ('c', 'r'):
    i = 'x' 

但是,每次看到xc时,此代码只会添加r,无论是否将其作为单词"crap"的一部分输入,都无关紧要

要检查该字词,您无需迭代userInput,只需对其进行测试:

userInput = str(input("Enter the sentence: "))
if userInput.lower() == "crap":
    message.append('x' * len(userInput))

如果您的userInput是以空格分隔的单词,那么您需要split使用userInput.split(),并测试每个单词,从而迭代地创建列表。


此外,如果您可以编写明确定义的过滤噪音规则,例如在file中设置限制词列表,然后从中读取,创建list,然后检查输入的单词是否在该列表中(这可以作为临时解决方案)。