Facebook
From a, 9 Months ago, written in Python.
Embed
Download Paste or View Raw
Hits: 172
  1. # ruffier.py
  2.  
  3. ''' Модуль для розрахунку результатів проби Руa’є.
  4.  
  5.  
  6. Сума вимірювань пульсу у трьох спробах (до навантаження, одразу після та після короткого відпочинку)
  7. в ідеалі має бути не більше 200 ударів на хвилину.
  8. Ми пропонуємо дітям вимірювати свій пульс протягом 15 секунд,
  9. і наводимо результат до ударів за хвилину множенням на 4:
  10.  S = 4* (P1 + P2 + P3)
  11. Що далі цей результат від ідеальних 200 ударів, то гірше.
  12. Традиційно таблиці даються для величини, поділеної на 10.
  13.  
  14.  
  15. Індекс Руф’є  
  16. IR = (S - 200) / 10
  17. оцінюється за таблицею відповідно до віку:
  18.         7-8             9-10             11-12          13-14                15+
  19.                                                                    (тільки для підлітків!)
  20. чуд.    6.4 і менше    4.9 і менше       3.4 і менше    1.9 і менше          0.4 і менше
  21. доб.    6.5 - 11.9     5 - 10.4          3.5 - 8.9      2 - 7.4              0.5 - 5.9
  22. задов.  12 - 16.9      10.5 - 15.4       9 - 13.9       7.5 - 12.4           6 - 10.9
  23. слабкий 17 - 20.9      15.5 - 19.4       14 - 17.9      12.5 - 16.4          11 - 14.9
  24. незад.  21 і більше    19.5 і більше     18 і більше    16.5 і більше        15 і більше
  25.  
  26.  
  27. для будь-якого віку результат "незадовільно" віддалений від "слабкого" на 4,
  28. той від "задовільного" на 5, а "добрий" від "чуд" - на 5.5
  29.  
  30.  
  31. тому напишемо функцію ruffier_result(r_index, level), яка отримуватиме
  32. розрахований індекс Руф'є та рівень "незадовільно" для віку тестованого, і віддавати результат '''
  33. # тут задаються рядки, за допомогою яких викладено результат:
  34. txt_index = "Ваш індекс Руф’є:"
  35. txt_workheart = "Працездатність серця:"
  36. txt_nodata = ''' Немає даних для такого віку '''
  37. txt_res = []
  38. txt_res.append(''' Низька. Терміново зверніться до лікаря! ''')
  39. txt_res.append(''' Задовільна. Зверніться до лікаря! ''')
  40. txt_res.append(''' Середня. Можливо, варто додатково обстежитись у лікаря. ''')
  41. txt_res.append(''' Вище середнього ''')
  42. txt_res.append(''' Висока ''')
  43.  
  44.  
  45. def ruffier_index(P1, P2, P3):
  46.    '''повертає значення індексу за трьома показниками пульсу для звірки з таблицею'''
  47.    return (4 * (P1+P2+P3) - 200) / 10
  48.  
  49.  
  50. def neud_level(age):
  51.    ''' варіанти з віком менше 7 і дорослим треба обробляти окремо,
  52.  тут підбираємо рівень "незадовільно" тільки всередині таблиці:
  53.  у віці 7 років "незад" - це індекс 21, далі кожні 2 роки він знижується на 1.5 до значення 15 в 15-16 років '''
  54.    norm_age = (min(age, 15) - 7) // 2  # кожні 2 роки різниці від 7 років перетворюються на одиницю - аж до 15 років
  55.    result = 21 - norm_age * 1.5 # множимо кожні 2 роки різниці на 1.5, так розподілені рівні у таблиці
  56.    return result
  57.  
  58. def ruffier_result(r_index, level):
  59.    ''' функція отримує індекс Руф’є і інтерпретує його,
  60.  повертає рівень готовності: число від 0 до 4
  61.  (що вище рівень готовності, то краще). '''
  62.    if r_index >= level:
  63.        return 0
  64.    level = level - 4 # это не будет выполняться, если мы уже вернули ответ "неуд"
  65.    if r_index >= level:
  66.        return 1
  67.    level = level - 5 # аналогично, попадаем сюда, если уровень как минимум "уд"
  68.    if r_index >= level:
  69.        return 2
  70.    level = level - 5.5 # следующий уровень
  71.    if r_index >= level:
  72.        return 3
  73.    return 4 # здесь оказались, если индекс меньше всех промежуточных уровней, т.е. тестируемый крут.
  74.  
  75.  
  76. def test(P1, P2, P3, age):
  77.    ''' цю функцію можна використовувати зовні модуля для підрахунків індексу Руф’є.
  78.  Повертає готові тексти, які залишається намалювати у потрібному місці
  79.  Використовує для текстів константи, задані на початку цього модуля. '''
  80.    if age < 7:
  81.        return (txt_index + "0", txt_nodata) # тайна сия не для теста сего
  82.    else:
  83.        ruff_index = ruffier_index(P1, P2, P3) # расчет
  84.        result = txt_res[ruffier_result(ruff_index, neud_level(age))] # интерпретация, перевод числового уровня подготовки в текстовые данные
  85.        res = txt_index + str(ruff_index) + '\n' + txt_workheart + result
  86.        return res