Как рассчитать ИМТ с питоном - PullRequest
0 голосов
/ 27 октября 2019

Я должен сделать скрипт, который вычисляет ИМТ с помощью функции, которая может принимать только 2 аргумента (эти аргументы, конечно, не могут быть str или bool ...)! + Я должен использовать «{} .format ()», но я не знаю, как!

ИМТ = рост / вес ** 2

import sys

#if the script has been given 2 arguments, he continues, if not(=else) he print a message
if len(sys.argv) == 3:

#The first argument should be the height and the second one should be the weight
height=sys.argv[1]
weight=sys.argv[2]

    def bmi (height,weight):

        bmi=(height/weight**2)

        if type(height) is float and type(weight) is int:
        res=print("your bmi is {}".format(bmi))

        else:
        res=print(" height should be a float and weight an int")

    return(res)

else:
    print("you should enter 2 arguments")

У меня нет ответаиз питона ...

1 Ответ

0 голосов
/ 27 октября 2019

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

Функция print () не возвращает результат. Он просто печатает то, что вы спрашиваете.

Кроме того, будьте осторожны с выполнением строки bmi=(height/weight**2), прежде чем проверять правильность роста и веса. Лучше подожди, пока ты их проверишь. В противном случае Python выдаст загадочную ошибку об этих типах.

Функция не выполняется при ее определении. Вы должны добавить вызов к функции bmi (), которую вы определили, например:

import sys

def bmi (height,weight):
    return height/weight**2


#if the script has been given 2 arguments, he continues, if not(=else) he print a message
if len(sys.argv) == 3:

    #The first argument should be the height and the second one should be the weight
    height=float(sys.argv[1])  # argv[1] is a string and should be converted to float
    weight=int(sys.argv[2])    # argv[2] is a string and should be converted to int

    if type(height) is float and type(weight) is int:
        print("your bmi is {}".format(bmi(height,weight)))
            # "bmi()" calls the bmi function
    else:
        print(" height should be a float and weight an int")
else:
    print("you should enter 2 arguments")

Хотя Python позволяет определять функции в любом месте вашего кода, лучше всего разделять такие функции. isinstance() обычно предпочтительнее type() ==, потому что isinstance() также проверяет подклассы.

edit: добавлены преобразования из строки в int / float, как указано Патриком Артнером

PS: проверить Проверка возможности преобразования строки в число с плавающей точкой в ​​Python для получения информации о лучшей проверке, является ли строка допустимым значением с плавающей точкой. Это будет означать следующую адаптацию к коду:

    try:
        height=float(sys.argv[1])  # argv[1] is a string and should be converted to float
        weight=int(sys.argv[2])    # argv[2] is a string and should be converted to int
    except ValueError:
        print(" height should be a float and weight an int")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...