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

Python作业报错:输出nan而非NaN,如何修复?

问题:输出NaN与nan的格式不匹配导致平台校验失败

作业要求

假设numbers.txt文件包含一系列数字,编写程序计算所有负数的平均值和所有正数的平均值并打印至屏幕;若不存在对应数字(无负数和/或正数),则输出NaN。仅输出平均值,先负后正,无需格式化。

现有代码

def calculate_averages(file_name):
    negatives = []
    positives = []
   
    with open(file_name, 'r') as file:
        for line in file:
            try:
                num = float(line.strip())
                if num < 0:
                    negatives.append(num)
                elif num > 0:
                    positives.append(num)
            except ValueError:
                continue  # Skip lines that are not valid numbers

    # Calculate the averages
    neg_avg = sum(negatives) / len(negatives) if negatives else float('NaN')
    pos_avg = sum(positives) / len(positives) if positives else float('NaN')
    
    # Print the averages
    print(neg_avg)
    print(pos_avg)

calculate_averages('numbers.txt')

报错信息

Pearson平台报错:输出第一行应为NaN,但实际为nan。

问题原因

Python中,float('NaN')打印后会输出小写的nan,而平台校验要求的是大写格式的NaN,大小写不一致导致校验不通过。

修复方案

方案一:直接使用字符串"NaN"替代浮点型NaN

修改平均值计算逻辑,当无对应数字时直接赋值为字符串"NaN",这样打印出来就是符合要求的大写格式:

# 修改计算平均值的代码段
neg_avg = sum(negatives) / len(negatives) if negatives else "NaN"
pos_avg = sum(positives) / len(positives) if positives else "NaN"

方案二:打印时判断转换(保留数值类型)

如果需要保留数值类型的NaN,可在打印时通过math.isnan()判断,将小写nan转换为大写字符串输出,注意需要先导入math模块:

import math

# 修改打印部分的代码段
print(neg_avg if not math.isnan(neg_avg) else "NaN")
print(pos_avg if not math.isnan(pos_avg) else "NaN")

修复后完整代码(方案一示例)

def calculate_averages(file_name):
    negatives = []
    positives = []
   
    with open(file_name, 'r') as file:
        for line in file:
            try:
                num = float(line.strip())
                if num < 0:
                    negatives.append(num)
                elif num > 0:
                    positives.append(num)
            except ValueError:
                continue  # Skip lines that are not valid numbers

    # Calculate the averages
    neg_avg = sum(negatives) / len(negatives) if negatives else "NaN"
    pos_avg = sum(positives) / len(positives) if positives else "NaN"
    
    # Print the averages
    print(neg_avg)
    print(pos_avg)

calculate_averages('numbers.txt')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:53:19