Я не знаю, что поставить в качестве параметра, чтобы присвоить значение переменной - PullRequest
0 голосов
/ 22 марта 2020

Сейчас я установил их как глобальные, но я не знаю, как настроить аргумент и параметры, чтобы сохранить переменную bmr, чтобы использовать ее в другой функции, такой как get_calorie_requirement. Я знаю, что у меня много входов, чтобы получить БМР. Должен ли я определить формулу get_bmr? Я застрял на чем-то простом, потому что я пытаюсь сделать bmr = get_bmr (bmr), но это неправильно.

import math
def get_bmr():    
    gender = input("What is your gender: M or F?")
    age = int(input("What is your age?"))
    height = int(input("What is your height in inches?"))
    weight = (int(input("What is your weight in pounds?")))
    bmr_wght_constant = 4.536
    bmr_hght_constant = 15.88
    bmr_age_constant = 5
    if gender == 'M':
        bmr = int((bmr_wght_constant * weight) + (bmr_hght_constant * height) - (bmr_age_constant * age) + 5)
    elif gender == 'F':
        bmr = int((bmr_wght_constant * weight) + (bmr_hght_constant * height) - (bmr_age_constant * age) - 161)
    else:
        print("Please try again.")
    return bmr

def get_daily_calorie_requirement():
    dcr_1 = 1.2
    dcr_2 = 1.375
    dcr_3 = 1.55
    dcr_4 = 1.725
    dcr_5 = 1.9
    act_lvl = int(input("What is your activity level?"))
    if act_lvl == 1:
        daily_calorie_requirement = int(bmr * dcr_1)
    elif act_lvl == 2:
        daily_calorie_requirement = int(bmr * dcr_2)
    elif act_lvl == 3:
        daily_calorie_requirement = int(bmr * dcr_3)
    elif act_lvl == 4:
        daily_calorie_requirement = int(bmr * dcr_4)
    elif act_lvl == 5:
        daily_calorie_requirement = int(bmr * dcr_5)
    else:
        print("Please choose a number 1-5.")
    return daily_calorie_requirement
def main():
    print("Hello, welcome to my intergration project!")
    print("The purpose of this program is to help the user reach their goal and provide helpful suggestions.")
    print("It will do this by taking your age, gender, height and your level of physical activity in order to calculate your Basal Metabolic Rate(BMR)")
    print("Your BMR is how many calories you burn in a single day. Combining your BMR with your goals we can suggest a meal plan and excercises that will help reach your goals")
    print("Let's get started! I will start by asking you a few questions in order to make a profile and give you the best informed advice.")      
    if gender == 'M':
        bmr = int((bmr_wght_constant * weight) + (bmr_hght_constant * height) - (bmr_age_constant * age) + 5)
    elif gender == 'F':
        bmr = int((bmr_wght_constant * weight) + (bmr_hght_constant * height) - (bmr_age_constant * age) - 161)
    else:
        print("Please try again.")
    print("Your BMR is: ", bmr)

    print("Great! Now that we have calculated your Basal Metabolic Rate, let's calculate your daily calorie requirement!")
    print("This is the calories you should be taking in to maintain your current weight")
    print("How active are you on a scale of 1-5?")
    print("1 being  you are sedentary (little to no exercise)")
    print("2 being lightly active (light exercise or sports 1-3 days a week)")
    print("3 being moderately active (moderate exercise 3-5 days a week)")
    print("4 being very active (hard exercise 6-7 days a week)")
    print("5 being super active (very hard exercise and a physical job)")
    print("Exercise would be 15 to 30 minutes of having an elevated heart rate.")
    print("Hard exercise would be 2 plus hours of elevated heart rate.")
    daily_calorie_requirement = get_daily_calorie_requirement()

1 Ответ

0 голосов
/ 23 марта 2020

Было бы более полезно показать нам ошибку, с которой вы столкнулись, трудно сказать, в чем может быть проблема, поскольку код также не работает. Если у вас есть трассировка, это было бы полезно при решении этого вопроса.

Назначение просто происходит, когда в левой части = есть переменная. При вызове метода, такого как get_bmr(), будет назначено то, что когда-либо return 'редактировалось этой функцией.

Ваш код может давать сбой, так как вы пытаетесь получить gender, но это не так определено в функции main. Вы можете заменить if gender "M" elif "F" просто следующим. (Поскольку вы вызываете все это в get_bmr)

bmr = get_bmr()

Если вы хотите передать bmr в следующую функцию, создание аргумента для get_daily_calorie_requirement решит проблему?

def get_daily_calorie_requirement(bmr):
    dcr_5 = 1.9
    return int(bmr * dcr_5)


def main():
    bmr = get_bmr()

    daily_calorie_requirement = get_daily_calorie_requirement(bmr)


if __name__ == '__main__':
    main()

Если вы хотите упростить его, вы можете переместить некоторые параметры в аргументы:

def get_bmr(gender, age, height, weight):
    """ Calculate BMR using the following formula:

    bmr = weight_const*weight ... etc.
    """
    gender_coef = 5 if gender == "M" else -161

    return int((4.536 * weight) + (15.88 * height) - (5 * age) + 5)


gender = input("What is your gender: M or F?")
while gender not in ["M", "F"]:
    print("Please try again, accepted values: M/F")
    gender = input("What is your gender: M or F?")

age = int(input("What is your age?"))
height = int(input("What is your height in inches?"))
weight = int(input("What is your weight in pounds?"))

bmr = get_bmr(gender, age, height, weight)

Несколько вещей, которые могут быть сложными, именовать переменные так же, как ваши функции, или просто забыть return в функции.

...