2016-04-02 3 views
0

Ich versuche, einen "Übersetzer" der Art zu erstellen, in dem, wenn die raw_input hat Flüche (im Voraus, ich list vielleicht 6 Test), die Die Funktion gibt eine Zeichenfolge mit dem Fluch als **** aus.Wie man einen Zensor "Übersetzer" über die Funktion in Python

Dies ist mein Code unten:

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: "))) 

Antwort

2

Ein einfacher Ansatz ist einfach Methode Python native Zeichenfolge zu verwenden: str.replace

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

Effizienz zu verbessern, kann man versuchen, die Liste der Flüche zu kompilieren in einen regulären Ausdruck und dann eine einzelne Ersetzungsoperation.

Python Documentation

0

Erstens gibt es keine Notwendigkeit, hier Element Indizes iterieren. Python erlaubt Ihnen, über die Elemente selbst zu iterieren, was für diesen Fall ideal ist.

Zweitens, Sie überprüfen, ob jedes dieser Wörter in dem angegebenen Satz die gesamte tuple der möglichen schlechten Wörter ist. Sie möchten prüfen, ob jedes Wort intuple ist (ein set wäre besser).

Drittens mischen Sie up-Indizes und Elemente, wenn Sie len(x) tun -, die davon ausgeht, dass x das Wort selbst, aber es ist tatsächlich der Index ist, wie Sie an anderer Stelle verwenden.

Viertens fügen Sie die Sequenz innerhalb der Schleife und der leeren Zeichenfolge hinzu. Sie sollten sich einem Space anschließen und erst nachdem Sie jedes Element überprüft haben.

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) 
Verwandte Themen