본문 바로가기
Python & Django

Python string을 char로 바꾸는 법 feat. 대소문자 변환

by softserve 2023. 5. 31.
반응형

1. char

 

결론부터 말해 파이썬에는 char 자료형이 별도로 존재하지 않습니다.

즉, 문자는 길이가 1인 문자열과 같습니다. 다음과 문자 'a'의 자료형을 출력해보면

print(type('a'))

 <class 'str'> 

문자열이라고 합니다.

Java에서는 string.charAt() 메서드를 사용해 문자열에서 하나의 문자를 뽑아낼 수 있는데

파이썬에서는 문자열을 char 배열처럼 취급하므로 string[0] 와 같이 인덱스를 활용해 특정 인덱스에 위치한 문자에 접근할 수 있습니다. 아래와 같이 for 문에 문자열을 넣어 문자를 하나 하나 처리할 수도 있습니다.

 

2. ord(), chr()

 

문자를 아스키코드로 변환할 때는 ord()를 사용합니다.

반대로 아스키 값을 문자로 변환할 때는 chr()을 사용합니다. 

이를 이용해 대문자를 소문자로 소문자를 대문자로 각각 변환해주는 소스를 작성해보면 다음과 같습니다.

str = input()
answer = []
for s in str:
    if ord(s) < 97: # chr(97)은 s
        answer.append(s.lower())
    else:
        answer.append(s.upper())
print(''.join(answer))

 

아스키 코드표에서 알파벳 대문자는 65에서 90까지이고 소문자는 97부터 122까지입니다.

이를 이용해 문자열에서 문자 하나를 골라 그 아스키값이 97보다 작으면 소문자로, 97 이상이면 대문자로 변환해줍니다.

이렇게 변환해준 문자들을 접합 concatenate 하려고 합니다.

 + 연산자를 활용하는 방법이 가장 먼저 떠오르지만 위와 같이 리스트를 활용하는 것이 더 효율적이라고 합니다.

Java의 StringBuilder와 유사하죠.

answer 리스트에 각 문자를 추가하고 마지막으로 구분자 없이 join을 통해 문자열로 바꿔 출력을 해줍니다.

 

3. islower(), isupper()

 

그런데 파이썬 기본 라이브러리에는 대소문자를 판별해주는 메서드가 있습니다.

isupper()는 문자열의 모든 문자가 대문자이면 true를 아니면 false를 반환하고

islower()는 문자열내 모든 문자가 소문자이면 true를 아니면 false를 반환합니다.

어떻게 char로 변환할 수 있을까 고민할 필요가 없었습니다. 아래 소스로 더 깔끔하게 같은 결과를 얻을 수 있습니다.

str = input()
answer = []
for s in str:
    if s.isupper():
        answer.append(s.lower())
    elif s.islower():
        answer.append(s.upper())
print(''.join(answer))

 

4. swapcase()

 

그런데 허무하게도 파이썬에는 대소문자를 변환해주는 swapcase() 함수가 있었습니다.

str = input()
print(str.swapcase())

이렇게 하면 더 짧게 같은 결과를 얻을 수 있습니다.

 

반응형

댓글