【问题标题】:Return the right string according to the condition根据条件返回正确的字符串
【发布时间】:2021-01-22 17:45:16
【问题描述】:

我尝试解决以下问题

编写计算体重指数的函数bmi (bmi = weight / height ^ 2)。

根据计算出的bmi 值返回值:

if bmi <= 18.5 return "Underweight"

if bmi <= 25.0 return "Normal"

if bmi <= 30.0 return "Overweight"

if bmi > 30 return "Obese"

我的代码:

def bmi(weight, height):
    b = weight / height ** 2
    return ['Underweight', 'Normal', 'Overweight' , 'Obese'][(b <= 18.5) + (b <= 25) + (b <=30)]

我得到一个错误的答案有人知道错误在哪里吗?

【问题讨论】:

  • 你对['Underweight', 'Normal', 'Overweight' , 'Obese'][(b &lt;= 18.5) + (b &lt;= 25) + (b &lt;=30)]的理解是什么,它有什么作用?
  • 这不是指错路了吗?
  • True 等于整数1。如果您希望您的索引有意义,您需要以相反的顺序制作列表,或者翻转您的检查条件(即从 b &lt;= 18.5b &gt; 18.5
  • 不应该是>=?

标签: python return


【解决方案1】:

想想下面语句的实际输出:

(b <= 18.5) + (b <= 25) + (b <=30)

如果b 是 18,那么所有 3 都为真,因此输出将是 3 - “肥胖”。如果b 是24,那么第二个和第三个条件为真,所以输出将是2 - “超重”。如果b 是29,那么只有第三个条件为真,所以输出将是1 - “正常”。如果 b 是 31,那么它们都不为真,因此输出将是 0 - "Underweight"。

一个解决方案是反转你的数组:

['Obese', 'Overweight', 'Normal', 'Underweight'][(b <= 18.5) + (b <= 25) + (b <=30)]

或者,您可以颠倒您的条件,以便原始顺序有效:

['Underweight', 'Normal', 'Overweight' , 'Obese'][(18.5 <= b) + (25 <= b) + (30 <= b)]

在这种情况下,如果b是18,那么(18.5 &lt;= b)False(25 &lt;= b)False,而(30 &lt;= b)False,所以输出是0,“体重不足”。如果b 是24,那么(18.5 &lt;= b)True(25 &lt;= b)False,而(30 &lt;= b)False,所以输出是1,“正常”。如果b 是29,那么(18.5 &lt;= b)True(25 &lt;= b)True,而(30 &lt;= b)False,所以输出是2,“超重”。最后,如果b是31,那么(18.5 &lt;= b)True(25 &lt;= b)True,而(30 &lt;= b)True,所以输出是3,“肥胖”。

【讨论】:

  • 是的,这是正确的谢谢,我在哪里可以阅读更多关于这个的信息?
  • 详细了解究竟是什么?这只是涉及比较运算符的基本 Python 语法。您可以阅读一本基本的 Python 书籍来熟悉该语言的简单、常用部分,但我没有特别推荐给您。我的解决方案只是考虑逻辑并在我的脑海中执行它,并通过简单的推理来查看结果。如果你不明白自己的代码是做什么的,那么你绝对应该阅读一本 Python 基础书籍。
  • 是的,没错,我只是不太清楚 True + True = 2 这对我来说听起来有点奇怪,因为我刚刚开始学习 Python 的基础知识。
  • @MarwanAkram 下面解释了为什么会发生这种情况:stackoverflow.com/questions/38276843/… 但是您已经在代码中添加了布尔值,所以不清楚为什么您不知道添加它们时会发生什么.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多