Python函数报错‘name 'male' is not defined’:理想体重计算程序求助
解决你的Python理想体重计算函数报错问题
首先来说你遇到的name 'male' is not defined错误——这大概率是因为你调用函数时尝试传入了类似BMI(180, male)的参数,但全局环境里根本没定义male这个变量。而且更关键的是,你的函数其实完全不需要传入参数,因为内部已经通过input()自己获取身高和性别了,这就导致参数不仅没用,还容易引发调用错误。
再仔细看你的代码,还有几个需要修正的地方:
- 单位问题:如果输入的是厘米(比如180),直接平方计算会得到离谱的结果(180²×22=712800),必须先转换成米再计算。
- 冗余参数:函数声明了
h和g参数,但内部又重新赋值,完全浪费了参数的作用,还容易混淆。 - 异常处理:如果用户输入的性别不是
male或female,函数会返回None,没有任何提示。
下面是修正后的完整代码,我会逐一说明改动点:
def calculate_ideal_weight(): # 获取身高并转换为米(输入单位为厘米) height_cm = float(input("请输入你的身高(厘米):\n")) height_m = height_cm / 100 # 处理性别输入,兼容大小写和前后空格 gender = input("请输入你的性别('male'或'female'):\n").strip().lower() # 根据性别计算理想体重 if gender == "male": ideal_weight = 22 * (height_m ** 2) elif gender == "female": ideal_weight = 21 * (height_m ** 2) else: print("⚠️ 输入的性别格式不正确,请输入'male'或'female'") return None # 保留两位小数,让结果更直观 return round(ideal_weight, 2) # 调用函数并输出结果 result = calculate_ideal_weight() if result: print(f"✅ 你的理想体重是:{result} 公斤")
关键改动说明:
- 移除冗余参数:函数不再需要传入参数,直接内部获取输入,避免调用时的参数错误。
- 单位转换:把输入的厘米身高转换成米,确保计算结果符合实际(比如180cm男性的理想体重是71.28公斤)。
- 输入容错:用
strip().lower()处理性别输入,哪怕用户输入Male、female这类格式也能正确识别。 - 异常提示:添加了
else分支,当性别输入错误时给出明确提示,避免返回无意义的None。 - 结果优化:用
round()保留两位小数,输出的体重值更符合日常使用习惯。
现在你直接运行这段代码,按照提示输入身高和性别,就能得到正确的理想体重结果啦。
内容的提问来源于stack exchange,提问作者user14720481
相关产品推荐
相关产品推荐

