In python mehrere Buchstaben vertauschen?
Hallo,
Ich würde gerne eine Python-Programm schreiben, welches wie folgend ausschaut:
a = xy
b = a.replace("x", "y")
c = b.replace("y", "x")
print(c)
Als output hätte ich gerne "yx" bekomme jedoch nur "xx" raus, da das Programm die selben Charakter nochmal durchlaufen lässt. Ich hoffe es ist verständlich.
Danke im Voraus
4 Antworten
Du könntest beispielsweise zunächst 'x' durch etwas anderes ersetzen, wovon du sicher weißt, dass es sonst im String nicht vorkommt. Dann könntest du 'y' durch 'x' ersetzen, und schließlich dann das vorher eingeführte Ersatzzeichen durch 'y' ersetzen. Also beispielsweise so...
a = 'xy'
b = a.replace('x', 'z')
c = b.replace('y', 'x')
d = c.replace('z', 'y')
print(d)
Problematisch ist bei diesem Weg dann allerdings, wenn das Ersatzzeichen (im konkreten Fall 'z') im ursprünglichen Text vorkommt. Denn dann werden auch die Vorkommnisse aus dem ursprünglichen Text durch 'y' ersetzt.
============
Eine bessere Möglichkeit ohne Ersatzzeichen wären beispielsweise...
def tausche(Text, x, y):
if type(Text) != str:
raise TypeError('expected Text to be string')
if type(x) != str:
raise TypeError('expected x to be string')
if type(y) != str:
raise TypeError('expected y to be string')
d = {x: y, y: x}
out = ''.join([d.get(c, c) for c in Text])
return(out)
#Beispiel:
Text1 = 'xyxyxxyy'
Text2 = tausche(Text1, 'x', 'y')
print(Text2)
... oder...
def tausche(Text, x, y):
if type(Text) != str:
raise TypeError('expected Text to be string')
if type(x) != str:
raise TypeError('expected x to be string')
if type(y) != str:
raise TypeError('expected y to be string')
L = Text.split(x)
out = y.join([s.replace('y', 'x') for s in L])
return(out)
#Beispiel:
Text1 = 'xyxyxxyy'
Text2 = tausche(Text1, 'x', 'y')
print(Text2)
Da spare ich mir erst einmal größere Erläuterungen. Du kannst aber gerne nachfragen, wenn du Fragen dazu hast.
Du könntest einen Zwischenschritt einbauen, bei dem ein Buchstabe durch eine praktisch nie vorkommende Zeichenkette ersetzt wird.
a = xy
b = a.replace("x", "ä§ß")
c = b.replace("y", "x")
d = c.replace("ä§ß"; "y")
print(d)
Sehr schlau, soweit hab ich garnicht gedacht. Ich hab jedoch schon eine Antwort bekommen mit dem str.translate("yx", "xy") command. Trotzdem vielen Dank:)
a=xy
b= yy ersetze x in a durch y
c=xx ersetze y in b durch x
Wenn du genau erklärst, was das machen soll, können wir dir besser helfen.
Wenn ab wobei a ein Zeichen und b ein Zeichen ist, das Ergebnis ba sein soll, dann kannst du es einfach umdrehen :)
text = "xy"[::-1]
>>> a='Waxyt'
>>> a.replace('xy','yx')
'Wayxt'
Solltest DU etwas anderes suchen, dann beschreibe bitte genauer, was gemacht werden soll.