2016-06-09 3 views
0

Ich bin neu in Python und ich versuche, etwas grundlegendes zu verstehen. Ich habe diesen Code:Ersetzen Sie Buchstaben in einer Zeichenfolge mit Python

def mix_up(a, b): 
    a,b=b[0:2]+a[2:], a[0:3]+b[3:] 
    print (a,b) 

mix_up("abcd","efgh") 

warum b erhalten nicht die "neuen" 3 Buchstaben a (das heißt, "efch")? Gibt es eine elegante Lösung in einer Zeile, oder muss ich andere Variablen verwenden?

Danke!

+0

Die Zuordnung geschieht auch für Tupel-Zuordnungen, nachdem die rechte Seite wurde komplett * * bewertet, das heißt 'a [0: 3] 'bewertet gegen das unmodifizierte' a'. Kannst du beschreiben, was du erreichen willst? – dhke

+0

@BhargavRao Ich hätte es als nah genug betrachtet *. Aber es gibt hier keine Nebenwirkungen, einfach nur von rechts nach links. – dhke

+0

Was ist das Problem, wenn man es so macht "a = b [0: 2] + a [2:] b = a [0: 3] + b [3:]"? – sumit

Antwort

0

Der Grund, warum es nicht funktioniert, ist, weil die Zuweisung (die linke Seite von =) nur passiert, nachdem die gesamte rechte Seite ausgewertet wurde.

So Ihre a und b sind immer noch die „alte“ a und b in der Erklärung, und nicht die neuen.

es zu beheben, teilen Sie es einfach in zwei Aussagen:

a = b[0:2]+a[2:] 
b = a[0:3]+b[3:] # now this is the "new" a