2017-10-05 1 views
2

나는이 질문과 똑같은 질문을 이미했으나 대답은 여전히 ​​유효하고 함수 내에서 .translate 메서드를 사용했지만 "for 루프"를 사용하여 찾고자하는 결과를 얻고 싶다. 나는 잠시 전에 물어 본 질문에 대한 링크입니다 : How can I replace multiple characters in a string using python?for 루프를 사용하여 문자열의 여러 문자를 대체하는 방법은 무엇입니까?

for 루프를 사용하여 문자열에서 여러 문자를 대체하는 방법을 알아 내려고 할 때 문제가 있습니다. replace (string)이라는 함수를 작성하려고하는데, 입력에서 특정 문자를 다른 문자로 바꿉니다.

내가 "WXYZ"라는 문자열을 가지고 있고 모든 W를 Y, X, Z, Y, W 및 Z를 X로 바꾸고 싶습니다. 입력이 무엇이든 상관없이 교체를 수행하고 싶습니다. . 그래서 나는 또한 replace ("WWZXWWXYYZWYYY")와 같은 것을하면 위와 같은 문자를 대체해야합니다.

def replace(string): 
for letters in string: 
    string = string.replace("W","Y").replace("X","Z").replace("Y","W").replace("Z","X") 
print(string) 

하지만 난 그게 ("WXYZ")

을 대체 실행할 때이 같은 코드의 출력을 얻을 :

내가 루프의와 함께 지금까지 한 일이다 WXWX

출력으로 YZWX를받는 대신. 파이썬의 내장 함수도 사용하고 싶습니다.

어떻게하면됩니까?

+2

** 번역 ** 방법을 찾고 있습니다. – Prune

+0

문자 그대로 중복, 같은 요구 사항, 동일한 시도, 같은 말씨, 같은 사용자 ... – mentalita

+0

그래, 그 같은 하나,하지만 내가 찾고있는 출력을 얻으려면 "루프"를 사용하는 함수가 필요합니다. –

답변

1

다음은 문제를 해결하는 방법입니다. 이 도움이되기를 바랍니다 :)

def replacer(string): #define the function with a parameter (which will be whatever string you want) 
    newlist = [] #create a new list which will be the output 
    strlist = list(string) #create a list of each character in the input string 
    for item in strlist: #iterate through the items in the list of string characters 
     if item == 'W': # this line and the next 7 lines check what the letter is and writes the letter you want to the new list 
      newlist.append('Y') 
     elif item == 'X': 
      newlist.append('Z') 
     elif item == 'Y': 
      newlist.append('W') 
     elif item == 'Z': 
      newlist.append('X') 
    return ''.join(newlist) #output the new list as a string 

replacer('WWZXWWXYYZWYYY') #call the function with the string as a parameter 
+0

노력해보십시오. 그러나 목록을 사용하는 대신 문자열 (즉,'newstr + = "Y")을 추가 할 수 있으며, 입력 문자열을 목록에 복사 할 필요도 없습니다 (직접 반복 할 수도 있습니다). – ekhumoro

+0

감사합니다. 나는 고급 사용자가 아니므로 피드백에 환호합니다. 도움이됩니다. – Worm

+1

정말 고마워요 !!!! 좋은 길을 찾으려고 시간을 낭비했습니다. –

4

문제는 대체물에 교집합이 있다는 것입니다. 파이썬은 메소드를 왼쪽에서 오른쪽으로 호출합니다. 다음 코드가 작동하는 이유는 다음과 같습니다.

In [6]: 'ax'.replace('a', 'b').replace('b', 'g') 
Out[6]: 'gx' 

해당 문제를 해결하려면 문자를 즉시 ​​바꿔야합니다. 이 주위에 한 가지 방법은 정규식 또는 더 나은을 사용하는 str.translate 방법을 (당신은 단지 문자를 대체 할 경우) :

In [16]: d = {"W": "Y", "X": "Z", "Y": "W", "Z": "X"} 

In [17]: "WXYZ".translate(str.maketrans(d)) 
Out[17]: 'YZWX' 
1

문제는 세 번째 replace 원래 W의했다 그 (또한 새로운 Y의 대체한다는 것입니다).

한 가지 방법은 here처럼 RegEx를 사용하는 것입니다.

내가 생각할 수있는 또 다른 방법은 임시 값으로 바꾸는 것입니다. 그러나 그 때문에 원래 문자열에는 나타나지 않을 임시 값을 찾아야합니다.

예를 들어 원래 문자열이 대문자 만 알면 string.replace("W","y").replace("X","z").replace("Y","w").replace("Z","x")을 사용하고 문자를 다시 배치 할 필요없이 소문자를 모두 대문자로 바꿀 수 있습니다.

대문자 만 사용할 수 없다면 문자열에없는 문자 세트를 찾거나 RegEx를 사용하십시오.

관련 문제