为什么我的循环只返回一个答案而不是整个列表的答案?

时间:2020-08-16 17:44:14

标签: python loops

我正在为lambda学校做一个课前作业,而Loops让我头疼得很厉害。我有一个带有高度和重量的二维名称列表。高度以厘米为单位,因此我使用了一个循环将其转换为m。然后,为了计算BMI,我尝试运行l; oop,但它始终只给我最后一个。让我输入代码,这样更有意义。

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的变化有点复制和粘贴以及反复试验。有人可以指出我做错了什么吗?而且,如果您知道我可以用来帮助实现这一目标的任何资源,我也将不胜感激。

3 个答案:

答案 0 :(得分:1)

欢迎使用StackOverflow。 您的print()已退出循环,只需将代码更改为此并将print()放入循环中即可:

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

答案 1 :(得分:0)

如果只想打印值,则在循环内使用打印将有所帮助:


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]

答案 2 :(得分:0)

BMI2在每次循环迭代中都会被覆盖。由于您的print在循环之外,因此输出将是最后计算的BMI2(来自上次迭代的结果)。

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

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