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.
-
What version of python are you using? Also you need to indent your code in functions as well.Zimm3r– Zimm3r2013年10月12日 03:21:07 +00:00Commented Oct 12, 2013 at 3:21
-
Also it there is no real reason you need the two prints that sandwich your main function callZimm3r– Zimm3r2013年10月12日 03:24:48 +00:00Commented Oct 12, 2013 at 3:24
-
Im using python 3.3.2Moose– Moose2013年10月12日 03:25:42 +00:00Commented Oct 12, 2013 at 3:25
-
To be honest, your code is a mess..aIKid– aIKid2013年10月12日 03:26:52 +00:00Commented Oct 12, 2013 at 3:26
-
Ive changed the code around a lot and now its in a working form again, earlier it was returning d, b (BMI: <function BMI at 0x0000000002232730> , Ponderal Index: <function Ponderal at 0x0000000003317620> , Rohrer's Index: <function Rohrer at 0x0000000003396730> , ) instead of inputing data into itMoose– Moose2013年10月12日 03:27:07 +00:00Commented Oct 12, 2013 at 3:27
3 Answers 3
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:
- Do NOT capitalize function names!
- Don't name variables like the functions!
Your code will do better.
10 Comments
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()
4 Comments
return Health (where Health evaluates to the enclosing function) - I think not.You're not calling the functions, you're only referencing them. For example:
Ponderal
# <function Ponderal at blah>
Compared to:
Ponderal()
# A number