【输入解析】Python实现多行输入任意个整数,每行输入一个

本文介绍了在C++编程中如何处理输入,特别是从文件读取数据时遇到的EOF错误。作者分享了两种方法,首先尝试直接读取输入直到文件结束,但在遇到EOFError时才意识到输入来自文件。然后,作者采用异常捕获机制,通过try-except块成功地解决了问题,能够正确统计负数数量并计算非负数平均值,即使在文件末尾也不会引发错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

描述
从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为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)))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值