2017-05-19 2 views
1

this challenge in hackerrank을 모두 해결하려고하는데, 소문자를 모두 대문자로 변환하고 그 반대의 경우도 마찬가지입니다.문자열의 대소 문자 바꾸기

나는 다음과 같은 코드로 시도 :이 함수에 전달되는으로

def swap_case(s): 
    length = len(s) 
    i=0 
    while length: 
     if s1[i].isupper(): 
      s[i].lower() 
     elif s[i].islower(): 
      s[i].upper() 
     length-=1 
     i+=1 
    return s 

if __name__ == '__main__': 
    s = input() 
    result = swap_case(s) 
    print(result) 

그러나 반환 된 문자열은 동일합니다. 실수는 어디 있습니까?

+3

문자열을 변경할 수 없습니다. 's [i] .upper()'는's [i]'의 대문자 "사본"을 반환하지만's [i]'자체는 수정하지 않습니다. 당신은 완전히 새로운 문자열 객체를 생성해야합니다 ... – Julien

+0

@Julien이 말했듯이, 당신은 실제로 원래의 문자열을 변경하지 않습니다. 다른 변수를 사용하여 각각의 새 업데이트를 보관하고 그 대신 새로운 변수를 반환하는 것을 고려하십시오. –

+0

또한 파이썬은 그 가치가 무엇인지에 대해 이미 'str.swapcase()'라는 내장 함수를 가지고 있습니다. –

답변

2

내장 str.swapcase 이미이 작업을 수행합니다.

def swap_case(s): 
    return s.swapcase() 
+1

신속하게 일했습니다. 감사. –

1

마찬가지로 @Julien은 upperlower 메서드는 복사본을 반환하고 개체 자체는 변경하지 않습니다. this docs을 참조하십시오.

EDIT @aryamccarthy는 파이썬에서 이러한 종류의 작업에 이미 기존 기능이 있음을 상기 시켰습니다 : swapcase() 메서드. 더 많은 것을 here를보십시오. 이 또한 문자열의 복사본을 반환합니다.

+0

나는 귀하의 의견을 upvoted,하지만 불행히도 이들은 어떤 명성을주지 않습니다. – gonczor

+0

@Julien은 정교한 답을 추가하는 것을 고려합니다. 코멘트가 담당자를 증가시키지 않았습니다. – Ander2

+0

@Julien 귀하의 단어가 질문에 대한 대답으로 의도 되었다면 어쩌면 질문에 대답하는 대신 답변을 게시해야합니다. –

2

주석 및 기타 답변에서 언급했듯이 문자열은 변경 불가능합니다. 다음

시도 :

s = input("Enter input: ") 


def convert(ss): 
    # Convert it into list and then change it 
    newSS = list(ss) 
    for i,c in enumerate(newSS): 
     newSS[i] = c.upper() if c.islower() else c.lower() 
    # Convert list back to string 
    return ''.join(newSS) 

print(s) 
print(convert(s)) 

# Or use string build in method 
print (s.swapcase())