人体健康状态检测Python脚本

人体健康状态检测Python脚本 这是一个人体健康状态检测的Python脚本输入基本身体数据后会自动生成健康报告。python#!/usr/bin/env python3人体健康状态检测与报告生成系统输入基本身体数据自动输出健康评估报告import mathfrom datetime import datetimefrom typing import Dict, Any, Optional, List, Tupleclass HealthReport:健康报告生成器# 健康范围参考标准基于通用医学指南BMI_RANGES {underweight: {max: 18.4, label: 偏瘦, risk: 低体重风险建议增加营养摄入},normal: {min: 18.5, max: 24.9, label: 正常, risk: 体重正常继续保持},overweight: {min: 25.0, max: 29.9, label: 超重, risk: 超重风险建议控制饮食和增加运动},obese: {min: 30.0, label: 肥胖, risk: 肥胖风险较高建议咨询医生制定减重计划}}BLOOD_PRESSURE_RANGES {normal: {systolic_min: 90, systolic_max: 120, diastolic_min: 60, diastolic_max: 80,label: 正常, risk: 血压正常继续保持健康生活方式},elevated: {systolic_min: 120, systolic_max: 129, diastolic_min: 60, diastolic_max: 80,label: 偏高, risk: 血压偏高建议减少盐分摄入增加运动},hypertension_stage1: {systolic_min: 130, systolic_max: 139, diastolic_min: 80, diastolic_max: 89,label: 一级高血压, risk: 一级高血压建议就医评估并调整生活方式},hypertension_stage2: {systolic_min: 140, diastolic_min: 90,label: 二级高血压, risk: 二级高血压请尽快就医需要药物干预}}HEART_RATE_RANGES {bradycardia: {max: 59, label: 心动过缓, risk: 心率偏低如有头晕乏力症状请就医},normal: {min: 60, max: 100, label: 正常, risk: 心率正常},tachycardia: {min: 101, label: 心动过速, risk: 心率偏快建议放松休息后重新测量}}def __init__(self, name: str 用户):self.name nameself.data: Dict[str, Any] {}self.risks: List[str] []self.suggestions: List[str] []def input_data(self) - None:交互式输入身体数据print(\n * 50)print(f 欢迎 {self.name}进入人体健康状态检测系统)print( * 50)try:self.data[gender] input(请输入性别 (男/女): ).strip()self.data[age] float(input(请输入年龄 (岁): ))self.data[height] float(input(请输入身高 (厘米): ))self.data[weight] float(input(请输入体重 (公斤): ))# 血压可选bp_input input(是否输入血压数据(y/n默认n): ).strip().lower()if bp_input y:self.data[systolic] float(input(请输入收缩压 (mmHg): ))self.data[diastolic] float(input(请输入舒张压 (mmHg): ))else:self.data[systolic] Noneself.data[diastolic] None# 心率可选hr_input input(是否输入心率数据(y/n默认n): ).strip().lower()if hr_input y:self.data[heart_rate] float(input(请输入静息心率 (次/分钟): ))else:self.data[heart_rate] None# 其他健康习惯可选self.data[exercise] input(每周运动频率 (天/周如0/3/5): ).strip() or 0self.data[sleep] input(平均睡眠时间 (小时/天): ).strip() or 7self.data[stress] input(自我评估压力水平 (1-101最低): ).strip() or 5except ValueError as e:print(f\n⚠️ 输入错误: {e}请确保输入有效数字)raisedef set_data(self, data: Dict[str, Any]) - None:以字典方式设置数据用于非交互模式self.data datadef _calculate_bmi(self) - float:计算BMIheight_m self.data[height] / 100return self.data[weight] / (height_m ** 2)def _assess_bmi(self) - Tuple[str, str]:评估BMI并返回状态和风险描述bmi self._calculate_bmi()for key, range_info in self.BMI_RANGES.items():if min in range_info and bmi range_info[min]:continueif max in range_info and bmi range_info[max]:continuereturn range_info[label], range_info[risk]return 未知, 无法评估def _assess_blood_pressure(self) - Tuple[Optional[str], Optional[str]]:评估血压sys self.data.get(systolic)dia self.data.get(diastolic)if sys is None or dia is None:return None, Nonefor key, info in self.BLOOD_PRESSURE_RANGES.items():sys_ok (systolic_min not in info or sys info[systolic_min]) and \(systolic_max not in info or sys info[systolic_max])dia_ok (diastolic_min not in info or dia info[diastolic_min]) and \(diastolic_max not in info or dia info[diastolic_max])if sys_ok and dia_ok:return info[label], info[risk]return 异常, 血压数值异常请重新测量或就医def _assess_heart_rate(self) - Tuple[Optional[str], Optional[str]]:评估心率hr self.data.get(heart_rate)if hr is None:return None, Nonefor key, info in self.HEART_RATE_RANGES.items():if min in info and hr info[min]:continueif max in info and hr info[max]:continuereturn info[label], info[risk]return 异常, 心率数值异常请重新测量def _assess_lifestyle(self) - None:评估生活方式相关风险exercise int(self.data.get(exercise, 0))sleep float(self.data.get(sleep, 7))stress int(self.data.get(stress, 5))if exercise 2:self.risks.append(运动不足每周运动少于2天建议逐步增加活动量)self.suggestions.append( 每周至少进行150分钟中等强度有氧运动)elif exercise 4:self.suggestions.append(✅ 运动频率良好建议保持并增加力量训练)if sleep 6:self.risks.append(睡眠不足少于6小时/天长期可能影响健康)self.suggestions.append( 保证7-8小时优质睡眠建立规律作息)elif sleep 9:self.suggestions.append(⚠️ 睡眠时间较长建议检查是否存在嗜睡问题)if stress 8:self.risks.append(压力水平较高≥8/10需要关注心理健康)self.suggestions.append( 尝试冥想、深呼吸或瑜伽等减压方式)elif stress 6:self.suggestions.append(⚖️ 注意调节压力保持工作生活平衡)# 根据性别添加特殊建议if self.data.get(gender) 女:self.suggestions.append( 建议定期进行妇科检查和乳腺自检)elif self.data.get(gender) 男:self.suggestions.append( 建议定期进行前列腺检查和心血管筛查)def _age_related_advice(self) - None:根据年龄给出建议age self.data.get(age, 30)if age 60:self.suggestions.append( 建议每年进行全面体检关注骨密度和认知功能)self.suggestions.append( 注意补充钙质和维生素D预防骨质疏松)elif age 45:self.suggestions.append( 建议每年进行心血管风险评估和肿瘤筛查)elif age 30:self.suggestions.append( 建议每2年进行常规体检关注代谢指标)def generate_report(self) - str:生成完整的健康报告# 核心指标bmi self._calculate_bmi()bmi_label, bmi_risk self._assess_bmi()bp_label, bp_risk self._assess_blood_pressure()hr_label, hr_risk self._assess_heart_rate()# 收集风险和建议self.risks []self.suggestions []if bmi_risk:self.risks.append(bmi_risk)if bp_risk:self.risks.append(bp_risk)if hr_risk:self.risks.append(hr_risk)self._assess_lifestyle()self._age_related_advice()# 构建报告report []report.append(\n * 60)report.append(f 个人健康状态检测报告)report.append( * 60)report.append(f 姓名: {self.name})report.append(f 性别: {self.data.get(gender, 未填)})report.append(f 年龄: {self.data.get(age, 未填)} 岁)report.append(f 生成时间: {datetime.now().strftime(%Y-%m-%d %H:%M)})report.append(- * 60)# 核心指标report.append(\n 核心生理指标:)report.append(f • BMI: {bmi:.1f} → 状态: {bmi_label})if bp_label:report.append(f • 血压: {self.data.get(systolic, N/A)}/{self.data.get(diastolic, N/A)} mmHg → 状态: {bp_label})if hr_label:report.append(f • 静息心率: {self.data.get(heart_rate, N/A)} 次/分钟 → 状态: {hr_label})report.append(f • 睡眠: {self.data.get(sleep, N/A)} 小时/天)report.append(f • 运动: {self.data.get(exercise, N/A)} 天/周)report.append(f • 压力自评: {self.data.get(stress, N/A)}/10)# 风险评估report.append(\n⚠️ 风险提示:)if self.risks:for i, risk in enumerate(self.risks, 1):report.append(f {i}. {risk})else:report.append( ✅ 未发现明显健康风险请继续保持)# 建议部分report.append(\n 健康建议:)if self.suggestions:for i, sug in enumerate(self.suggestions, 1):report.append(f {i}. {sug})else:report.append( ✅ 各项指标良好建议定期复查)# 总结report.append(\n - * 60)if len(self.risks) 0:report.append( 总体评价: 健康状态良好继续保持)elif len(self.risks) 2:report.append( 总体评价: 存在部分风险因素建议根据提示进行调整)else:report.append( 总体评价: 存在多项风险建议尽快就医进行全面检查)report.append( * 60)report.append( *本报告仅供参考不能替代专业医疗诊断*)report.append( * 60 \n)return \n.join(report)def save_report(self, filename: Optional[str] None) - str:保存报告到文件if filename is None:filename fhealth_report_{self.name}_{datetime.now().strftime(%Y%m%d)}.txtcontent self.generate_report()with open(filename, w, encodingutf-8) as f:f.write(content)return filenamedef main():主函数 - 交互式运行print(\n 人体健康状态检测系统 v1.0)print(请按照提示输入您的身体数据...)name input(请输入您的姓名默认用户: ).strip() or 用户reporter HealthReport(name)try:reporter.input_data()report reporter.generate_report()print(report)# 询问是否保存save input(是否保存报告到文件(y/n默认n): ).strip().lower()if save y:filename reporter.save_report()print(f✅ 报告已保存至: {filename})except KeyboardInterrupt:print(\n\n 已取消检测)except Exception as e:print(f\n❌ 发生错误: {e})if __name__ __main__:main()优化建议 后续有需要可以根据需要调整代码开头的 BMI_RANGES、BLOOD_PRESSURE_RANGES 等字典中的阈值以适配不同的健康标准或人群。