Python waist_hip函数意外输出None问题求助(附特定输入案例)
腰臀比计算函数返回None问题排查
问题描述
我编写了一个Python函数waist_hip,用于计算腰臀比并判断健康风险等级,但运行时意外输出None。即便输入的数值理论上都落在条件范围内(比如腰围50英寸、臀围100英寸),程序仍返回None。以下是原函数代码:
def waist_hip(): #This function will calculate the waist-to-hip ratio of the user and determine if he or she has a high or low health risk gender = input("What is your gender (M or F)? ") waist_measurement = input("What is your waist measurement (inches)? ") hip_measurment = input("What is your hip measuremnt (inches)? ") waist_measurement = (waist_measurement) hip_measurment = (hip_measurment) WHR_Ratio = float(waist_measurement) / float(hip_measurment) while gender == "M": if WHR_Ratio < 0.9: return("Your health risk: Low") elif 0.9 < WHR_Ratio < 1.0: return("Your health risk: Moderate") else: return("Your health risk: High") while gender == "F": if WHR_Ratio < 0.8: return("Your health risk: Low") elif 0.8 < WHR_Ratio < 0.89: return("Your health risk: Moderate") else: WHR_Ratio = ("Your health risk: High") return WHR_Ratio print(waist_hip())
问题原因
- 误用while循环替代if判断:此处仅需根据性别做单次逻辑判断,
while是循环结构,若用户输入的性别不是严格的"M"或"F"(比如小写"m"/"f"、拼写错误),两个while代码块都不会执行,函数无返回语句,自然返回None。即便输入正确的"M"/"F",用while也属于逻辑误用。 - 变量拼写错误:
hip_measurment和输入提示里的hip measuremnt存在拼写错误(正确应为hip_measurement),虽不影响功能,但降低了代码可读性。 - 冗余代码:
waist_measurement = (waist_measurement)这类语句无实际作用,属于冗余代码。
修复后的代码
def waist_hip(): # 计算腰臀比并判断健康风险等级 gender = input("请输入你的性别(M或F)? ").strip().upper() waist_measurement = input("请输入你的腰围(英寸)? ") hip_measurement = input("请输入你的臀围(英寸)? ") # 计算腰臀比 whr_ratio = float(waist_measurement) / float(hip_measurement) # 根据性别判断风险 if gender == "M": if whr_ratio < 0.9: return "你的健康风险:低" elif 0.9 <= whr_ratio < 1.0: return "你的健康风险:中等" else: return "你的健康风险:高" elif gender == "F": if whr_ratio < 0.8: return "你的健康风险:低" elif 0.8 <= whr_ratio < 0.89: return "你的健康风险:中等" else: return "你的健康风险:高" else: return "请输入有效的性别(M或F)" print(waist_hip())
修复说明
- 将
while替换为if-elif,匹配单次判断的逻辑需求 - 对性别输入做
strip().upper()处理,兼容小写输入和前后空格 - 修复变量拼写错误,统一命名规范
- 补充性别输入无效的返回分支,彻底避免返回
None - 移除冗余代码,优化注释和提示文本的中文可读性
内容的提问来源于stack exchange,提问作者Johan Noh
相关产品推荐
相关产品推荐

