Untitled
unknown
plain_text
10 months ago
5.8 kB
6
Indexable
''' Модуль для расчета результатов пробы Руфье. Сумма измерений пульса в трех попытках (до нагрузки, сразу после и после короткого отдыха) в идеале должна быть не более 200 ударов в минуту. Мы предлагаем детям измерять свой пульс на протяжении 15 секунд, и приводим результат к ударам в минуту умножением на 4: S = 4 * (P1 + P2 + P3) Чем дальше этот результат от идеальных 200 ударов, тем хуже. Традиционно таблицы даются для величины, делённой на 10. Индекс Руфье IR = (S - 200) / 10 оценивается по таблице в соответствии с возрастом: 7-8 9-10 11-12 13-14 15+ (только для подростков!) отл. 6.4 и менее 4.9 и менее 3.4 и менее 1.9 и менее 0.4 и менее хор. 6.5 - 11.9 5 - 10.4 3.5 - 8.9 2 - 7.4 0.5 - 5.9 удовл. 12 - 16.9 10.5 - 15.4 9 - 13.9 7.5 - 12.4 6 - 10.9 слабый 17 - 20.9 15.5 - 19.4 14 - 17.9 12.5 - 16.4 11 - 14.9 неуд. 21 и более 19.5 и более 18 и более 16.5 и более 15 и более для всех возрастов результат "неуд" отстоит от "слабого" на 4, тот от "удовлетворительного" на 5, а "хороший" от "уд" - на 5.5 поэтому напишем функцию ruffier_result(r_index, level), которая будет получать рассчитанный индекс Руфье и уровень "неуд" для возраста тестируемого, и отдавать результат ''' # здесь задаются строки, с помощью которых изложен результат: txt_index = "Ваш индекс Руфье: " txt_workheart = "Работоспособность сердца: " txt_nodata = ''' нет данных для такого возраста''' txt_res = [] txt_res.append('''низкая. Срочно обратитесь к врачу!''') txt_res.append('''удовлетворительная. Обратитесь к врачу!''') txt_res.append('''средняя. Возможно, стоит дополнительно обследоваться у врача.''') txt_res.append(''' выше среднего''') txt_res.append(''' высокая''') def ruffier_index(P1, P2, P3): ''' возвращает значение индекса по трем показателям пульса для сверки с таблицей''' return (4 * (P1+P2+P3) - 200) / 10 def neud_level(age): ''' варианты с возрастом меньше 7 и взрослым надо обрабатывать отдельно, здесь подбираем уровень "неуд" только внутри таблицы: в возрасте 7 лет "неуд" - это индекс 21, дальше каждые 2 года он понижается на 1.5 до значения 15 в 15-16 лет ''' norm_age = (min(age, 15) - 7) // 2 # каждые 2 года разницы от 7 лет превращаются в единицу - вплоть до 15 лет result = 21 - norm_age * 1.5 # умножаем каждые 2 года разницы на 1.5, так распределены уровни в таблице return result def ruffier_result(r_index, level): ''' функция получает индекс Руфье и интерпретирует его, возвращает уровень готовности: число от 0 до 4 (чем выше уровень готовности, тем лучше). ''' if r_index >= level: return 0 level = level - 4 # это не будет выполняться, если мы уже вернули ответ "неуд" if r_index >= level: return 1 level = level - 5 # аналогично, попадаем сюда, если уровень как минимум "уд" if r_index >= level: return 2 level = level - 5.5 # следующий уровень if r_index >= level: return 3 return 4 # здесь оказались, если индекс меньше всех промежуточных уровней, т.е. тестируемый крут. def test(P1, P2, P3, age): ''' эту функцию можно использовать снаружи модуля для подсчетов индекса Руфье. Возвращает готовые тексты, которые остается нарисовать в нужном месте Использует для текстов константы, заданные в начале этого модуля. ''' if age < 7: return (txt_index + "0", txt_nodata) # тайна сия не для теста сего else: ruff_index = ruffier_index(P1, P2, P3) # расчет result = txt_res[ruffier_result(ruff_index, neud_level(age))] # интерпретация, перевод числового уровня подготовки в текстовые данные res = txt_index + str(ruff_index) + '\n' + txt_workheart + result return res
Editor is loading...
Leave a Comment