강의로 돌아가기
성혁윤

파이썬에서 아스키코드를 활용한 대소문자의 변환

해당문제는 내장함수를 활용하여 lower()나 upper()로 해결할 수 있었습니다.
이후 C언어처럼 파이썬의 ord()와 chr() 함수를 통해 아스키코드를 이용하여 문제를 해결하려고 하였으나
대문자를 소문자로 바꾸는 과정이 제대로 이루어지지 않았습니다.

예를 들어 'cccCCC'의 문자열은 'CCC###'으로 변환이 되었습니다.
print( chr( ord('C') + ord('a') - ord('A') ) ) 과 같은 명령문은 c가 되는데,
위의 반복문에서는 '#'이 더해지는 이유에 대해서 질문드립니다.

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(my_string):
    answer = ''
    for letter in my_string:
        # 문자열의 letter가 소문자인경우
        if ord(letter)>=ord('a') and ord(letter)<=ord('z'):
            # 대문자로 변환하여 answer 문자열에 추가
            answer += chr( ord(letter) + ord('A') - ord('a') )
        # 문자열의 letter가 대문자인경우
        elif ord(letter)>=ord('A') and ord(letter)<=ord('Z'):
            # 소문자로 변환하여 answer 문자열에 추가
            answer += chr( ord(letter) + ord('A') - ord('a') )

    return answer
1 개의 답변
James

질문을 올리신지 꽤 오래 되었네요. 지금은 해결하셨는지 모르겠습니다.
답변을 드리자면,
아스키 코드 상에서 소문자를 대문자로 바꾸는 경우에는 소문자를 빼주고, 대문자를 더해줍니다.
반대로 대문자를 소문자로 바꾸는 경우에는 대문자를 빼주고, 소문자를 더해주어야 합니다.

작성하신 코드는 letter가 소문자일 때와 대문자일 때 모두 대문자를 더하고 소문자를 빼주어 조건문이 무용지물이 되었습니다. 대문자를 소문자로 바꾸는 부분의 코드를 수정해야 합니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.