简体   繁体   中英

Why wont my code work?

def main():
    name = input("What is your first name?: ")
    name2 = input("What is your last name?: ")
    kg = float(input("What is your weight in kilograms?: "))
    meters = float(input("What is your height in meters?: "))
    mass = float(kg)
    height = float(meters)
    Health(BMI, Ponderal, Rohrer)
    print(name2+",",name,"(BMI:",BMI,",",\
        "Ponderal Index:",Ponderal,",","Rohrer's Index:",Rohrer,",",")")

***It should return something along the lines of Last, First(BMI: 35.234, Ponderal Index: 16.5, Rohrer's Index: 114) Im in a intro to python class and its really late to contact anyone else for help. The whole purpose of this exercise is to create functions and call back to them.

Edit : Thanks a lot for the help guys, I know a lot of the questions on here are normally far more advanced, but the quick replies and the amount of helpful tips is greatly appreciated.

If a function returns something, then you should put it somewhere. For example, in a variable!

Here, change your functions:

def main():
    name = input("What is your first name?: ")
    name2 = input("What is your last name?: ")
    mass = float(input("What is your weight in kilograms?: "))
    height = float(input("What is your height in meters?: "))
    #mass = float(kg) #not needed
    #height = float(meters) #not needed
    result = health(mass, height)
    #printing based on the return value. result[0] is bmi, and so on.

    print("%s, %s (BMI: %d, Ponderal Index: %d, Rohrer's Index: %d"%(name2,name,health[0],health[1],health[2]))

def bmi (mass, height):
    result = mass / (height ** 2)
    return result

def ponderal (mass, height):
    result = mass / height ** 3
    return result

def rohrer(mass, height):
    result = (mass * 10000) / ((height * 100) ** 3)
    return result

def health (mass, height):
    #calling the functions
    bmi = bmi(mass, height)  #store the returned value to a variable
    ponderal = ponderal(mass, height)
    rohrer = rohrer(mass, height)
    return [bmi,ponderal,rohrer] #return it as a list.

Result:

>>> ================================ RESTART ================================
>>> 
What is your first name?: Akhyar
What is your last name?: Kamili
What is your weight in kilograms?: 50
What is your height in meters?: 1.7
Kamili, Akhyar (BMI: 17.301038062283737 , Ponderal Index: 10.177081213108082 , Rohrer's Index: 0.1017708121310808 , )
>>> 

Some advice:

  1. Do NOT capitalize function names!
  2. Don't name variables like the functions!

Your code will do better.

There are a lot of problems with your code; first off format it better make sure you have comments on your code (lines that start with #)

Also don't directly convert units from string to float. What if they enter something invalid handle exceptions.

Thirdly the way you format you output text is god awful it is extremely hard to read all the commas and paratheses.

Also the way you get the values you never set them to a variable you also use this health function which you do not need just call the values directly!

Also use sensical names for variables instead of name2 use first name etc

Your code should better look like this (note if this is for homework and you turn this in your professor will easily find it on stackoverflow; so don't)

# calculates the BMI of a person
def BMI (mass, height):
    BMI = mass / (height ** 2)
    return BMI

# calculates the Ponderal index of a person
def Ponderal (mass, height):
    Ponderal = mass / height ** 3
    return Ponderal
# calculates the Rohrer index of a person
def Rohrer (mass, height):
    Rohrer = (mass * 10000) / ((height * 100) ** 3)
    return Rohrer

# this isn't needed
def Health (BMI, Ponderal, Rohrer):
    BMI (mass, height)
    Ponderal (mass, height)
    Rohrer (mass, height)
    return Health


def main():
    # get the names of people
    first_name = input("What is your first name?: ")
    last_name  = input("What is your last name?: ")

    # get their height and weight
    kg     = input("What is your weight in kilograms?: ")
    meters = input("What is your height in meters?: ")

    # convert mass and height to numbers
    try:
        mass = float(kg)
    except ValueError:
        print "Please enter a valid mass."
        return

    try:
        height = float(meters)
    except ValueError:
        print "Please enter a valid height."
        return

    # call the BMI, Ponderal and Rohrer functions
    # don't make the variable BMI as your function is also that name!
    bmi_value = BMI(mass, height)
    ponderal_value = Ponderal(mass, height)
    rohrer_value = Rohrer(mass, height)

    print( "%s, %s (BMI: %s, Ponderal Index: %s, Rohrer Index: %s)" % (last_name, first_name, bmi_value, ponderal_value, rohrer_value) )

    # this print string is EXTREEMLY hard to read
    # print(name2+",",name,"(BMI:",BMI,",", "Ponderal Index:",Ponderal,",","Rohrer's Index:",Rohrer,",",")")

# if we are running this script directly call main
if __name__ == "__main__":
    main()

You're not calling the functions, you're only referencing them. For example:

Ponderal
# <function Ponderal at blah>

Compared to:

Ponderal()
# A number

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM