Python string을 char로 바꾸는 법 feat. 대소문자 변환
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())
이렇게 하면 더 짧게 같은 결과를 얻을 수 있습니다.