You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用for循环读取TXT文件计算BMI时仅生效最后一行数据的问题

解决读取多行BMI数据仅输出最后一行结果的问题

我之前踩过一模一样的坑!这种情况大概率是两个原因之一:要么你把写入文件的代码放在了循环外面,循环结束后只写入了最后一次计算的结果;要么是每次循环都重新以覆盖模式打开输出文件,把之前的内容都冲掉了。

先给你看最常见的错误写法(是不是和你的代码有点像?):

# 错误示例:写入操作在循环外部
height = 0.0
weight = 0.0
bmi = 0.0
category = ""

with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:
    for line in infile:
        # 拆分每行的身高和体重
        h, w = line.strip().split(',')
        height = float(h)
        weight = float(w)
        # 计算BMI和分类
        bmi = weight / (height ** 2)
        if bmi < 18.5:
            category = 'underweight'
        elif 18.5 <= bmi < 24:
            category = 'healthy'
        elif 24 <= bmi < 28:
            category = 'overweight'
        else:
            category = 'unhealthy'
    # 这里!循环结束才写,当然只有最后一行的数据
    outfile.write(f"{height}, {weight}, {bmi:.1f}, {category}\n")

正确的写法:把写入放到循环内部

只要把写入文件的代码挪到循环里面,每次处理完一行数据就立刻写入,就能保留所有行的结果了。另外我还加了一些容错处理,比如跳过空行、捕获无效数据的错误:

with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:
    # 可选:写入表头,让结果更清晰
    outfile.write("height, weight, BMI, category\n")
    
    for line in infile:
        # 先处理空行,避免报错
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        
        # 用try-except处理格式错误的行
        try:
            # 拆分时记得去掉每个值前后的空格
            h_str, w_str = cleaned_line.split(',')
            height = float(h_str.strip())
            weight = float(w_str.strip())
        except ValueError:
            print(f"跳过无效数据行:{cleaned_line}")
            continue
        
        # 计算BMI
        bmi = weight / (height ** 2)
        # 判断BMI分类
        if bmi < 18.5:
            category = 'underweight'
        elif 18.5 <= bmi < 24:
            category = 'healthy'
        elif 24 <= bmi < 28:
            category = 'overweight'
        else:
            category = 'unhealthy'
        
        # 关键:每次循环都写入一行结果
        outfile.write(f"{height}, {weight}, {bmi:.1f}, {category}\n")

另一种可能的错误:循环内重复打开文件

如果你是在循环里面用open('output.txt', 'w')打开文件,那每次打开都会清空文件内容,最后也只会留下最后一行的结果。这种情况的解决办法是把文件打开的代码移到循环外面,或者用追加模式'a'——不过追加模式如果多次运行程序,会把结果重复写入,所以更推荐前者。

运行上面的正确代码后,你的输出文件应该就能包含每一行输入数据对应的BMI结果啦!

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:41:59