尝试打印,但说我的函数名称未定义?

问题描述 投票:0回答:3
name = str(input("What is your name? "))
age = int(input("What is your age? "))
weight_float = float(input("What is your weight in pounds? "))
height_float = float(input("What is your height in inches? "))

Pounds2Kilogram = weight_float * 0.453592
Inches2Meter = height_float * 0.0254

weight = Pounds2Kilogram
height = Inches2Meter


class calcBMI:
        
    def __init__(self, name, age, weight, height):
        self.__name = name
        self.__age = age
        self.__weight = weight
        self.__height = height
    
    def getBMI(self):
        return self.__weight / (self.__height **2)
    
    def getStatus(self):
        if getBMI() < 18.5:
            self.__getStatus = "Underweight"
        elif 18.5 < getBMI() < 24.9:
            self.__getStatus = "Normal"
        elif 25.0 < getBMI() < 29.9:
            self.__getStatus = "Overweight"
        elif getBMI() > 30:
            self.__getStatus = "Obese"
    
    def getName(self):
        return self.__name
    
    def getAge(self):
        return self.__age
    
    def getWeight(self):
        return self.__weight
    
    def getHeight(self):
        return self.__height
    

a = calcBMI(name, age, weight, height)     
print("The BMI for ", a.getName(), " is ", a.getBMI(), "which is ", a.getStatus())

我在尝试打印这个 BMI 计算器时遇到了一些问题,最后它应该看起来像,

“(姓名)的 BMI 是(BMI 数字),即(状态,基本上是体重不足、超重等)”

在 getStatus() 中,我尝试从 getBMI() 获取数值并在 if 语句中使用它。 (我不知道为什么这个字又大又粗)

当我尝试打印时出现问题,它提示我像平常一样输入我的姓名、年龄、体重和身高。

这就是它的输出:

NameError: name 'getBMI' is not defined

python
3个回答
2
投票

原因是在

getStatus
函数中,你正在调用
getBmi
但你应该调用
self.getBmi()

getStatus
函数应如下所示:

def getStatus(self):
    if self.getBMI() < 18.5:
        self.__getStatus = "Underweight"
    elif 18.5 < self.getBMI() < 24.9:
        self.__getStatus = "Normal"
    elif 25.0 < self.getBMI() < 29.9:
        self.__getStatus = "Overweight"
    elif self.getBMI() > 30:
        self.__getStatus = "Obese"
    return self.__getStatus

此外,由于

input
自动返回一个字符串,你可以直接说

name = input("What is your name? ")

0
投票

getBMI
未定义为全局函数,因此当您尝试仅将其引用为
NameError
时,会抛出
getBMI
。这个名字的方法不能像C++方法那样裸露地引用。 相反,实例必须将其方法引用为
self
的属性,即在本例中为
self.getBMI()


0
投票

当您尝试将其称为“getBMI”时。这个名字的方法不能像C++方法那样裸露地引用。相反,实例必须将其方法作为 self 的属性引用,即在本例中为 self.getBMI() 。当您尝试将其称为 getBMI 时。这个名字的方法不能像C++方法那样裸露地引用。相反,实例必须将其方法作为 self 的属性引用,即在本例中为 self.getBMI() 。有很大的提供0.478992它指的是获取刚刚的getBMI这个方法不能像这样赤裸裸地引用提供的方式

© www.soinside.com 2019 - 2024. All rights reserved.