您好我正在研究净化器程序。我之前发布了类似的代码,它们都有效。我这次尝试的是另一种方法。
这是我想要的一个例子
输入=这是废话 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。 我怎么能实现这一目标? 谢谢你的帮助
答案 0 :(得分:3)
条件if((i=='c' or i =='C') and (i =='r' or i=='R')):
请求i
a(大写与否)C
和R
!所以它总是错误的。
答案 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'
但是,每次看到x
或c
时,此代码只会添加r
,无论是否将其作为单词"crap"
的一部分输入,都无关紧要
要检查该字词,您无需迭代userInput
,只需对其进行测试:
userInput = str(input("Enter the sentence: "))
if userInput.lower() == "crap":
message.append('x' * len(userInput))
如果您的userInput
是以空格分隔的单词,那么您需要split
使用userInput.split()
,并测试每个单词,从而迭代地创建列表。
此外,如果您可以编写明确定义的过滤噪音规则,例如在file
中设置限制词列表,然后从中读取,创建list
,然后检查输入的单词是否在该列表中(这可以作为临时解决方案)。