TCI_TEST / app.py
aliceblue11's picture
Create app.py
f25db82 verified
raw
history blame
2.53 kB
# 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()