# app.py import gradio as gr import json # TCI 유형 데이터 TCI_TYPES = { "Type1": { "name": "예시 유형1", "description": "이 유형은 ...", "career": ["직업1", "직업2", "직업3"], "compatibility": { "good": {"Type2": "이유..."}, "bad": {"Type3": "이유..."} } }, # 다른 6가지 유형도 동일한 형식으로 추가 # ... } # 질문 리스트 QUESTIONS = [ "질문 1 내용...", "질문 2 내용...", "질문 3 내용...", # 최소 20개 이상의 질문 추가 # ... ] # 선택지 OPTIONS = ["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"] def calculate_tci(responses): # 예시 점수 계산 로직 # 실제 TCI 점수 계산 방식에 맞게 수정 필요 scores = {type_name: 0 for type_name in TCI_TYPES.keys()} for i, response in enumerate(responses): # 각 질문을 특정 유형에 매핑하는 로직 필요 # 예를 들어, 질문 i가 Type1에 해당하면 scores["Type1"] += response 점수 pass # 퍼센트 계산 total = sum(scores.values()) percentages = {k: (v / total * 100) if total > 0 else 0 for k, v in scores.items()} # 최고 점수 유형 선택 selected_type = max(percentages, key=percentages.get) return selected_type, percentages[selected_type] def get_results(responses): selected_type, percentage = calculate_tci(responses) type_info = TCI_TYPES[selected_type] # 형식에 맞는 결과 생성 result = { "유형": type_info["name"], "퍼센트": f"{percentage:.2f}%", "성격 설명": type_info["description"], "추천 직업": ", ".join(type_info["career"]), "좋은 궁합": ", ".join([f"{k}: {v}" for k, v in type_info["compatibility"]["good"].items()]), "나쁜 궁합": ", ".join([f"{k}: {v}" for k, v in type_info["compatibility"]["bad"].items()]) } return result def main(): with gr.Blocks() as demo: gr.Markdown("# TCI 기질 분석기") with gr.Form(): responses = [] for question in QUESTIONS: response = gr.Radio(label=question, choices=OPTIONS, type="index") responses.append(response) submit = gr.Button("결과 보기") output = gr.JSON() submit.click(fn=get_results, inputs=responses, outputs=output) demo.launch() if __name__ == "__main__": main()