본문 바로가기
프로그래밍

이름 궁합 테스트 만들기

by 코끼리_땃쥐 2022. 6. 6.
반응형

이름 두가지로 궁합테스트 하는것을 코드로 만들어 봤습니닷.

 

이름을 획수로 표현하고 더하면서 마지막 숫자 두개를 퍼센트로 나타내며 궁합으로 표시하는 프로그램입니땃 !

 

예시 )

손으로 계산 해봤을때 58%가 나옵니다

프로그램으로도 한번 돌려봅시땃

 

name_percent() 함수는 제가 만든 함수있니다. 이름 두개를 받고 리턴값으로 인트형 반환합니다. (예상 58)

예상과 한것과 같이 58을 리턴했습니다. !!

 

 

 

전체 코드는 아래에 있습니땃.

# 초성 리스트. 00 ~ 18
CHOSUNG_LIST = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ']
# 중성 리스트. 00 ~ 20
JUNGSUNG_LIST = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ']
# 종성 리스트. 00 ~ 27 + 1(1개 없음)
JONGSUNG_LIST = [' ', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ']

JAEUM_DIC = { "ㄱ" : 2
            , "ㄴ" : 2
            , "ㄷ" : 3
            , "ㄹ" : 5
            , "ㅁ" : 4
            , "ㅂ" : 4
            , "ㅅ" : 2
            , "ㅇ" : 1
            , "ㅈ" : 3
            , "ㅊ" : 4
            , "ㅋ" : 3
            , "ㅌ" : 4
            , "ㅍ" : 4
            , "ㅎ" : 3
            , "ㄲ" : 4
            , "ㄸ" : 6
            , "ㅃ" : 8
            , "ㅆ" : 4
            , "ㅉ" : 6
            , 'ㄵ' : 5
            , 'ㄶ' : 5
            , 'ㄺ' : 7
            , 'ㄻ' : 9
            , 'ㄼ' : 9
            , 'ㄽ' : 7
            , 'ㄾ' : 9
            , 'ㄿ' : 9
            , 'ㅀ' : 8
            , 'ㅄ' : 9
            , " " : 0 }

MOEUM_DIC = {"ㅏ" : 2
            , "ㅑ" : 3
            , "ㅓ" : 2
            , "ㅕ" : 3
            , "ㅗ" : 2
            , "ㅛ" : 3
            , "ㅜ" : 2
            , "ㅠ" : 3
            , "ㅡ" : 1
            , "ㅣ" : 1
            , "ㅐ" : 3
            , "ㅒ" : 4
            , "ㅔ" : 3
            , "ㅖ" : 4
            , "ㅘ" : 4
            , "ㅙ" : 5
            , "ㅚ" : 3
            , "ㅝ" : 4
            , "ㅞ" : 5
            , "ㅟ" : 3
            , "ㅢ" : 2
            }


def name_divide(korean_word) -> list:
    """" 출처 : https://frhyme.github.io/python/python_korean_englished/ """
    r_lst = []
    for w in list(korean_word.strip()):
        if '가'<=w<='힣':
            ch1 = (ord(w) - ord('가'))//588
            ch2 = ((ord(w) - ord('가')) - (588*ch1)) // 28
            ch3 = (ord(w) - ord('가')) - (588*ch1) - 28*ch2
            r_lst.append([CHOSUNG_LIST[ch1], JUNGSUNG_LIST[ch2], JONGSUNG_LIST[ch3]])
        else:
            pass
    return r_lst

def name_to_number(name : list) -> list:
    hap = list()
    for name_len in range(len(name)):
        num = 0
        for jaeum_moeum in range(0,3):
            if jaeum_moeum == 1:
                num += MOEUM_DIC[name[name_len][jaeum_moeum]]
            else:
                num += JAEUM_DIC[name[name_len][jaeum_moeum]]
        num = num%10
        hap.append(num)
    return hap

def number_general(nos_1 : list, nos_2 : list) -> list:
    result = list()
    maxlen = len(nos_1) if len(nos_1) >= len(nos_2) else len(nos_2)
    for stroke in range(maxlen):
        try:
            result.append(nos_1[stroke])
        except IndexError:
            pass
        try:
            result.append(nos_2[stroke])
        except IndexError:
            pass

    return result

def add_stroke(name_stroke : list ) -> int:
    idx = 0
    data = list()
    while True:
        try:
            number = name_stroke[idx] + name_stroke[idx+1]
            number = number%10
            data.append(number)
            idx += 1
        except IndexError:
            return data
    pass

def percent(name_stroke : list()):
    percent = add_stroke(name_stroke)
    while True:
        percent = add_stroke(percent)
        if len(percent) == 2:
            return (percent[0] * 10) + percent[1]

def name_percent(name_1 : str, name_2 : str):
    name_1_divide = name_divide(name_1)
    name_2_divide = name_divide(name_2)
    number1 = name_to_number(name_1_divide)
    number2 = name_to_number(name_2_divide)

    test = number_general(number1,number2)
    result = percent(test)
    return result

 

반응형

'프로그래밍' 카테고리의 다른 글

용어정리  (3) 2022.09.20
메이플 큐브 등급업 시뮬레이터  (0) 2022.06.26
로또번호 랜덤 뽑기  (0) 2022.06.02
메이플 스타포스 강화 시뮬레이션 코드  (0) 2022.06.02
export(함수 내보내기)  (0) 2022.04.02

댓글