[英]call function from function python
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. BMR功能起作用。 The tee keeps throwing errors (mostly on cannot call a float) and when it does not I get something like
<function a0…>
. 发球台会不断抛出错误(大多数情况下无法调用浮点数),当发球失败时,我会得到类似
<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. 有几个问题,您正在重新定义“ bmr”,并且没有将正确的参数传递给第二个bmr调用。 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: 或者如果您想在之前定义bmr:
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. 您正在重新定义名称
bmr
以指向您要传入的任何变量-但是,如果没有这样做,它将引用上面的函数。 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.