파이썬으로 대문자 소문자 변환하기(2)
파이썬으로 대문자를 소문자로 변환하는 프로그램 만들기
문자열을 처리할 때 대문자와 소문자를 변환하는 작업은 종종 필요합니다. 특히 대소문자 구분 없이 데이터를 처리하거나 사용자 입력을 정규화할 때 유용합니다. 이번 글에서는 파이썬을 사용하여 대문자를 소문자로 또는 소문자를 대문자로 변환하는 방법을 알아보겠습니다. 중요한 것은 내장 함수를 사용하지 않고, 직접 문자열을 비교하여 변환하는 방법을 소개하는 것입니다. 이 과정에서 문자열의 기본적인 조작 방법과 반복문, 조건문에 대해 더 깊이 이해할 수 있을 것입니다.
파이썬 문자열 변환의 기본 개념
파이썬에서 문자열 변환은 흔히 upper()와 lower() 함수로 간단히 해결할 수 있습니다. 그러나 이번 예제에서는 이러한 내장 함수를 사용하지 않고 문자열을 변환하는 방법을 다룹니다. 이를 통해 문자열의 각 문자를 하나씩 비교하고 변환하는 과정에서 파이썬의 다양한 기능을 이해할 수 있습니다.
문자열을 변환하는 기본 개념은 간단합니다. 특정 문자가 대문자라면 소문자로 변환하고, 소문자라면 대문자로 변환합니다. 이러한 과정을 이해하기 위해, 우리는 대문자와 소문자의 ASCII 값을 이용할 수 있습니다. 대문자 A-Z의 ASCII 값은 65에서 90까지이고, 소문자 a-z의 ASCII 값은 97에서 122까지입니다. 이를 이용하여 대문자를 소문자로 변환할 수 있습니다.
예를 들어, 대문자 'A'의 ASCII 값은 65이고, 소문자 'a'의 ASCII 값은 97입니다. 이를 이용하여 대문자를 소문자로 변환하는 방법을 살펴보겠습니다.
초급 코드 예제 ① — 가장 단순한 형태
가장 단순한 형태의 코드 예제를 통해 변환 방법을 이해해보겠습니다. 이 예제에서는 변수와 리스트를 사용하여 대문자를 소문자로 변환하는 방법을 설명합니다.
word = "HELLO"
result = ""
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
small = 'abcdefghijklmnopqrstuvwxyz'
for ch in word:
if ch in big:
index = big.index(ch)
result += small[index]
else:
result += ch
print(result)
위 코드는 'HELLO'라는 문자열을 소문자로 변환합니다. big 리스트에는 대문자가, small 리스트에는 소문자가 포함되어 있습니다. 각 문자를 big 리스트에서 찾고, small 리스트의 동일한 위치에서 대응하는 소문자를 찾아 변환합니다.
초급 코드 예제 ② — 조건/반복 추가
이번에는 조건문과 반복문을 추가하여 소문자도 대문자로 변환하는 방법을 살펴보겠습니다.
word = "Hello World!"
result = ""
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
small = 'abcdefghijklmnopqrstuvwxyz'
for ch in word:
if ch in big:
index = big.index(ch)
result += small[index]
elif ch in small:
index = small.index(ch)
result += big[index]
else:
result += ch
print(result)
이번 예제에서는 'Hello World!'를 입력으로 받아 대문자를 소문자로, 소문자를 대문자로 변환합니다. elif 조건을 추가하여 소문자를 대문자로 변환할 수 있게 했습니다. 이 과정에서 문자가 알파벳이 아닌 경우 그대로 두는 방법도 포함되었습니다.
중급 코드 예제 ③ — 실용 프로그램
이제 반복문과 조건문을 사용하여 실용적인 문자열 변환 프로그램을 만들어 보겠습니다.
word = input("Enter a string: ")
result = ""
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
small = 'abcdefghijklmnopqrstuvwxyz'
for ch in word:
found = False
for i in range(26):
if ch == big[i]:
result += small[i]
found = True
break
elif ch == small[i]:
result += big[i]
found = True
break
if not found:
result += ch
print("Converted String: ", result)
이 프로그램은 사용자가 입력한 문자열에서 대문자를 소문자로, 소문자를 대문자로 변환합니다. found 변수를 사용해 변환이 이루어졌는지 체크하며, 변환되지 않은 문자는 그대로 결과 문자열에 추가됩니다.
중급 코드 예제 ④ — 또 다른 실용 프로그램
다음은 문자열의 특정 부분을 직접 변환하는 조금 더 복잡한 예제입니다.
word = input("Enter a string: ")
start = int(input("Enter start index: "))
end = int(input("Enter end index: "))
result = word[:start]
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
small = 'abcdefghijklmnopqrstuvwxyz'
for ch in word[start:end]:
found = False
for i in range(26):
if ch == big[i]:
result += small[i]
found = True
break
elif ch == small[i]:
result += big[i]
found = True
break
if not found:
result += ch
result += word[end:]
print("Converted String: ", result)
이 예제에서는 사용자가 지정한 인덱스 구간 내에서만 대소문자 변환을 수행합니다. start와 end 인덱스를 입력받아 해당 구간의 문자만 변환하고 나머지는 그대로 둡니다.
자주 하는 실수와 주의사항
문자열 변환 시 자주 발생하는 실수를 몇 가지 살펴보겠습니다. 각 예시는 잘못된 코드와 올바른 코드를 함께 제시합니다.
# 실수 1: 대소문자 비교 시 오타
# 잘못된 코드
word = "hello"
if "H" in word:
print("Contains capital H")
# 올바른 코드
if "h" in word:
print("Contains lowercase h")
# 실수 2: 인덱스 범위 초과
# 잘못된 코드
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print(big[26]) # IndexError
# 올바른 코드
if len(big) > 25:
print(big[25])
# 실수 3: 문자열 연결 시 빈 문자열 처리
# 잘못된 코드
result = ""
result += None # TypeError
# 올바른 코드
result = ""
if result is not None:
result += "Something"
상급 코드 예제 ① — 함수 도입
상급 단계에서는 함수와 클래스를 도입하여 코드를 더 구조화해보겠습니다. 함수의 도입으로 코드의 재사용성을 높이고 가독성을 개선합니다.
def convert_case(word):
result = ""
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
small = 'abcdefghijklmnopqrstuvwxyz'
for ch in word:
found = False
for i in range(26):
if ch == big[i]:
result += small[i]
found = True
break
elif ch == small[i]:
result += big[i]
found = True
break
if not found:
result += ch
return result
# 사용 예시
word = input("Enter a string: ")
print("Converted String: ", convert_case(word))
이번 예제에서는 convert_case 함수를 생성하여 변환 작업을 수행하도록 했습니다. 함수의 도입은 코드의 재사용성을 높이고, 다른 부분에서도 동일한 기능을 수행할 수 있게 해줍니다.
상급 코드 예제 ② — 함수 활용 실전
이제 함수와 함께 클래스 구조를 도입하여 더 복잡한 프로그램을 만들어 보겠습니다.
class StringConverter:
def __init__(self):
self.big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
self.small = 'abcdefghijklmnopqrstuvwxyz'
def convert_case(self, word):
result = ""
for ch in word:
found = False
for i in range(26):
if ch == self.big[i]:
result += self.small[i]
found = True
break
elif ch == self.small[i]:
result += self.big[i]
found = True
break
if not found:
result += ch
return result
# 사용 예시
converter = StringConverter()
word = input("Enter a string: ")
print("Converted String: ", converter.convert_case(word))
위 예제는 StringConverter 클래스를 사용하여 대소문자 변환을 수행합니다. 클래스 구조를 사용하면 코드의 모듈화를 통해 유지보수가 용이해집니다.
상급 코드 예제 ③ — 종합 실전
마지막으로 클래스와 함수를 활용하여 좀 더 종합적인 기능을 제공하는 프로그램을 만들어 보겠습니다. 이 프로그램은 입력 문자열의 특정 구간에 대해서만 대소문자 변환을 수행하도록 설계되었습니다.
class StringConverter:
def __init__(self):
self.big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
self.small = 'abcdefghijklmnopqrstuvwxyz'
def convert_specific_range(self, word, start, end):
result = word[:start]
for ch in word[start:end]:
found = False
for i in range(26):
if ch == self.big[i]:
result += self.small[i]
found = True
break
elif ch == self.small[i]:
result += self.big[i]
found = True
break
if not found:
result += ch
result += word[end:]
return result
# 사용 예시
converter = StringConverter()
word = input("Enter a string: ")
start = int(input("Enter start index: "))
end = int(input("Enter end index: "))
print("Converted String: ", converter.convert_specific_range(word, start, end))
이번 예제에서는 convert_specific_range 메서드를 통해 사용자가 원하는 구간만 변환하도록 했습니다. 이는 프로그램이 사용자 요구에 맞게 더 유연하게 동작할 수 있도록 합니다.
요약
이번 글에서는 파이썬을 사용하여 문자열의 대문자와 소문자를 변환하는 방법을 살펴보았습니다. 내장 함수를 사용하지 않고 직접 문자열을 비교하여 변환함으로써 파이썬의 기본적인 문자열 처리 방법을 이해할 수 있었습니다. 초급에서 상급까지 다양한 단계의 코드를 작성하며, 함수와 클래스의 중요성도 확인할 수 있었습니다.
#파이썬초급 #Python기초 #코딩독학 #문자열변환 #대소문자변환 #파이썬프로그래밍 #프로그래밍기초 #파이썬코드 #초급프로그래밍 #파이썬응용