2013-07-21 34 views
-5

嗨我正在淨化器程序。我之前發佈過類似的代碼,它們都可以工作。這次我嘗試了一種不同的方法。淨化器代碼使用if語句和循環

這是什麼,我想

輸入一個例子=這是胡扯 輸出=這是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語句中,但只要我添加「和」這是我得到的輸出

Enter the sentence: CR 
C R 

正如我想要的輸出爲xx。 我該如何實現這一目標? 感謝你的幫助

+0

你是否想要這個詞 - '廢話'被替換爲'xxxx'?如果不是,規則是什麼? –

+0

現在是,但它可以是任何單詞。像廢話扯吮等等。給出有條件的陳述。它應該傳達出這些詞 – Manmohit

+0

@Manmohit只是好奇:是否有什麼特別的原因,你現在試圖這樣做,當你已經收到了各種形式的答案很多? –

回答

3

條件if((i=='c' or i =='C') and (i =='r' or i=='R')):請求i一個(資本或不)CR!所以它總是假的。

+0

我正在嘗試使字CRAP廢話的組合。我還能怎麼做到這一點? – Manmohit

+0

''你的回答\ nOP的頭'' – l4mpi

1

您應該使用or而不是and那裏。但是,對於你給定的輸入,你可以用下面的循環:

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

但這代碼只是補充x每次它看到一個cr,不要緊,他們是否被輸入爲字"crap"的一部分或不。

要檢查這個詞,你並不需要遍歷userInput,只是測試反對:

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

如果您userInput是用空格隔開的話,那麼你將它用userInput.split()需要split ,並測試每個單詞,從而迭代地創建列表。


此外,它會更好,如果你可以寫過濾噪聲的定義明確的規則,就像在file限制詞的列表,然後從中讀取,創建一個list,然後檢查是否輸入的單詞在該列表中(這可以作爲臨時解決方案)。

+0

但是如果組合是CrAp CRap CRAP crAP怎麼樣應該照顧它呢?寫出所有組合的上限和下限將是很多代碼,所以我想要一種方式,可以縮短所有可能的組合在大寫和小寫字母垃圾。 – Manmohit

+0

'userInput.lower()'照顧它。它會將它們全部轉換爲「廢話」。 –

+0

這是真正的真正。 – Manmohit

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) 
+0

那麼情況如何,哪裏有更多的詞彙要過濾? –

+1

@RohitJain:我編輯了答案 – pascalhein