Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 문장이 팬그램(Pangram)인지 확인하는 프로그램 만들기

주어진 문장이 팬그램(Pangram)인지 아닌지를 판별하는 것이 이번 포스팅의 목표입니다. 팬그램이란 알파벳 'a'부터 'z'까지 모든 글자를 최소 한 번 이상 포함하고 있는 문장을 의미합니다. 대표적인 예로 영어 알파벳 26글자가 모두 등장하는 "The quick brown fox jumps over the lazy dog" 같은 문장이 있습니다.

이 문제는 파이썬의 set() 메서드와 리스트 컴프리헨션(list comprehension) 기법을 활용하면 간단하게 해결할 수 있습니다.

예제

입력: string = 'abc def ghi jkl mno pqr stu vwx yz'
출력: Yes
// 'a'부터 'z'까지 모든 문자를 포함

입력: string = 'python program'
출력: No
// 'a'부터 'z'까지 모든 문자를 포함하지 않음

알고리즘

1단계: 문자열을 생성한다.
2단계: lower() 메서드를 사용해 전체 문장을 소문자로 변환한다.
3단계: 입력 문자열을 set()으로 변환하여 문장에 포함된 모든 고유한 문자 목록을 얻는다.
4단계: ord() 함수(문자의 ASCII 값을 반환)를 이용해 알파벳만 분리한다.
5단계: 리스트의 길이가 26이면 모든 문자가 존재하므로 팬그램이고, 그렇지 않으면 팬그램이 아니다.

예제 코드

def checkPangram(s):
   lst = []
   for i in range(26):
      lst.append(False)
   for c in s.lower():
      if not c == " ":
         lst[ord(c) - ord('a')] = True
   for ch in lst:
      if ch == False:
         return False
   return True

# Driver Program
str1 = input("문자열을 입력하세요 ::> ")
if (checkPangram(str1)):
   print('"' + str1 + '"')
   print("is a pangram")
else:
   print('"' + str1 + '"')
   print("is not a pangram")

실행 결과

문자열을 입력하세요 ::> abc def ghi jkl mno pqr stu vwx yz
"abc def ghi jkl mno pqr stu vwx yz"
is a pangram

문자열을 입력하세요 ::> python program
"python program"
is not a pangram

더 간결한 방법: set 비교 활용하기

위 코드를 더 짧게 작성하고 싶다면 집합(set)의 부분집합 연산을 활용할 수 있습니다. 알파벳 소문자 전체 집합이 입력 문장의 문자 집합에 포함되어 있는지만 확인하면 됩니다.

import string

def is_pangram(s):
    return set(string.ascii_lowercase) <= set(s.lower())

print(is_pangram("the quick brown fox jumps over the lazy dog"))  # True
print(is_pangram("python program"))  # False

string.ascii_lowercase는 'abcdefghijklmnopqrstuvwxyz' 문자열을 제공하며, 이를 집합으로 변환한 뒤 입력 문장의 문자 집합과 비교하면 한 줄로 팬그램 여부를 판별할 수 있습니다.

마무리

팬그램 검사는 문자열 처리와 집합 자료구조를 연습하기에 좋은 예제입니다. 핵심은 대소문자 통일 → 중복 제거 → 알파벳 개수 확인의 흐름을 이해하는 것입니다. 위 두 가지 방법 중 상황에 맞는 방식을 선택해 활용해 보시기 바랍니다.