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

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())

问题原因

  1. 误用while循环替代if判断:此处仅需根据性别做单次逻辑判断,while是循环结构,若用户输入的性别不是严格的"M"或"F"(比如小写"m"/"f"、拼写错误),两个while代码块都不会执行,函数无返回语句,自然返回None。即便输入正确的"M"/"F",用while也属于逻辑误用。
  2. 变量拼写错误:hip_measurment和输入提示里的hip measuremnt存在拼写错误(正确应为hip_measurement),虽不影响功能,但降低了代码可读性。
  3. 冗余代码: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:10:21