I am doing a simple calculation for burning calories. I am getting data and variables from users and I have two formulas.
The BMR function works. The tee keeps throwing errors (mostly on cannot call a float) and when it does not I get something like <function a0…>
.
def bmr(gender, age, height, weight):
if gender == "f":
bmr = 655 + weight*9.6 + height*1.6 + age*4.7
else:
bmr = 66 + weight*13.8 + height*5 + age*6.8
return bmr
def tee (bmr, amount_of_exersice):
#x = 0
y = bmr(gender, age, height, weight)
if amount_of_exersice == 0:
x = 1.2
elif 1<= amount_of_exersice <= 2:
x = 1.375
elif 3 <= amount_of_exersice <= 5:
x = 1.55
else:
x = 1.725
z = x * y
return z
A couple of problems, you're redefining "bmr" and you're not passing the right arguments to second bmr call. Try, as example:
def tee (gender, age, height, weight, amount_of_exersice):
y = bmr(gender, age, height, weight)
if amount_of_exersice == 0:
x = 1.2
elif 1<= amount_of_exersice <= 2:
x = 1.375
elif 3 <= amount_of_exersice <= 5:
x = 1.55
else:
x = 1.725
z = x * y
return z
or if you want to define bmr before:
def tee (y, amount_of_exersice):
if amount_of_exersice == 0:
x = 1.2
elif 1<= amount_of_exersice <= 2:
x = 1.375
elif 3 <= amount_of_exersice <= 5:
x = 1.55
else:
x = 1.725
z = x * y
return z
y_bmr = bmr(gender, age, height, weight)
tee(y_bmr, amount_of_exersice)
When you do
def tee(bmr, amount_of_exersize):
You're redefining the name bmr
to point to whatever variable you're passing in - whereas, if you hadn't done that, it would have referred to the function above. This replacement applies so long as you're within the method, and the only real solution is to rename the parameter so that it doesn't conflict:
def tee(something_else, amount_of_exersize):
y = bmr(gender, age, height, weight)
def validate_user_input(prompt, type_=None, min_=None, max_=None, range_=None):
if min_ is not None and max_ is not None and max_ < min_:
raise ValueError("min_ must be less than or equal to max_.")
while True:
ui = input(prompt)
if type_ is not None:
try:
ui = type_(ui)
except ValueError:
print("Input type must be {0}.".format(type_.__name__))
continue
if max_ is not None and ui > max_:
print("Input must be less than or equal to {0}.".format(max_))
elif min_ is not None and ui < min_:
print("Input must be greater than or equal to {0}.".format(min_))
elif range_ is not None and ui not in range_:
if isinstance(range_, range):
template = "Input must be between {0.start} and {0.stop}."
print(template.format(range_))
else:
template = "Input must be {0}."
if len(range_) == 1:
print(template.format(*range_))
else:
print(template.format(" or ".join((", ".join(map(str,
range_[:-1])),
str(range_[-1])))))
else:
return ui
def bmr(gender, age, height, weight):
if gender == "f":
bmr = 655 + weight*9.6 + height*1.6 + age*4.7
else:
bmr = 66 + weight*13.8 + height*5 + age*6.8
return bmr
def tee (gender, age, height, weight, amount_of_exersice):
y = bmr(gender, age, height, weight)
if amount_of_exersice == 0:
x = 1.2
elif 1<= amount_of_exersice <= 2:
x = 1.375
elif 3 <= amount_of_exersice <= 5:
x = 1.55
else:
x = 1.725
z = x * y
return z
## user info ##
gender = validate_user_input("Please enter your gender (F -Female / M- Male): ", str.lower, range_=("f","m"))
age = validate_user_input("Please enter your age: ", int, 1, 110)
height = validate_user_input("Please enter your height in cm: ", int, 130, 230)
weight = validate_user_input("Please enter your weight in kg: ", float, 20, 400)
amount_of_exersice = validate_user_input("Please enter the amount of days you engage in physical activity per week: ", int, 0, 7)
calc_bmr = bmr(gender, age, height, weight)
calc_tee = tee(gender, age, height, weight, amount_of_exersice)
print("Your Basal Metabolic Rate is ", calc_bmr)
print("Your daily calories burn is ", calc_tee)
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.