Python 3 BMI程序实现:将用户输入存储为二维列表并生成患者报告
可直接运行的完整代码
# 初始化存储所有患者数据的二维列表 patient_records = [] print("\n欢迎使用患者信息录入系统") choice = '' while choice not in ['q', 'quit']: print("\n[1] 录入患者信息") print("[q/quit] 退出程序并输出报告") choice = input("\n请选择操作:").strip().lower() if choice == '1': patient_name = input("请输入患者姓名:").strip() # 校验患者ID,输入负值直接停止录入 try: patient_id = int(input("请输入患者ID号(输入负值可停止录入):")) except ValueError: print("ID必须为数字,请重新操作") continue if patient_id < 0: print("检测到负ID,终止录入流程") break # 身高校验 while True: try: height = int(input("请输入身高(单位:英寸):")) if height < 0: print("输入必须为正整数,请重新输入") continue break except ValueError: print("输入不是有效数字,请重新输入") # 体重校验 while True: try: weight = int(input("请输入体重(单位:磅):")) if weight < 0: print("输入必须为正整数,请重新输入") continue break except ValueError: print("输入不是有效数字,请重新输入") # 计算BMI bmi = round((float(weight) / float(height) ** 2) * 703, 2) # 判断体重分类 if bmi < 16: weight_level = "重度体重过轻" elif 16 <= bmi < 18.5: weight_level = "体重过轻" elif 18.5 <= bmi < 25: weight_level = "健康体重" elif 25 <= bmi < 30: weight_level = "超重" else: weight_level = "肥胖" print(f"当前患者BMI为:{bmi},体重分类:{weight_level}") # 将当前患者数据存入二维列表 patient_records.append([patient_name, patient_id, height, weight, bmi, weight_level]) elif choice in ['q', 'quit']: break else: print("\n无效选择,请重新输入") # 输出所有患者报告 print("\n" + "="*30 + " 所有患者报告 " + "="*30) print(f"{'姓名':<10} {'BMI':<8} {'体重分类':<10}") print("-"*50) for record in patient_records: name, _, _, _, bmi, level = record print(f"{name:<10} {bmi:<8} {level:<10}") print("\n感谢使用,程序退出。")
调整说明
- 新增了空二维列表
patient_records,每条患者数据以列表形式存入该容器,完全符合list of lists的存储要求 - 补充了患者ID负数值校验逻辑,输入负值直接终止录入流程,同时支持输入quit/q退出程序,满足停止录入的需求
- 修复了原代码中身高输入负数未强制重新输入的逻辑漏洞,所有数值输入都做了异常捕获和校验
- 删除了原代码末尾冗余的重复录入代码
- 退出程序前自动遍历二维列表输出所有患者的姓名、BMI、体重分类报告,格式清晰易读
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

