作者:奋斗中DU_536 | 来源:互联网 | 2023-10-09 18:53
题目描述从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0本题有多组输入数据,输入到文件末尾,请使用while(cin
题目
描述
从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
本题有多组输入数据,输入到文件末尾,请使用while(cin>>)读入
数据范围小于1e6
输入描述:
输入任意个整数,每行输入一个。
输出描述:
输出负数个数以及所有非负数的平均值
示例
问题解决
1. 最开始的解决办法(这个方法没有通过测试用例)
思路:循环获取输入,当获取到空串时停止获取输入。
summary = 0
count = 0
neg = 0
a = input()
while a: # 当获取到空串时停止获取输入
a = int(a)
count += 1
if a < 0:
neg += 1
else:
summary += a
a = input()
print(neg)
print("%.1f" % (summary / (count-neg)))
提交的时候,在a = input()
报出了EOFError: EOF when reading a line
。此时我才意识到输入是来自一个文件,测试用例的最后并不会提供一个空行来停止输入的获取。
2. 最终的解决方法
思路:既然输入文件的末尾不会提供空行,且上述方法会抛出异常。那么就捕获这个异常,在处理异常的代码块中计算结果。
代码如下:
summary = 0
count = 0
neg = 0
try:
a = input()
while a:
a = int(a)
count += 1
if a < 0:
neg += 1
else:
summary += a
a = input()
except:
print(neg)
print("%.1f" % (summary / (count-neg)))