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
相关产品推荐
相关产品推荐

