使用您现有的代码,您可以创建一个函数来返回 BMI 状态:
def get_bmi_status(bmi):
if bmi < 18.5:
return "underweight"
elif bmi >= 18.5 and bmi < 24.5:
return "normal"
elif bmi >= 24.5 and bmi < 29.9:
return "overweight"
elif bmi >= 30.0:
return "Obesity"
然后您可以逐行读取文件,转换为float,然后将计数收集到collections.defaultdict:
from collections import defaultdict
with open("data.txt") as f:
counts = defaultdict(int)
for bmi in f:
status = get_bmi_status(float(bmi.strip()))
counts[status] += 1
print(counts)
这会给你这些计数:
defaultdict(<class 'int'>, {'normal': 3, 'underweight': 2, 'overweight': 3, 'Obesity': 1})
我们也可以通过collections.Counter 获得计数:
from collections import Counter
with open("data.txt") as f:
counts = Counter(get_bmi_status(float(bmi.strip())) for bmi in f)
print(counts)
哪个会代替:
Counter({'normal': 3, 'overweight': 3, 'underweight': 2, 'Obesity': 1})
defaultdict 和Counter 都是dict 的子类,因此您可以像使用普通字典一样使用它们。