【问题标题】:Why does my loop only return one answer instead of answers for the entire list? [closed]为什么我的循环只返回一个答案而不是整个列表的答案? [关闭]
【发布时间】:2020-08-16 17:44:14
【问题描述】:

我正在尝试为 lambda School 做课前作业,而 Loops 让我非常头疼。我有一个包含身高和体重的二维名称列表。高度以厘米为单位,所以我使用循环将其转换为米。然后为了计算 BMI,我尝试运行一个循环,但它一直只给我最后一个。让我输入代码,这样更有意义。

person_data2

[['John', 84.5, 184],
 ['Ryan', 81.8, 177],
 ['Bobby', 86.1, 190],
 ['Pete', 92.2, 188],
 ['Esther', 69.6, 159],
 ['Jane', 72.0, 166],
 ['Samantha', 51.3, 162]]

使用下面的循环将高度从 cm 更改为 m,它起作用了

for i, person in enumerate(person_data2):
  person_data2[i][2] = person_data2[i][2] / 100

print(person_data2)

[['John', 84.5, 1.84], 
['Ryan', 81.8, 1.77], 
['Bobby', 86.1, 1.9], 
['Pete', 92.2, 1.88], 
['Esther', 69.6, 1.59], 
['Jane', 72.0, 1.66], 
['Samantha', 51.3, 1.62]]

BMI = 体重/(身高^2) 所以我跑了这个

for i, person in enumerate(person_data2):
  BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))

print (BMI2)

19.547325102880652

为什么它只运行最后一个嵌套列表 BMI,即 Samanthas BMI,而不运行其余的? TBH 我不完全理解循环,从 cm 更改为 m 有点复制和粘贴以及反复试验。有人可以指出我做错了什么吗?如果您知道我可以使用任何资源来帮助我解决这个问题,我也将不胜感激。

【问题讨论】:

  • 在循环内打印。你这样做的方式,你只打印最后一个值
  • 你想让 BMI2 成为一个列表吗?
  • 是的,我希望 BMI2 返回一个包含每个人 BMI 的列表

标签: python loops


【解决方案1】:

欢迎来到 StackOverflow。 你的 print() 不在你的循环中,只需将你的代码更改为这个并将你的 print() 放在你的循环中:

for i, person in enumerate(person_data2):
  BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))
  print (BMI2)

【讨论】:

  • 想想这件小事让我差点把头发拔掉。我刚开始学习 Python,但慢慢掌握了窍门。谢谢!!!
  • @ChiamakaEzeamama 祝您学习 python 好运,并始终努力提高您的技能。
【解决方案2】:

如果您只想打印值,在循环内使用 print 会有所帮助:


for i, person in enumerate(person_data2):
  BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))
  print (BMI2)

输出:

24.958648393194707
26.109993935331477
23.850415512465375
26.086464463558173
27.530556544440483
26.1286108288576
19.547325102880652

但是,如果您想在循环结束时返回一个列表,请尝试将值存储在这样的列表中:

BMI2=[]
for i, person in enumerate(person_data2):
  x = ((person_data2[i][1])/(person_data2[i][2]**2))
  BMI2.append(x)

print (BMI2)

输出:

[24.958648393194707,
 26.109993935331477,
 23.850415512465375,
 26.086464463558173,
 27.530556544440483,
 26.1286108288576,
 19.547325102880652]

【讨论】:

  • 你摇滚!非常感谢!
【解决方案3】:

BMI2 在每次循环迭代中被覆盖。由于您的print 在循环之外,因此输出将是最后计算的BMI2(上一次迭代的那个)。

尝试以下操作以打印数据集中每个人的 bmi:

for i, person in enumerate(person_data2):
    BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))
    print (BMI2)

【讨论】:

  • 谢谢,这就是我所要做的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2022-06-16
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多