Python 3 — Функции — Обработка исключений

#python-3.x #function #exception

Вопрос:

Приведенный ниже фрагмент кода вычисляет индекс массы тела пользователя. Существует функция, которая выполняет расчет после того, как пользователь указал свой вес (кг) и рост (м). Также выводится сообщение со значением ИМТ пользователя.

Код также включает в себя некоторую обработку исключений, чтобы избежать ошибок. Например, если вместо числа указана строка или указано экстремальное значение (например, высота более 2,40 м), то выводится специальное сообщение (например, «Пожалуйста, введите свой рост правильно!»).

 def find_bmi(weight,height):
    my_bmi=weight/height**2
    return my_bmi

try:
    weight=float(input("What is your weight (kg)?"))
    if weight < 200:
        height=float(input("What is your height (m)?"))
        try:
            if height < 2.40:
                print("Your BMI is: " str(round(find_bmi(weight,height),2)) "!!!")        
            else:
                print("Please enter your height correctly!")
        except ValueError:
            print("Enter a number please!")
    else:
        print("Please enter your weight correctly")
except ValueError:
    print("Enter a number please!")
 

Есть ли более питонический способ написать это? Есть ли что-то, что можно было бы написать лучше? Имейте в виду, что я недавно начал изучать Python!

Комментарии:

1. Просто попробуйте разделить логику возврата на другие функции. В этом случае, если назовите свою функцию .нравится…. Find_bmi(100,1, 5), но он будет использовать только пользовательский ввод, поэтому нет смысла запускать эту функцию подобным образом. И если я назову это так…find_bmi() …это выдаст вам ваш расчетный имт ,а затем ошибку для требуемых параметров во время вызова функции.

Ответ №1:

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

def prompt():
    try:
        weight, height = [float(a) for a in input("Enter space separated 
        weight(kg) and height(m), weight heightn").split()]
        return weight, height
    except ValueError:
        raise Exception("Enter a number please!")

def range_error(weight, height):
    raise Exception("height out of range") if height >= 2.40 else null
    raise Exception("weight out of range") if weight >= 200 else null

weight, height = prompt()
range_error(weight,height) if (height >=2.40 or weight >=200) else print("Your BMI is: " str(round(find_bmi(weight,height),2)) "!!!")
 

Комментарии:

1. в чем проблема ? Я думаю, что вы скопировали код отсюда, используя CTRL C. Не делайте этого

2. Это не помогает

3. Не могли бы вы уточнить, в чем причина проблемы?