hyeongnym commited on
Commit
0f8e312
Β·
verified Β·
1 Parent(s): aee119d

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +170 -2
app.py CHANGED
@@ -1,2 +1,170 @@
1
- import os
2
- exec(os.environ.get('APP'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+
4
+ # MBTI 질문 리슀트 (50λ¬Έν•­)
5
+ questions = [
6
+ # E vs I (13λ¬Έν•­)
7
+ "1. λ‚˜λŠ” μƒˆλ‘œμš΄ μ‚¬λžŒλ“€κ³Ό λ§Œλ‚˜λŠ” 것을 즐긴닀.",
8
+ "2. 혼자만의 μ‹œκ°„μ„ 더 μ„ ν˜Έν•œλ‹€.",
9
+ "3. λŒ€ν™”λ₯Ό λ¨Όμ € μ‹œμž‘ν•˜λŠ” νŽΈμ΄λ‹€.",
10
+ "4. λ§Žμ€ μ‚¬λžŒλ“€κ³Ό μ–΄μšΈλ¦¬λ©΄ μ—λ„ˆμ§€κ°€ μ†Œμ§„λœλ‹€.",
11
+ "5. νŒŒν‹°λ‚˜ λͺ¨μž„μ—μ„œ μƒˆλ‘œμš΄ μ‚¬λžŒλ“€κ³Ό λŒ€ν™”ν•˜κΈ°λ₯Ό μ’‹μ•„ν•œλ‹€.",
12
+ "6. μ‘°μš©ν•œ ν™˜κ²½μ—μ„œ 혼자 μΌν•˜λŠ” 것이 νŽΈν•˜λ‹€.",
13
+ "7. κ·Έλ£Ή ν™œλ™μ΄λ‚˜ νŒ€ ν”„λ‘œμ νŠΈλ₯Ό μ„ ν˜Έν•œλ‹€.",
14
+ "8. μ‚¬νšŒμ  λͺ¨μž„ ν›„μ—λŠ” 혼자만의 μ‹œκ°„μ΄ ν•„μš”ν•˜λ‹€.",
15
+ "9. λ§Žμ€ μ‚¬λžŒλ“€ μ•žμ—μ„œ λ°œν‘œν•˜λŠ” 것이 즐겁닀.",
16
+ "10. μΉœκ΅¬λ“€κ³Ό ν•¨κ»˜ μžˆμ„ λ•Œ κ°€μž₯ νŽΈμ•ˆν•˜λ‹€.",
17
+ "11. μƒˆλ‘œμš΄ ν™˜κ²½μ— μ μ‘ν•˜λŠ” 것이 어렡지 μ•Šλ‹€.",
18
+ "12. ν˜Όμžμ„œ μ—¬ν–‰ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€.",
19
+ "13. λͺ¨μž„μ—μ„œ 쀑심이 λ˜λŠ” 것이 μžμ—°μŠ€λŸ½λ‹€.",
20
+
21
+ # S vs N (13λ¬Έν•­)
22
+ "14. μ‹€μ œμ μ΄κ³  ꡬ체적인 것을 μ„ ν˜Έν•œλ‹€.",
23
+ "15. μƒμƒν•˜κ³  μƒˆλ‘œμš΄ 아이디어λ₯Ό μƒκ°ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€.",
24
+ "16. 세뢀사항에 주의λ₯Ό κΈ°μšΈμΈλ‹€.",
25
+ "17. 큰 그림을 λ³΄λŠ” 것을 μ„ ν˜Έν•œλ‹€.",
26
+ "18. ν˜„μž¬μ— μ§‘μ€‘ν•˜λŠ” νŽΈμ΄λ‹€.",
27
+ "19. 미래의 κ°€λŠ₯성을 μƒμƒν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€.",
28
+ "20. μ‹€μš©μ μ΄κ³  ν˜„μ‹€μ μΈ 해결책을 μ°ΎλŠ”λ‹€.",
29
+ "21. μƒˆλ‘­κ³  ν˜μ‹ μ μΈ 방법을 μ‹œλ„ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€.",
30
+ "22. κ²½ν—˜μ— κΈ°λ°˜ν•œ νŒλ‹¨μ„ μ„ ν˜Έν•œλ‹€.",
31
+ "23. 직관적인 λŠλ‚Œμ„ μ€‘μš”ν•˜κ²Œ μ—¬κΈ΄λ‹€.",
32
+ "24. ꡬ체적인 사싀과 데이터λ₯Ό μ€‘μ‹œν•œλ‹€.",
33
+ "25. 좔상적인 κ°œλ…μ„ νƒκ΅¬ν•˜λŠ” 것이 즐겁닀.",
34
+ "26. 전톡적이고 κ²€μ¦λœ 방식을 μ„ ν˜Έν•œλ‹€.",
35
+
36
+ # T vs F (12λ¬Έν•­)
37
+ "27. 결정을 내릴 λ•Œ λ…Όλ¦¬μ μœΌλ‘œ λΆ„μ„ν•œλ‹€.",
38
+ "28. λ‹€λ₯Έ μ‚¬λžŒμ˜ 감정을 잘 κ³ λ €ν•œλ‹€.",
39
+ "29. 객관적인 사싀을 μ€‘μš”ν•˜κ²Œ μƒκ°ν•œλ‹€.",
40
+ "30. 직감과 감정을 λ”°λ₯΄λŠ” νŽΈμ΄λ‹€.",
41
+ "31. 감정보닀 이성을 더 μ€‘μš”ν•˜κ²Œ μ—¬κΈ΄λ‹€.",
42
+ "32. λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ 감정 μƒνƒœμ— λ―Όκ°ν•˜λ‹€.",
43
+ "33. 논리적 일관성을 μ€‘μš”ν•˜κ²Œ μƒκ°ν•œλ‹€.",
44
+ "34. 곡감λŠ₯λ ₯이 λ›°μ–΄λ‚œ νŽΈμ΄λ‹€.",
45
+ "35. 감정적 결정을 λ‚΄λ¦¬λŠ” 것을 ν”Όν•œλ‹€.",
46
+ "36. λ‹€λ₯Έ μ‚¬λžŒμ˜ μž…μž₯μ—μ„œ μƒκ°ν•˜λ € λ…Έλ ₯ν•œλ‹€.",
47
+ "37. 객관적 뢄석을 톡해 결둠을 λ„μΆœν•œλ‹€.",
48
+ "38. μ‚¬λžŒλ“€ κ°„μ˜ μ‘°ν™”λ₯Ό μ€‘μš”ν•˜κ²Œ μƒκ°ν•œλ‹€.",
49
+
50
+ # J vs P (12λ¬Έν•­)
51
+ "39. κ³„νšμ„ μ„Έμš°κ³  κ·ΈλŒ€λ‘œ μ‹€ν–‰ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€.",
52
+ "40. μœ΅ν†΅μ„± 있게 상황에 λŒ€μ²˜ν•˜λŠ” 것을 μ„ ν˜Έν•œλ‹€.",
53
+ "41. λ§ˆκ°κΈ°ν•œμ„ μ •ν™•νžˆ μ§€ν‚€λŠ” νŽΈμ΄λ‹€.",
54
+ "42. 일정을 미리 μ •ν•˜κΈ°λ³΄λ‹€ 즉ν₯적으둜 ν–‰λ™ν•œλ‹€.",
55
+ "43. μ²΄κ³„μ μœΌλ‘œ 일을 μ²˜λ¦¬ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€.",
56
+ "44. 상황에 따라 κ³„νšμ„ λ³€κ²½ν•˜λŠ” 것이 μžμ—°μŠ€λŸ½λ‹€.",
57
+ "45. ν•  일을 미리 κ³„νšν•˜κ³  μ€€λΉ„ν•œλ‹€.",
58
+ "46. μƒˆλ‘œμš΄ κ°€λŠ₯성을 μœ„ν•΄ μ—΄λ €μžˆλŠ” 것이 μ’‹λ‹€.",
59
+ "47. 정해진 κ·œμΉ™κ³Ό 절차λ₯Ό 잘 λ”°λ₯Έλ‹€.",
60
+ "48. κΈ‰μž‘μŠ€λŸ¬μš΄ 변화에도 잘 μ μ‘ν•œλ‹€.",
61
+ "49. 일의 μ™„λ£Œλ₯Ό μ€‘μš”ν•˜κ²Œ μƒκ°ν•œλ‹€.",
62
+ "50. μ—¬λŸ¬ 선택지λ₯Ό 였래 μ—΄μ–΄λ‘λŠ” 것을 μ„ ν˜Έν•œλ‹€."
63
+ ]
64
+
65
+ def calculate_mbti(scores):
66
+ try:
67
+ # 점수λ₯Ό float둜 λ³€ν™˜ν•˜κ³  μœ νš¨μ„± 검사
68
+ scores = [float(score) if score is not None else 3.0 for score in scores]
69
+ if not all(1 <= score <= 5 for score in scores):
70
+ return "였λ₯˜: λͺ¨λ“  μ μˆ˜λŠ” 1μ—μ„œ 5 사이여야 ν•©λ‹ˆλ‹€."
71
+
72
+ # 역채점이 ν•„μš”ν•œ λ¬Έν•­ 처리
73
+ reverse_questions = [2, 4, 6, 8, 12, 15, 17, 19, 21, 23, 25, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
74
+ for i in reverse_questions:
75
+ scores[i-1] = 6 - scores[i-1]
76
+
77
+ # 점수 계산
78
+ E = sum(scores[0:13]) # 13λ¬Έν•­
79
+ S = sum(scores[13:26]) # 13λ¬Έν•­
80
+ T = sum(scores[26:38]) # 12λ¬Έν•­
81
+ J = sum(scores[38:50]) # 12λ¬Έν•­
82
+
83
+ # μ΅œλŒ€ 점수 계산
84
+ max_ei = 13 * 5 # E/I μ΅œλŒ€μ μˆ˜
85
+ max_sn = 13 * 5 # S/N μ΅œλŒ€μ μˆ˜
86
+ max_tf = 12 * 5 # T/F μ΅œλŒ€μ μˆ˜
87
+ max_jp = 12 * 5 # J/P μ΅œλŒ€μ μˆ˜
88
+
89
+ # MBTI μœ ν˜• κ²°μ •
90
+ mbti = ""
91
+ mbti += "E" if E > max_ei/2 else "I"
92
+ mbti += "S" if S > max_sn/2 else "N"
93
+ mbti += "T" if T > max_tf/2 else "F"
94
+ mbti += "J" if J > max_jp/2 else "P"
95
+
96
+ # 각 νŠΉμ„±μ˜ 강도 계산 (λ°±λΆ„μœ¨)
97
+ e_score = (E / max_ei) * 100
98
+ s_score = (S / max_sn) * 100
99
+ t_score = (T / max_tf) * 100
100
+ j_score = (J / max_jp) * 100
101
+
102
+ result = f"""
103
+ λ‹Ήμ‹ μ˜ MBTI μœ ν˜•μ€ {mbti}μž…λ‹ˆλ‹€.
104
+
105
+ μ„ΈλΆ€ μ„±ν–₯ 뢄석:
106
+ μ™Έν–₯(E) vs λ‚΄ν–₯(I): {e_score:.1f}% vs {100-e_score:.1f}%
107
+ 감각(S) vs 직관(N): {s_score:.1f}% vs {100-s_score:.1f}%
108
+ 사고(T) vs 감정(F): {t_score:.1f}% vs {100-t_score:.1f}%
109
+ νŒλ‹¨(J) vs 인식(P): {j_score:.1f}% vs {100-j_score:.1f}%
110
+
111
+ μ„±ν–₯ 강도 해석:
112
+ - 맀우 강함: 70% 이상
113
+ - 강함: 60-69%
114
+ - 보톡: 40-59%
115
+ - 약함: 31-39%
116
+ - 맀우 약함: 30% μ΄ν•˜
117
+
118
+ β€» 각 μ„±ν–₯이 50%에 κ°€κΉŒμšΈμˆ˜λ‘ μ–‘μͺ½ νŠΉμ„±μ„ κ· ν˜•μžˆκ²Œ μ‚¬μš©ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
119
+ β€» 검사 κ²°κ³ΌλŠ” 참고용이며, μ‹€μ œ 성격 μœ ν˜•κ³Ό λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
120
+ """
121
+
122
+ return result
123
+
124
+ except Exception as e:
125
+ return f"였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}\nλͺ¨λ“  μ§ˆλ¬Έμ— λ‹΅λ³€ν–ˆλŠ”μ§€ ν™•μΈν•΄μ£Όμ„Έμš”."
126
+
127
+ def create_test():
128
+ with gr.Blocks(title="MBTI μ„±κ²©μœ ν˜• 검사") as app:
129
+ gr.Markdown("""
130
+ # MBTI μ„±κ²©μœ ν˜• 검사 (50λ¬Έν•­)
131
+ 각 μ§ˆλ¬Έμ— λŒ€ν•΄ 1(μ „ν˜€ μ•„λ‹ˆλ‹€)λΆ€ν„° 5(맀우 κ·Έλ ‡λ‹€)κΉŒμ§€ μ‘λ‹΅ν•΄μ£Όμ„Έμš”.
132
+ λ”μš± μ •ν™•ν•œ κ²°κ³Όλ₯Ό μœ„ν•΄ λͺ¨λ“  μ§ˆλ¬Έμ— μ†”μ§ν•˜κ²Œ λ‹΅λ³€ν•΄ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.
133
+ """)
134
+
135
+ with gr.Column():
136
+ # μ§ˆλ¬Έλ³„ μŠ¬λΌμ΄λ” 생성
137
+ sliders = []
138
+ for i, q in enumerate(questions, 1):
139
+ slider = gr.Slider(
140
+ minimum=1,
141
+ maximum=5,
142
+ step=1,
143
+ value=3,
144
+ label=q,
145
+ info="1: μ „ν˜€ μ•„λ‹ˆλ‹€ ~ 5: 맀우 κ·Έλ ‡λ‹€"
146
+ )
147
+ sliders.append(slider)
148
+
149
+ submit_btn = gr.Button("κ²°κ³Ό 확인")
150
+ result_text = gr.Textbox(label="검사 κ²°κ³Ό", lines=12)
151
+
152
+ # μ—λŸ¬ 처리λ₯Ό ν¬ν•¨ν•œ 제좜 ν•¨μˆ˜
153
+ def safe_submit(*args):
154
+ try:
155
+ return calculate_mbti(args)
156
+ except Exception as e:
157
+ return f"였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"
158
+
159
+ submit_btn.click(
160
+ fn=safe_submit,
161
+ inputs=sliders,
162
+ outputs=result_text
163
+ )
164
+
165
+ return app
166
+
167
+ # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰
168
+ if __name__ == "__main__":
169
+ app = create_test()
170
+ app.launch()