2016-06-08 3 views
-1

작업은 다음과 같습니다파이썬에서 front_back 프로그램이 작동하지 않는 이유는 무엇입니까?

은 첫 번째와 마지막 문자가 교환 된 새로운 문자열을 반환 문자열을 감안할 때.

def front_back(str): 

    if len(str)<=0: 
    return str 

    else: 
    front=str[0] 
    back=str[-1] 
    new = str.replace(str[0], back) 
    print new 
    new_2=new.replace(new[-1], front) 
    print new_2 

front_back("code") 
+0

무엇이 문제입니까? –

+0

StackOverflow에 오신 것을 환영합니다. 학교 숙제를하고 도움이 필요한 것 같습니다. 나는 당신이 당신의 스승에게 물어 보거나 당신의 학습 자료에서 찾아보고 인터 웹에 대한 완전한 답을 얻기 위해 생선을 피우라고 제안 할 것입니다. 그러나 그렇게 할 예정이라면 코드의 어떤 부분이 당신을 위해 작동하지 않는지, 원하는 동작이 무엇인지, 어쩌면 발생한 오류를 보여주는 스택 추적 및 ** 가장 중요하게 ** : 이 문제를 해결하려고 노력했습니다. – Torxed

+0

문제는 두 번째'replace'에서 발생합니다 : 마지막 문자뿐만 아니라 모든 문자를 바꿉니다. –

답변

2

이유는 무엇입니까?

.replace()가, 그 문자의 모든 항목을 대체합니다 때문에 작동하지 않습니다 반드시 첫 번째와 마지막 아래

먼저 몸과 마지막 부분에 문자열을 구성하는 솔루션입니다

text = 'code' 
first, body, last = text[0], text[1:-1], text[-1] 
result = last + body + first 
# 'eodc' 
1

문자열 리터럴은 슬라이스 할 수 있으며 추가 :

P. str은 파이썬에 내장되어 있으므로 변수 이름으로 사용하는 것은 좋지 않습니다.

0

처음에는 이 아니며은 변수 str을 호출합니다. 왜? 그것은 파이썬 문자열을위한 클래스의 이름이기 때문입니다. 같은 이름을 사용하면 느슨해집니다. 나는 txt을 사용한다.

길이에 대한 테스트는 의미가 있지만 하한은 증가 할 수 있습니다 (한 글자는 어리 석음).

그러나 str.replace()을 사용하는 것은 가능하지 않습니다. 왜? 테스트 케이스에서는 작동 할 수 있지만, 각 캐릭터는 고유해야합니다. str.replace()을 모든 지정된 문자열로 대체합니다. 따라서 첫 번째 또는 마지막 문자가 다른 곳에서 반복되면 그 문자도 바뀌게됩니다.

슬라이싱을 사용할 수 있습니다. 여기서 첫 번째 (가장 왼쪽) 문자는 0입니다. 음수를 사용하여 오른쪽에서 색인을 생성 할 수 있으므로 -1이 마지막 (가장 오른쪽) 문자입니다. 문자의 범위는 처음부터 마지막 ​​문자 다음에옵니다. 따라서 [1:-1]은 두 번째 문자에서 마지막 문자로 이동합니다. 그 처리 텍스트의 정상적인 방법이 될 것이기 때문

def front_back(txt): 

    if len(txt) <= 1: 
    return txt 
    else: 
    new_txt = txt[-1] + txt[1:-1] + txt[0] 
    return new_txt 

print front_back("code") 

나는 함수에 return를 사용하고, 그 질문에 대한 요청합니다.