2014-11-15 1 views
6

zu funktionieren Ich versuchte zunächst = Operator Wert zuweisen, aber es hat einen Fehler zurückgegeben, dann habe ich versucht, mit string.replace():String ersetzen erscheint nicht

encrypted_str.replace(encrypted_str[j], dec_str2[k], 2) 

und

encrypted_str.replace(encrypted_str[j], unichr(ord(dec_str2[k]) - 32), 2) 

Aber es gibt den ursprünglichen Wert zurück.

Hilfe heraus, wie die ersetzen API verwenden richtig das richtige Ergebnis zu geben Auch gibt es eine andere API, die statt unichr() verwendet werden kann.

The encrypted_str durch encrypted_str = raw_input() dec_str2 von dem Benutzer ergriffen wird, ist der Eingang freq Zeichenfolge durch den Benutzer zu sein. Das Problem betrifft kaum die Variable Ich mag wissen, ob ich die replcae() API verwenden falsch wie es mir unverändert Ausgang für das Geben encrypted_str Können wir encrypted_str[j] verwenden würde ein Zeichen aus der Zeichenfolge gibt die Unterzeichenfolge für die definieren replace() API. Ich verwendete encrypted_str.replace(encrypted_str[j], unichr(ord(dec_str2[k]) - 32), 1)max ersetzen 1 anstelle von 2 (wie ich nur den einen Ersatz brauche).

Die eigentliche Operation, die ich brauche in C wird getan werden, wie folgt: encrypted_str[j] = dec_str2[k] -32.

Da ich Python neu bin, versuche ich einen Ersatz zu finden.

+1

Wie denken Sie, wir können Ihnen helfen, ohne etwas über 'encrypted_str' und' dec_str2' zu wissen und was ist eigentlich die Logik hinter Ihrem Code? – Kasramvd

+0

Ich glaube nicht, dass es so wichtig ist Aber die Logik ist Ceaser Cipher mit entschlüsselten Freq String zu entziffern –

+0

Bitte fügen Sie Ihre Beschreibung zu Frage, und Ihre Daten oder ein bisschen von ihnen! – Kasramvd

Antwort

19

Strings in Python sind unveränderlich. Das bedeutet, dass der Wert eines gegebenen String-Objekts nach der Erstellung nie geändert wird. Aus diesem Grund wird eine Element-Zuweisung wie some_str[4] = "x" eine Ausnahme auslösen.

Aus einem ähnlichen Grund kann keine der von der Klasse str bereitgestellten Methoden die Zeichenfolge mutieren. Also, die str.replace Methode funktioniert nicht so, wie ich denke, dass Sie es erwarten. Anstatt die Zeichenfolge an Ort und Stelle zu ändern, wird eine neue Zeichenfolge mit den angeforderten Ersetzungen zurückgegeben.

Versuchen:

encrypted_str = encrypted_str.replace(encrypted_str[j], dec_str2[k], 2) 

Wenn Sie viele solche Ersetzungen machen werden, so kann es Sinn machen, die Zeichenfolge in eine Liste von Zeichen zu drehen, indem man die Änderungen machen, dann verwenden str.join zu Wenn Sie fertig sind, wird die Liste wieder in eine Zeichenfolge umgewandelt.

+0

Danke das funktioniert :) –

3

Python-Strings sind unveränderlich. Dies bedeutet, dass eine Zeichenfolge nicht wie in Ihrem Post beschrieben durch einen Methodenaufruf geändert werden kann. Sie müssen eine Zuweisung verwenden, um die zurückgegebene Zeichenfolge aus Ihrem Methodenaufruf zu verwenden.

Zum Beispiel:

encrypted_str = encrypted_str.replace(encrypted_str[j], dec_str2[k], 2) 

Jetzt encrypted_str enthält den neuen Wert.