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)
Я хочу, чтобы они были верны для любых чисел от 18,5 до 24,9 и от 25 до 29,9, но я не могу понять формулировку для этого.
Если 18,5 больше, чем BMI_num, а BMI_num больше или равно 24,9, это никогда не будет правдой.
Вам нужно заменить >
на <
. Такие сравнения, как 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
является целым числом
Знаки сравнения в условных предложениях 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])
простой, двухстрочный способ и просто для удовольствия (потому что читабельность низкая)
Подумайте об условиях, для каких значений они могли бы быть истинными?