이 튜토리얼에서는 주어진 문자열이 팬그램(pangram)인지 확인하는 파이썬 프로그램을 작성해 보겠습니다. 먼저 팬그램이 무엇인지 간단히 살펴본 뒤 시작하겠습니다.
팬그램이란?
문자열에 알파벳 대소문자 구분 없이 a부터 z까지 모든 알파벳이 포함되어 있다면, 그 문자열을 팬그램(pangram)이라고 합니다.
대표적인 예로 "The Quick Brown Fox Jumps Over The Lazy Dog"가 있습니다. 이 문장은 모든 알파벳을 최소 한 번씩 포함하고 있어 세계적으로 가장 유명한 영어 팬그램 중 하나입니다.
팬그램 여부를 검사하는 방법은 여러 가지가 있으며, 이번 튜토리얼에서는 그중 두 가지 방법을 소개하겠습니다.
방법 1: 일반적인 반복문 활용
다음 단계를 따라 프로그램을 작성해 보세요.
알고리즘
1. string 모듈을 임포트한다.
2. string.ascii_lowercase 값으로 변수를 초기화한다. 이 값에는 모든 알파벳이 하나의 문자열로 담겨 있다.
3. 팬그램 여부를 검사할 문자열을 초기화한다.
4. is_pangram(string, alphabets) 함수를 정의한다.
4.1. 알파벳을 하나씩 순회한다.
4.1.1. 해당 알파벳이 문자열(소문자 변환)에 존재하지 않으면
4.1.1.1. False를 반환한다.
4.2. 루프가 끝나면 True를 반환한다.
5. 반환값이 True이면 '팬그램'을 출력하고, 아니면 '팬그램 아님'을 출력한다.
예제 코드
## string 모듈 임포트
import string
## 팬그램 여부를 검사하는 함수
def is_pangram(string, alphabets):
## 알파벳을 하나씩 순회
for char in alphabets:
## 해당 문자가 문자열에 없으면
if char not in string.lower():
## False 반환
return False
return True
## 알파벳 변수 초기화
alphabets = string.ascii_lowercase
## 검사할 문자열 초기화
string_one = "The Quick Brown Fox Jumps Over The Lazy Dog"
string_two = "TutorialsPoint TutorialsPoint"
print("팬그램") if is_pangram(string_one, alphabets) else print("팬그램 아님")
print("팬그램") if is_pangram(string_two, alphabets) else print("팬그램 아님")
실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
팬그램 팬그램 아님
첫 번째 문자열은 모든 알파벳을 포함하고 있어 '팬그램'으로 판별되었고, 두 번째 문자열은 일부 알파벳이 빠져 있어 '팬그램 아님'으로 판별된 것을 확인할 수 있습니다.
방법 2: 집합(Set) 자료구조 활용
이번에는 집합(set) 자료구조를 이용해 동일한 결과를 얻는 방법을 살펴보겠습니다. 집합을 활용하면 별도의 함수와 반복문 없이 코드를 훨씬 간결하게 작성할 수 있습니다.
알고리즘
1. string 모듈을 임포트한다. 2. string.ascii_lowercase 값으로 변수를 초기화한다. 이 값에는 모든 알파벳이 하나의 문자열로 담겨 있다. 3. 팬그램 여부를 검사할 문자열을 초기화한다. 4. 알파벳과 문자열(소문자 변환)을 각각 집합으로 변환한다. 5. 문자열의 집합이 알파벳 집합을 포함(크거나 같음)하면 '팬그램', 아니면 '팬그램 아님'을 출력한다.
그럼 코드를 작성해 보겠습니다.
예제 코드
## string 모듈 임포트
import string
## 알파벳 변수 초기화
alphabets = string.ascii_lowercase
## 검사할 문자열 초기화
string_one = "The Quick Brown Fox Jumps Over The Lazy Dog"
string_two = "TutorialsPoint TutorialsPoint"
print("팬그램") if set(string_one.lower()) >= set(alphabets) else print("팬그램 아님")
print("팬그램") if set(string_two.lower()) >= set(alphabets) else print("팬그램 아님")
실행 결과
위 프로그램을 실행하면 첫 번째 방법과 동일한 결과를 얻을 수 있습니다.
팬그램 팬그램 아님
집합 비교 연산자(>=)를 사용하면 문자열에 있는 고유한 문자들의 집합이 전체 알파벳 집합을 완전히 포함하는지 한 번의 비교로 확인할 수 있습니다.
마무리
이번 튜토리얼에서는 반복문을 사용하는 방법과 집합(set)을 활용하는 방법, 두 가지 방식으로 문자열이 팬그램인지 확인해 보았습니다. 특히 집합을 활용한 방법은 코드가 짧고 직관적이어서 실무에서도 널리 사용됩니다. 상황에 맞는 방법을 선택해 활용해 보시기 바랍니다.
튜토리얼 내용에 대해 궁금한 점이 있다면 댓글로 남겨주세요.