기글 하드웨어 소프트웨어 포럼
소프트웨어와 인터넷에 관련된 이야기를 자유롭게 나눌 수 있는 곳입니다. 게임에 관련된 글은 게임 포럼을 이용해 주세요.
하라는 정보처리기사 공부는 안하고! 느지막히 일어나서 하루 종일 붙잡고 있던 것을 올려 봅니다.
#!/usr/bin/python3 ## 참조문헌 : ## http://d2.naver.com/helloworld/76650 ## http://dream.ahboom.net/i/entry/28 ## http://www.unicode.org/charts/PDF/U1100.pdf chosung = ( "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ") jungsung = ( "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ") jongsung = ( "", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ") def isHangeul(one_character): """글자 하나를 입력받아, 이것이 조합된 한글인지 판단한다.""" return 0xAC00 <= ord(one_character[:1]) <= 0xD7A3 def hangeulExplode(one_hangeul): """조합된 한글 글자 하나를 입력받아, 이를 초·중·종성으로 분해한다.""" a = one_hangeul[:1] if isHangeul(a) != True: return False b = ord(a) - 0xAC00 cho = b // (21*28) jung = b % (21*28) // 28 jong = b % 28 if jong == 0: return (chosung[cho], jungsung[jung]) else: return (chosung[cho], jungsung[jung], jongsung[jong]) def hangeulJoin(inputlist): """분해된 한글 낱자들을 리스트로 입력받아, 이를 조합하여 모아쓰기된 문장으로 바꾼다.""" result = "" cho, jung, jong = 0, 0, 0 inputlist.insert(0, "") while len(inputlist) > 1: if inputlist[-1] in jongsung: if inputlist[-2] in jungsung: jong = jongsung.index(inputlist.pop()) else: result += inputlist.pop() elif inputlist[-1] in jungsung: if inputlist[-2] in chosung: jung = jungsung.index(inputlist.pop()) cho = chosung.index(inputlist.pop()) result += chr(0xAC00 + ((cho*21)+jung)*28+jong) cho, jung, jong = 0, 0, 0 else: result += inputlist.pop() else: result += inputlist.pop() else: return result[::-1] def pureosseugi(inputtext): """입력된 문장에 있는 모든 한글 글자를 풀어쓰기로 바꾼다.""" result = "" for i in inputtext: if isHangeul(i) == True: for j in hangeulExplode(i): result += j else: result += i return result def moasseugi(inputtext): """입력된 문장에 있는 모든 풀어쓰기된 한글을 모아쓰기로 바꾼다.""" t1 = [] for i in inputtext: t1.append(i) return hangeulJoin(t1)
실행 결과물 :
>>> pureosseugi("안녕하세요. Hello. 저는 잉여입니다.") 'ㅇㅏㄴㄴㅕㅇㅎㅏㅅㅔㅇㅛ. Hello. ㅈㅓㄴㅡㄴ ㅇㅣㅇㅇㅕㅇㅣㅂㄴㅣㄷㅏ.' >>> moasseugi("ㅇㅏㄴㄴㅕㅇㅎㅏㅅㅔㅇㅛ. Hello. ㅈㅓㄴㅡㄴ ㅇㅣㅇㅇㅕㅇㅣㅂㄴㅣㄷㅏ.") '안녕하세요. Hello. 저는 잉여입니다.' >>>
역시 다른 해야 할 것이 있을 때 하는 잉여짓은 재미있는 것 같아요.
작성된지 2주일이 지난 글에는 새 코멘트를 달 수 없습니다.