Есть ли более чистый и эффективный способ сделать эти калькуляторы BMI & Fat% в Python?

1

Я новичок в python (и кодировании вообще и SOF). Недавно я поднял его, просмотрев некоторые онлайн-HTML, треки CSS на Treehouse и наслаждаясь ими до сих пор. Помимо хобби, моя общая цель состоит в том, чтобы иметь возможность писать собственные веб-приложения/программы, связанные с моей областью работы и обучения (здравоохранение).

Итак.. Мой вопрос связан с этим фрагментом кода, который я написал сегодня. Он представляет собой общий калькулятор ИМТ, а также включает в себя оценку оценки жировых отложений (на основе нескольких переменных, которые необходимо предоставить). Это ни в коем случае не 100% точный калькулятор жира% (вам понадобится DXA-сканирование, чтобы получить лучшую идею), хотя он отлично подходит для широкой публики.

Вопросы:

1) Как я могу убедиться, что пользователь может вводить несколько вещей в подсказку высот? Некоторые пользователи могут захотеть добавить 187, а другие - в 1.87. Как мне объяснить это и убедиться, что калькулятор все еще работает?

2) Нужно ли мне писать все эти заявления печати в моих функциях или есть более чистый/лучший способ написать эти функции?

3) Если я хочу, чтобы пользователь мог выбрать имперскую или метрическую систему? Как мне это сделать и нужно ли мне сделать 2 дополнительных функции?

Спасибо заранее и вот код (ps. Не против "странных" печатных сообщений :)):

# BMI calculator & fatpercentage estimator

#VARS

gender = input("What is your gender? Male or female? ")
age = input("How old are you? ")
length = float(input("What is your length in meters? Input should be: 1.80 for example. "))
weight = int(input("How much do you weigh (in KG)? "))
userinput_fatpercentage = int(input("What is your fatpercentage?\nReturn 0 (zero) if you don't know and want to calculate. "))
bmi = round(weight/(length*length), 2)

# BMI CALC

def bmi_calulation():
    if bmi <= 18.5:
        print("Your Body Mass Index is:", bmi, "start eating, skinny.")
    elif bmi > 18.5 and bmi < 25:
        print("Your Body Mass Index (BMI) is: ", bmi, "you are a normal person, thank god.")
    elif bmi > 25 and bmi < 30:
        print("Your Body Mass Index (BMI) is: ", bmi, "mind you... You are overweight. Drop some weight.")
    elif bmi > 30:
        print("Your Body Mass Index (BMI) is: ", bmi, "Hnnngggg..! You are insanely overweight. Stop eating right away!")
    else:
        print("There was an error with your input. Try again.")

# FAT% ESTIMATOR

def fatpercentage_calculation():
    if userinput_fatpercentage == 0 and gender.lower() == 'male':
        print("Your fatpercentage is: ")
        print(round((1.2 * float(bmi) + (0.23 * float(age) - (10.8 * 1) - 5.4)), 2))
    elif userinput_fatpercentage == 0 and gender.lower() == 'female':
        print("Your fatpercentage is: ")
        print(round((1.2 * float(bmi) + (0.23 * float(age) - (10.8 * 0) - 5.4)), 2))
    elif userinput_fatpercentage == userinput_fatpercentage:
        print("Your fatpercentage is: {}.".format(userinput_fatpercentage))
    else:
        print("Something went wrong. Try again. ")

#Output

bmi_calulation()
fatpercentage_calculation()
  • 5
    Подсказка: этот вопрос выглядит так, как будто он должен быть на Code Review .
  • 0
    Если код работает, о чем вы не упомянули, я непременно отправлюсь в Code Review, как было предложено
Показать ещё 3 комментария
Теги:
python-3.x

1 ответ

2

1) Вам не нужно беспокоиться о входах 1.87 против 187, так как вы указали формат в строке в качестве счетчиков. Было бы ошибкой пользователя, если бы они ввели cm в этом случае. Другой дизайн должен был спросить пользователя перед вопросом о высоте, хотят ли они использовать метры или см, пусть они выбирают, а затем внутренне в вашем коде использовать только один (конвертировать, если они выбрали другой).

2) Повторяющиеся части вы можете распечатать перед операциями if, а затем распечатать детали внутри операторов if, основанных на этом случае. Если вы не хотите использовать символы новой строки между двумя частями, вы можете использовать

print('.', end='')

для печати без создания новой строки.

3) Опять же, вы можете просто попросить пользователя об этом. Чтобы избежать написания двух одинаковых кодов для учета двух систем, вы можете внутренне преобразовать выбор пользователя в один из них и вычислить все (тогда вы можете конвертировать обратно для печати).

  • 0
    Большое спасибо! Конечно, помогает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню