Spaces:
Running
Running
def traditional_mbti_score(responses): | |
"""Traditional MBTI scoring algorithm""" | |
# Initialize scores for each dimension | |
scores = { | |
'E': 0, 'I': 0, # Extraversion vs Introversion | |
'S': 0, 'N': 0, # Sensing vs Intuition | |
'T': 0, 'F': 0, # Thinking vs Feeling | |
'J': 0, 'P': 0 # Judging vs Perceiving | |
} | |
# Import the actual question dimensions from questionnaire.py | |
from .questionnaire import load_questionnaire | |
questions = load_questionnaire() | |
question_dimensions = {q['id']: q['dimension'] for q in questions} | |
# Score each response (1=Disagree, 2=Slightly Disagree, 3=Neutral, 4=Slightly Agree, 5=Agree) | |
for question_id, response in responses.items(): | |
if question_id in question_dimensions: | |
dimension = question_dimensions[question_id] | |
# Convert response to score (1-5 scale) | |
if isinstance(response, str): | |
response_map = { | |
'strongly_disagree': 1, 'disagree': 2, 'neutral': 3, | |
'agree': 4, 'strongly_agree': 5 | |
} | |
score = response_map.get(response, 3) | |
else: | |
score = int(response) | |
# Add to dimension score | |
scores[dimension] += score | |
# Calculate percentages for each dimension pair | |
result = {} | |
pairs = [('E', 'I'), ('S', 'N'), ('T', 'F'), ('J', 'P')] | |
for dim1, dim2 in pairs: | |
total = scores[dim1] + scores[dim2] | |
if total > 0: | |
result[f'{dim1}_score'] = scores[dim1] / total | |
result[f'{dim2}_score'] = scores[dim2] / total | |
else: | |
result[f'{dim1}_score'] = 0.5 | |
result[f'{dim2}_score'] = 0.5 | |
return result | |
def determine_mbti_type(scores): | |
"""Determine MBTI type from scores""" | |
type_str = "" | |
# E vs I | |
type_str += "E" if scores.get('E_score', 0) > scores.get('I_score', 0) else "I" | |
# S vs N | |
type_str += "S" if scores.get('S_score', 0) > scores.get('N_score', 0) else "N" | |
# T vs F | |
type_str += "T" if scores.get('T_score', 0) > scores.get('F_score', 0) else "F" | |
# J vs P | |
type_str += "J" if scores.get('J_score', 0) > scores.get('P_score', 0) else "P" | |
return type_str | |
if __name__ == "__main__": | |
# Test scoring | |
test_responses = { | |
1: 4, 2: 5, 3: 3, 4: 4, 5: 3, | |
6: 2, 7: 4, 8: 4, 9: 5, 10: 3, | |
11: 4, 12: 2, 13: 4, 14: 3, 15: 4, | |
16: 5, 17: 4, 18: 4, 19: 3, 20: 2 | |
} | |
scores = traditional_mbti_score(test_responses) | |
mbti_type = determine_mbti_type(scores) | |
print(f"Scores: {scores}") | |
print(f"MBTI Type: {mbti_type}") |