Есть ли способ лучше написать код, чтобы найти число между двумя числами? Он не читает 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
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
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])

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

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