2016-04-02 14 views
0

私はraw_inputにcursesがある場合(あらかじめ決められた、私は多分6テストのものをリストしています)、関数は、呪いの文字列を****として出力します。Pythonで関数経由で検閲 "翻訳者"を作成するには

これは、以下の私のコードです:

def censor(sequence): 
    curse = ('badword1', 'badword2', 'badword3', 'badword4', 'badword5', 'badword6') 
    nsequence = sequence.split() 
    aword = '' 
    bsequence = [] 
    for x in range(0, len(nsequence)): 
     if nsequence[x] != curse: 
      bsequence.append(nsequence[x]) 
     else: 
      bsequence.append('*' * (len(x))) 
     latest = ''.join(bsequence) 
     return bsequence 



if __name__ == "__main__": 
    print(censor(raw_input("Your sentence here: "))) 

答えて

2

単純なアプローチは、単にPythonのネイティブ文字列メソッドを使用することです:効率を向上させるためにstr.replace

def censor(string): 
    curses = ('badword1', 'badword2', 'badword3', 'badword4', 'badword5', 'badword6') 
    for curse in curses: 
     string = string.replace(curse, '*' * len(curse)) 
    return string 

を、あなたは呪いのリストをコンパイルしようとすることができ正規表現に変換した後、1回の置換操作を行います。

Python Documentation

0

まず、ここでは要素インデックスを反復処理する必要はありません。 Pythonでは、要素自体を反復処理することができます。これは、この場合には理想的です。

第2に、指定された文章内のそれらの単語のそれぞれが、となる可能性があります。tupleの潜在的な不良ワードがあるかどうかを確認しています。 の単語がであるかどうかを確認するには、tuplesetが良いでしょう)を確認します。

第3に、len(x)を実行するとインデックスと要素が混ざり合っています。これは、xが単語そのものであると仮定していますが、他の場所で使用する場合は実際にはインデックスです。

第4に、ループ内のシーケンスと空の文字列を結合しています。各要素をチェックした後にのみ、スペースに参加する必要があります。

def censor(sequence): 
    curse = {'badword1', 'badword2', 'badword3', 'badword4', 'badword5', 'badword6'} 
    nsequence = sequence.split() 
    bsequence = [] 
    for x in nsequence: 
     if x not in curse: 
      bsequence.append(x) 
     else: 
      bsequence.append('*' * (len(x))) 
    return ' '.join(bsequence) 
関連する問題