-5

嗨,我正在开发一个净化器程序。我之前发布了类似的代码,它们都可以工作。这次我尝试了不同的方法。

这是我想要的一个例子

输入 = 这是废话 输出 = 这是 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”,上面的代码就可以工作,但是只要我添加“and”,这就是我得到的输出

Enter the sentence: CR
C R

我希望输出为 xx。我怎样才能做到这一点?感谢您的帮助

4

3 回答 3

3

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

于 2013-07-21T18:10:48.713 回答
3

您不需要循环输入。只需检查字符串是否包含“废话”并将其替换为“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)
于 2013-07-21T18:25:15.833 回答
1

你应该使用or而不是and那里。但是,对于给定的输入,您可以使用以下循环:

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

但是这段代码只会在x每次看到cor时添加r,不管它们是否作为单词的一部分输入"crap"

要检查那个词,你不需要迭代userInput,只需测试它:

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

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


此外,如果您可以编写一个定义明确的规则来过滤噪声会更好,例如将受限单词列表放在 a 中file,然后从中读取,创建 a list,然后检查输入的单词是否在该列表中(这可以作为临时解决方案工作)。

于 2013-07-21T18:10:56.957 回答