메뉴 건너뛰기

import gradio as gr

def mbti_test(q1, q2, q3, q4, q5, q6, q7, q8, q9, q10):

    # 각 지표별 점수 초기화 (0점부터 시작)
    e_score = 0
    n_score = 0
    f_score = 0
    p_score = 0

    # [질문 1~10] 선택지에 따른 점수 합산 (단순 if문 구조)

    # E(외향) vs I(내향)
    if q1 == "사람들과 함께 있을 때 에너지가 생긴다": e_score = e_score + 1
    if q2 == "먼저 말을 거는 편이다": e_score = e_score + 1
    if q3 == "주말에는 밖으로 나가는 게 좋다": e_score = e_score + 1

    # S(감각) vs N(직관)
    if q4 == "상상을 자주 하는 편이다": n_score = n_score + 1
    if q5 == "영화 볼 때 숨겨진 의미를 찾으려 한다": n_score = n_score + 1

    # T(사고) vs F(감정)
    if q6 == "고민 상담을 들으면 해결책부터 생각난다": f_score = f_score - 1 # T면 점수 깎기
    else: f_score = f_score + 1 # F면 점수 더하기
    if q7 == "리액션보다는 내용이 중요하다": f_score = f_score - 1
    else: f_score = f_score + 1
    if q8 == "친구가 우울해서 화분 샀다고 하면 '왜 우울해?'라고 묻는다": f_score = f_score + 1

    # J(판단) vs P(계획)
    if q9 == "여행 갈 때 시간 단위로 계획을 짠다": p_score = p_score - 1
    else: p_score = p_score + 1
    if q10 == "벼락치기보다는 미리미리 하는 편이다": p_score = p_score - 1
    else: p_score = p_score + 1

    # 최종 MBTI 글자 조합 (if문을 이용한 판정)
    result = ""

    # E/I 판정
    if e_score >= 2: result = result + "E"
    else: result = result + "I"

    # S/N 판정
    if n_score >= 1: result = result + "N"
    else: result = result + "S"

    # T/F 판정
    if f_score >= 2: result = result + "F"
    else: result = result + "T"

    # J/P 판정
    if p_score >= 1: result = result + "P"
    else: result = result + "J"

​​​​​​​    return f"당신의 MBTI 결과는 [{result}] 입니다!"

# --- 웹 화면 구성 (학생들이 수정하기 쉬운 부분) ---

with gr.Blocks() as demo:
    gr.Markdown("# 🔍 초간단 10문항 MBTI 테스트")
    gr.Markdown("질문에 답하고 아래의 '결과 보기' 버튼을 눌러주세요.")

    # 질문지 구성 (Radio 버튼 사용)
    q1 = gr.Radio(["사람들과 함께 있을 때 에너지가 생긴다", "혼자 있을 때 에너지가 충전된다"], label="1. 당신은 에너지를 어디서 얻나요?")
    q2 = gr.Radio(["먼저 말을 거는 편이다", "상대방이 말을 걸 때까지 기다린다"], label="2. 처음 본 사람에게?")
    q3 = gr.Radio(["주말에는 밖으로 나가는 게 좋다", "집에서 쉬는 게 제일 좋다"], label="3. 쉬는 날에는?")
    q4 = gr.Radio(["현실적인 사실이 중요하다", "상상을 자주 하는 편이다"], label="4. 당신의 생각 스타일은?")
    q5 = gr.Radio(["보이는 그대로 믿는다", "영화 볼 때 숨겨진 의미를 찾으려 한다"], label="5. 사물을 볼 때?")
    q6 = gr.Radio(["해결책 제시", "공감과 위로"], label="6. 친구가 힘들다고 할 때 당신은?")
    q7 = gr.Radio(["리액션보다는 내용이 중요하다", "내용보다는 말투와 반응이 중요하다"], label="7. 대화할 때 더 중요한 것은?")
    q8 = gr.Radio(["'무슨 화분 샀어?' (T)", "'왜 우울해?' (F)"], label="8. 친구가 우울해서 화분 샀다고 하면?")
    q9 = gr.Radio(["시간 단위로 계획을 짠다", "발길 닿는 대로 움직인다"], label="9. 여행 갈 때 스타일은?")
    q10 = gr.Radio(["미리미리 과제를 한다", "마지막에 몰아서 벼락치기를 한다"], label="10. 할 일이 생겼을 때?")

    btn = gr.Button("결과 확인하기", variant="primary")
    output = gr.Textbox(label="테스트 결과")

    # 버튼 클릭 시 함수 호출
    btn.click(
        fn=mbti_test, 
        inputs=[q1, q2, q3, q4, q5, q6, q7, q8, q9, q10], 
        outputs=output
    )

# share=True로 설정하면 외부 링크(gradio.live)가 생성됩니다.
demo.launch(share=True)
위로