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