2016-04-01 8 views
0

Ich kann nicht verstehen, warum dieser Code nicht ist mir die gewünschten Ergebnisse zu geben, dh wie >Python for-Schleife Verhalten Problem

def escape_html(s): 
    for (i,o) in ((">",">"), 
       ('<','&lt;'), 
       ('"','&quot;'), 
       ('&','&amp;')): 
     s.replace(i,o) 
    return s 

print escape_html('>') 
print escape_html('<') 
print escape_html('"') 
print escape_html("&") 
print escape_html("test&test") 

Speziell Sonderzeichen wie> mit ihrer speziellen Sequenz ersetzt werden, weil ich buchstäblich diese kopieren bin einfügen Code aus this Udacity Lektion

der Code wird geben diesen Ausgang

> 
< 
" 
& 
test&test 

statt replacin g diese Sonderzeichen mit ihren Escape-Sequenzen.

Ich bin mir der Tatsache bewusst, dass Python Unterstützung für escape_html Funktion eingebaut hat, aber ich möchte verstehen, was mache ich falsch?

+0

Wenn Sie dies manuell tun - Sie etwas falsch zu machen. Dies ist ein gelöstes Problem. Verwenden Sie eine Bibliothek. –

Antwort

3

Sie ignorieren den Wert Rückkehr von str.replace():

s.replace(i,o) 

Set s das Ergebnis:

s = s.replace(i,o) 

Strings sind unveränderlich, so dass alle String-Methoden zurückgeben neues String-Objekt .

Als nächstes müssen Sie den ('&','&amp;') Ersatz nach oben verschieben; Andernfalls ersetzen Sie die & in &gt;, &lt; und &quot;.

Demo:

>>> def escape_html(s): 
...  for (i,o) in (
...    ('&','&amp;'), 
...    (">","&gt;"), 
...    ('<','&lt;'), 
...    ('"','&quot;')): 
...   s = s.replace(i,o) 
...  return s 
... 
>>> print escape_html('>') 
&gt; 
>>> print escape_html('<') 
&lt; 
>>> print escape_html('"') 
&quot; 
>>> print escape_html("&") 
&amp; 
>>> print escape_html("test&test") 
test&amp;test 
+0

Awww .... F # @ k mich !!!!!! Ich wusste, dass ich einen wirklich dummen Fehler machte. – Piyush

+0

Könnte es wert sein zu sagen, dass Strings unveränderlich sind und das zu erwarten ist. –