파이썬 문자열에서 특정 문자만 골라내기

문자열에서 특정 문자 개수 세기

프로그래밍을 하다 보면 문자열에서 특정 문자의 개수를 세는 작업이 필요할 때가 많습니다. 예를 들어, 사용자의 이름에 특정 알파벳이 몇 번 등장하는지 알고 싶을 수 있습니다. 이는 입력 받은 문자열을 순회하며 일치하는 문자의 개수를 증가시키는 방식으로 해결할 수 있습니다. 오늘은 이 문제를 파이썬을 사용하여 해결하는 방법을 단계별로 살펴보겠습니다.

문자열에서 특정 문자 세기의 기본 개념

문자열은 문자(character)의 연속으로, 텍스트를 저장하고 조작하는 데 자주 사용됩니다. 프로그래밍에서 문자열의 각 문자는 인덱스를 통해 개별적으로 접근할 수 있습니다. 문자열에서 특정 문자의 개수를 세기 위해서는 문자열을 한 문자씩 탐색하면서 조건에 맞는 문자가 발견될 때마다 카운트를 증가시키면 됩니다. 이 방법은 특히 파이썬의 for 반복문과 if 조건문을 활용하여 쉽게 구현할 수 있습니다.

초급 단계: 기본 코드 예제

먼저, 가장 단순한 형태의 코드를 봅시다. 소문자 'k'와 대문자 'K'를 문자열에서 찾는 프로그램입니다.

name = "Kimmy"
count = 0
for ch in name:
if ch == 'k' or ch == 'K':
count += 1
print(count)

실행 결과

1

이 코드는 문자열 name을 순회하면서 각 문자 ch가 'k' 또는 'K'인지 확인합니다. 조건에 맞으면 count를 증가시킵니다. 마지막으로, 총 개수를 출력합니다. 이 예제는 반복문과 조건문을 통해 문자열을 탐색하는 기본 방법을 보여줍니다.

초급 단계: 조건문과 반복문 추가

여기서는 사용자 입력을 받아 문자열을 처리하도록 확장해 봅시다.

name = "Katherine"
count = 0
for ch in name:
if ch == 'k' or ch == 'K':
count += 1
print(f"The number of 'k' and 'K': {count}")

실행 결과

The number of 'k' and 'K': 1

이 프로그램은 사용자로부터 이름을 받아 처리합니다. 또한, f-string을 사용하여 결과를 보다 직관적으로 출력합니다. 이처럼 간단한 변형을 통해 프로그램의 활용성을 높일 수 있습니다.

중급 단계: 실용적 프로그램 예제

이제 프로그램을 좀 더 실용적으로 만들어 봅시다. 사용자로부터 다양한 입력을 받아 처리할 수 있도록 개선합니다.

name = "Kenny, KIM, kate, Kelvin"
name_list = name.split(', ')
counts = []
for name in name_list:
count = 0
for ch in name:
if ch == 'k' or ch == 'K':
count += 1
counts.append(count)
print("Counts for each name:", counts)

실행 결과

Counts for each name: [1, 1, 1, 1]

여러 이름을 쉼표로 구분하여 입력할 수 있게 했습니다. 각 이름에 포함된 'k'와 'K'의 개수를 리스트에 저장합니다. 이 코드는 문자열 분할, 리스트 활용 등 중급 수준의 기능을 포함합니다.

중급 단계: 변형된 실용 프로그램 예제

이번에는 다른 형식의 입력을 처리하는 예제를 살펴봅니다.

name = "K, Kk, kK, kk, KkK"
names = name.split(', ')
result = {n: n.count('k') + n.count('K') for n in names}
print("Result:", result)

실행 결과

Result: {'K': 1, 'Kk': 2, 'kK': 2, 'kk': 2, 'KkK': 3}

이 코드에서는 리스트 내포와 사전(dictionary)을 사용하여 각 이름과 해당 'k', 'K'의 개수를 매핑합니다. 이 방식은 코드의 간결성과 효율성을 높입니다.

중급 단계: 자주 하는 실수와 해결책

프로그래밍 초보자들이 자주 범하는 실수들을 살펴봅시다.

# 잘못된 코드 예시
name = "Kathy"
count = 0
for char in name:
if char == 'k' or char == 'K'
count += 1
print(count)
# 올바른 코드 예시
name = "Kathy"
count = 0
for char in name:
if char == 'k' or char == 'K':
count += 1
print(count)

실행 결과

1

위의 잘못된 코드에서는 조건문 끝에 콜론이 빠져 있어 문법 오류가 발생할 수 있습니다. 이러한 작은 실수가 코드 실행을 방해할 수 있습니다.

상급 단계: 함수 도입

이제 함수를 사용하여 프로그램을 구조화합니다. 함수는 코드 재사용성을 높이고 유지보수를 용이하게 합니다.

def count_k(name):
count = 0
for ch in name:
if ch == 'k' or ch == 'K':
count += 1
return count

name = "Kelly"
print(f"{name}: {count_k(name)}")

실행 결과

Kelly: 1

이 함수는 문자열을 입력받아 'k'와 'K'의 개수를 반환합니다. 이전에 본 코드보다 더 모듈화되어 있으며, 다양한 상황에서 쉽게 재사용할 수 있습니다.

상급 단계: 함수 활용 실전 예제

이번에는 여러 문자열을 처리할 수 있는 프로그램을 작성해봅시다.

def count_k(name):
return name.count('k') + name.count('K')

def count_multiple(names):
return {name: count_k(name) for name in names}

names = ["Karla", "Kirk", "karla"]
print("Counts:", count_multiple(names))

실행 결과

Counts: {'Karla': 1, 'Kirk': 2, 'karla': 1}

이 코드는 리스트 내포와 함께 두 개의 함수를 사용하여 각 이름에 대한 'k'와 'K'의 개수를 계산합니다. 함수의 활용은 코드의 가독성을 높이고, 다양한 입력에 대해 쉽게 확장할 수 있게 합니다.

상급 단계: 종합 실전 예제

마지막으로, 프로그램의 복잡한 기능을 모두 결합하여 종합적인 예제를 만들어봅시다.

def count_k(name):
return name.count('k') + name.count('K')

def process_names(names_str):
names = names_str.split(', ')
return {name: count_k(name) for name in names}

names_str = "Kathy, Kevin, KIM, kate"
results = process_names(names_str)
for name, count in results.items():
print(f"{name}: {count}")

실행 결과

Kathy: 1
Kevin: 1
KIM: 1
kate: 1

여기서는 문자열을 입력으로 받아 쉼표로 분리한 후, 각각의 이름에 대해 'k'와 'K'의 개수를 출력하는 프로그램입니다. 이처럼 상급 단계에서는 함수와 데이터 구조를 활용하여 프로그램의 복잡성을 관리할 수 있습니다.

요약

문자열에서 특정 문자의 개수를 세는 프로그램을 작성하는 방법을 단계별로 살펴보았습니다. 초급 단계에서는 기본적인 반복문과 조건문을 사용하였고, 중급 단계에서는 실용적인 프로그램을 작성하였습니다. 상급 단계에서는 함수를 도입하여 코드의 재사용성과 유지보수성을 향상시켰습니다. 이제 이러한 개념을 바탕으로 다양한 문제를 해결할 수 있을 것입니다.

#문자열 #파이썬 #알파벳카운트 #코딩초급 #프로그래밍기초 #반복문 #조건문 #코딩독학 #함수사용