import gradio as gr # 질문 리스트 questions = [ "질문 1: 새로운 환경에서 당신은 어떻게 행동하나요?", "질문 2: 문제를 해결할 때 당신의 접근 방식은 무엇인가요?", "질문 3: 여가 시간을 보낼 때 당신의 선호는 무엇인가요?", "질문 4: 결정을 내릴 때 중요하게 생각하는 것은 무엇인가요?", "질문 5: 프로젝트를 수행할 때 당신의 스타일은 어떤가요?", "질문 6: 스트레스를 받을 때 당신의 대처 방식은?", "질문 7: 다른 사람과의 관계에서 당신은 어떤 타입인가요?", "질문 8: 새로운 아이디어나 이론을 접할 때 당신의 반응은?", "질문 9: 일상적인 결정을 내릴 때 당신은 어떻게 하나요?", "질문 10: 팀 프로젝트에서 당신의 역할은 주로 무엇인가요?" ] # 객관식 옵션 options = [ ["계획대로 움직인다", "상황에 따라 유연하게 대응한다"], ["논리적으로 분석한다", "직관에 의존한다"], ["친구들과 시간을 보낸다", "혼자만의 시간을 선호한다"], ["사실과 데이터", "사람들의 감정과 의견"], ["철저한 계획에 따른다", "즉흥적으로 움직인다"], ["문제를 해결하기 위해 분석한다", "감정을 표현하거나 상담한다"], ["사교적이고 활동적", "조용하고 내성적"], ["호기심을 가지고 탐구한다", "실용적인 측면을 우선 고려한다"], ["계획을 세워서 결정한다", "직감적으로 결정한다"], ["리더십을 발휘한다", "팀원으로서 지원한다"] ] # MBTI 유형 계산 및 정보 반환 함수 def calculate_mbti(*answers): # MBTI 차원 점수 초기화 dimensions = {"E": 0, "I": 0, "S": 0, "N": 0, "T": 0, "F": 0, "J": 0, "P": 0} # 사용자의 선택에 따라 차원 점수 업데이트 for answer, (introvert, extrovert) in zip(answers, [(1, 0), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0)]): if answer == 0: # 첫 번째 옵션 선택 dimensions["E"] += extrovert dimensions["I"] += introvert else: # 두 번째 옵션 선택 dimensions["S"] += extrovert dimensions["N"] += introvert dimensions["T"] += extrovert dimensions["F"] += introvert dimensions["J"] += extrovert dimensions["P"] += introvert # MBTI 유형 결정 mbti_type = "" mbti_type += "E" if dimensions["E"] >= dimensions["I"] else "I" mbti_type += "S" if dimensions["S"] >= dimensions["N"] else "N" mbti_type += "T" if dimensions["T"] >= dimensions["F"] else "F" mbti_type += "J" if dimensions["J"] >= dimensions["P"] else "P" # MBTI 유형에 따른 성격의 장단점과 유명인 반환 mbti_details = mbti_info.get(mbti_type, {"장단점": "정보 없음", "유명인": "정보 없음"}) return mbti_type, mbti_details["장단점"], mbti_details["유명인"] # MBTI 유형에 대한 정보 딕셔너리 mbti_info = { "ESTJ": {"장단점": "실용적이고 현실적, 책임감이 강하며 리더십을 잘 발휘한다.", "유명인": "조지 워싱턴"}, "ISTJ": {"장단점": "신중하고 철저한 분석력을 가지며 안정적이고 신뢰할 만하다.", "유명인": "제프 베조스"}, "ESFJ": {"장단점": "사교적이고 동정심이 많으며 협동을 잘한다.", "유명인": "오프라 윈프리"}, "ISFJ": {"장단점": "충실하고 사려 깊으며 신중하고 성실하다.", "유명인": "로저 페더러"}, "ESTP": {"장단점": "적응력이 강하고 활동적이며 문제를 해결하는 능력이 뛰어나다.", "유명인": "마돈나"}, "ISTP": {"장단점": "분석력이 뛰어나며 상황을 잘 파악하여 즉흥적으로 대처할 수 있다.", "유명인": "클린트 이스트우드"}, "ESFP": {"장단점": "낙천적이고 친절하며 즐거움을 주변 사람들과 나눈다.", "유명인": "마릴린 먼로"}, "ISFP": {"장단점": "상냥하고 온화하며 예술적인 면모를 가지고 있다.", "유명인": "프린스"}, "ENTJ": {"장단점": "목표지향적이고 결단력이 있으며 리더십을 탁월하게 발휘한다.", "유명인": "줄리아 로버츠"}, "INTJ": {"장단점": "전략적이고 뛰어난 분석력을 가지며 목표를 달성하기 위해 노력한다.", "유명인": "일론 머스크"}, "ENTP": {"장단점": "창의적이고 독창적이며 논리적으로 사고한다.", "유명인": "볼테르"}, "INTP": {"장단점": "논리적이고 분석적이며 독창적인 아이디어를 내놓는다.", "유명인": "알버트 아인슈타인"}, "ENFJ": {"장단점": "열정적이고 동정심이 많으며 다른 사람들을 잘 이끈다.", "유명인": "마더 테레사"}, "INFJ": {"장단점": "이해심이 깊고 통찰력이 뛰어나며 다른 사람들을 이끌어 갈 수 있다.", "유명인": "니콜라 테슬라"}, "ENFP": {"장단점": "열정적이고 상상력이 풍부하며 새로운 아이디어를 제시한다.", "유명인": "월트 디즈니"}, "INFP": {"장단점": "이상주의자로서 창의력이 풍부하고 독창적이다.", "유명인": "윌리엄 셰익스피어"} } # Gradio 인터페이스 구성 iface = gr.Interface( fn=calculate_mbti, inputs=[gr.Radio(options[i], label=questions[i]) for i in range(10)], outputs=[ gr.Textbox(label="당신의 MBTI 유형"), gr.Textbox(label="유형의 장단점"), gr.Textbox(label="대표적인 유명인") ], title="MBTI 진단 테스트", description="10개의 질문에 답하여 당신의 MBTI 유형과 그 유형의 장단점, 대표적인 유명인을 알아보세요." ) # 인터페이스 실행 if __name__ == "__main__": iface.launch()