Есть ли способ лучше написать код, чтобы найти число между двумя числами? Он не читает 2-й или 3-й оператор elif

BMI_num = 21

if BMI_num <= 18.5:
    BMI_title = 'Underweight'
    print ('Results . . . ')
    print ('Your BMI is: ', BMI_num , '--' , BMI_title) 


elif 18.5 > BMI_num  >= 24.9:
    BMI_title = 'Normal'
    print ('Results . . . ')
    print ('Your BMI is: ', BMI_num , '--' , BMI_title) 


elif 25 >= BMI_num >= 29.9:
    BMI_title = 'Overweight'
    print ('Results . . . ')
    print ('Your BMI is: ', BMI_num , '--' , BMI_title) 


elif BMI_num < 30:
    BMI_title = 'Obese'
    print ('Results . . . ')
    print ('Your BMI is: ', BMI_num , '--' , BMI_title)

Подумайте об условиях, для каких значений они могли бы быть истинными?

jonrsharpe 23.04.2022 01:16

Я хочу, чтобы они были верны для любых чисел от 18,5 до 24,9 и от 25 до 29,9, но я не могу понять формулировку для этого.

USA_PHANTOM 23.04.2022 01:19

Если 18,5 больше, чем BMI_num, а BMI_num больше или равно 24,9, это никогда не будет правдой.

hostingutilities.com 23.04.2022 01:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
59
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вам нужно заменить > на <. Такие сравнения, как 18.5 > BMI_num >= 24.9, всегда будут ложными, поскольку никакое число не может одновременно быть меньше 18,5 и больше 24,9.

Вы также можете принять во внимание, что когда BMI_num равно 24,95 или 29,95, код запускаться не будет.

Также вы можете уменьшить дублирование кода, напечатав after.

if BMI_num <= 18.5:
    BMI_title = 'Underweight'
elif 18.5 < BMI_num  < 25:
    BMI_title = 'Normal'
elif 25 <= BMI_num <= 29.9:
    BMI_title = 'Overweight'
elif BMI_num < 30:
    BMI_title = 'Obese'

print ('Results . . . ')
print (f'Your BMI is: {BMI_num} -- {BMI_title}')

Ваш метод на самом деле состоит в том, чтобы увидеть, находится ли число между двумя числами совершенно нормально. Просто у вас неправильный диапазон. Для второго оператора if 18,5 > BMI_num >= 24,9 никогда не бывает возможным. 24,9 не меньше 18,5. я полагаю, вы имели в виду

    elif 18.5 < BMI_num <= 24.9:
        # some code that runs because this elif is true.

Для третьего элифа 29,9 не может быть меньше или равно 25. Его тоже следует изменить.

    elif 25 <= BMI_num <= 29.9:
        # some code that runs because this elif is true

Четвертое и первое операторы if в порядке.

Возможно, вы захотите изменить свой четвертый оператор if на

    elif BMI_num >= 29.9
        # some code that runs because this elif is true

потому что единственный способ, которым это будет работать с предыдущими утверждениями, - это если BMI_num> 29,9 и меньше 30. Он также включает от 29,9 до 30, в отличие от выполнения

    elif BMI_num >= 30
        # some code that runs because this elif is true

Это также может быть

    else:
        """
        some code that runs because all the previous ones were 
        false
        """

Другой метод

    if {variable_name} in range(x, y)

, но не используйте фигурные скобки, а просто переменную, которой в этом коде является BMI_num, а x, y — это два числа. Диапазон — это все числа от x до y, кроме y. Добавьте/вычтите единицу из любой переменной, чтобы получить правильный диапазон

if BMI_num in range(start, stop) работает, только если BMI_num является целым числом
Jacob 23.04.2022 01:41

Знаки сравнения в условных предложениях elif неверны, так как они имеют неправильное направление, а также не охватывают граничные случаи. Я бы также предложил использовать функцию, а также удалить избыточные операторы печати следующим образом:

def log_bmi(BMI_num):
    if BMI_num <= 18.5:
        BMI_title = 'Underweight'
    elif 18.5 < BMI_num <= 25:
        BMI_title = 'Normal'
    elif 25 < BMI_num <= 30:
        BMI_title = 'Overweight'
    else:
        BMI_title = 'Obese'
    print ('Results . . . ')
    print ('Your BMI is: ', BMI_num , '--' , BMI_title)
def log_bmi(BMI_num):
    if BMI_num <= 18.5:
        BMI_title = 'Underweight'
    elif BMI_num <= 25:
        BMI_title = 'Normal'
    elif BMI_num <= 30:
        BMI_title = 'Overweight'
    else:
        BMI_title = 'Obese'
    print ('Results . . . ')
    print ('Your BMI is: ', BMI_num , '--' , BMI_title)
labels = {0.1: "Underweight",  18.5: "Normal", 24.9: "Overweight", 29.9: "Obese"}
ibm = 21
print([labels[label] for label in labels if ibm/label >= 1][-1])

простой, двухстрочный способ и просто для удовольствия (потому что читабельность низкая)

Другие вопросы по теме