Будьте очень осторожны с отступом, так как от него сильно зависит код 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")