🛠️ToolsShed

Grip Strength Calculator

Evaluate your grip strength and find your percentile by age and gender.

GripStrengthCalculator.categoryGripStrengthCalculator.male20_29GripStrengthCalculator.female20_29
Excellent56 kg36 kg
Good51 kg32 kg
Average44 kg27 kg
Below Average38 kg22 kg
Poor0 kg0 kg

常见问题

代码实现

def evaluate_grip_strength(kg: float, age: int, gender: str) -> dict:
    """
    Evaluate grip strength percentile by age and gender.
    Norms based on published research (mean ± SD in kg).
    Returns rating category.
    """
    # [mean, excellent_threshold, above_avg, average, below_avg]
    norms = {
        "male": {
            (20, 29): [54, 64, 59, 52, 44],
            (30, 39): [56, 68, 60, 54, 46],
            (40, 49): [54, 66, 58, 52, 44],
            (50, 59): [51, 62, 55, 48, 41],
            (60, 69): [46, 56, 50, 44, 36],
            (70, 120): [39, 48, 42, 36, 29],
        },
        "female": {
            (20, 29): [31, 38, 34, 29, 24],
            (30, 39): [32, 39, 35, 30, 25],
            (40, 49): [31, 38, 34, 29, 24],
            (50, 59): [29, 36, 32, 27, 22],
            (60, 69): [26, 32, 28, 24, 19],
            (70, 120): [22, 28, 24, 20, 15],
        },
    }

    thresholds = None
    for (lo, hi), vals in norms.get(gender.lower(), {}).items():
        if lo <= age <= hi:
            thresholds = vals
            break

    if not thresholds:
        return {"error": "Age/gender out of supported range"}

    _, excellent, above_avg, average, below_avg = thresholds
    if kg >= excellent:
        rating = "Excellent"
    elif kg >= above_avg:
        rating = "Above Average"
    elif kg >= average:
        rating = "Average"
    elif kg >= below_avg:
        rating = "Below Average"
    else:
        rating = "Poor"

    return {"grip_kg": kg, "rating": rating, "age": age, "gender": gender}

print(evaluate_grip_strength(55, 35, "male"))

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.