You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:57:05