PAT 乙级 1054 求平均值 Python3

该博客介绍了PAT乙级编程题1054的解决方案,主要涉及Python3语言。题目要求处理包含非法输入的实数列表,计算合法实数的平均值,对非法输入进行特殊标记。博主分享了使用Python内置类型转换进行非法输入判断的方法,以及处理英语单复数问题的思路。文章结尾表达了对题目设计的一些不满,如缺少测试数据和特定规则的合理性。

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

 

本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。

输入格式:

输入第一行给出正整数 N(≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。

输出格式:

对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出结果:The average of K numbers is Y,其中 K 是合法输入的个数,Y 是它们的平均值,精确到小数点后 2 位。如果平均值无法计算,则用 Undefined 替换 Y。如果 K 为 1,则输出 The average of 1 number is Y

思路:恶心人的模拟题,本题恶心在如何判断非法和英语单复数上,以及非常规的所谓合理实数.

非法的判决方法,我实际上很偷懒,直接让python自己判断,如果能用float转化的那么肯定是实数,

如果要从字符串角度自己判断非法的话,那么一个实数的组成部分有:符号(+-),整数部分,小数点,小数部分,

换言之你需要先判断是否具有符号,然后是否有小数点,小数点之前是否满足是数字,之后是否只有两位小数.

英语单复数我是最无语的,算法题又不是四六级,想不出刁钻数据就只能这样糊弄学生,number和numbers.行了,知道你英语水平有初中了.真牛啊,还不给测试数据,还有一堆人洗不给数据是为了锻炼思维,行吧,你慢慢锻炼初中英语,我去刷leetcode了.不给数据明显是为了引流啊,让你只能在ta的平台上做题,扩大知名度,最重要的当然是赚钱啊.还有什么考试上厕所要录视频,PAT牛啊你牛.

还有实数,你见过小数点后没有数的实数吗?例子也根本没有.

"23."属于合法实数哦,

n = int(input())
nums = input().split()
sumup = 0
legal = 0

for each in nums:
    try:
        temp = float(each)
        if "." in each:
            if len(each.split(".")[1]) <= 2:
                if -1000.00 <= temp <= 1000.00:
                    legal += 1
                    sumup += temp
                else:
                    print(f"ERROR: {each} is not a legal number")
            else:
                print(f"ERROR: {each} is not a legal number")
        else:
            if -1000.00 <= temp <= 1000.00:
                legal += 1
                sumup += temp
            else:
                print(f"ERROR: {each} is not a legal number")
    except:
        print(f"ERROR: {each} is not a legal number")
if legal > 1:
    print(f"The average of {legal} numbers is {sumup/legal:.2f}")
elif legal == 1:
    print(f"The average of {legal} number is {sumup/legal:.2f}")
else:
    print(f"The average of 0 numbers is Undefined")
"23.".isdecimal()
Out[9]: False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值