PTA:Python解答1053 住房空置率/1054 求平均值

1053 住房空置率 (20分)

在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:

  • 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”;
  • 若观察期超过某给定阈值 D 天,且满足上一个条件,则该住房为“空置”。

现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。

输入格式:

输入第一行给出正整数 N(≤1000),为居民区住房总套数;正实数 e,即低电量阈值;正整数 D,即观察期阈值。随后 N 行,每行按以下格式给出一套住房的用电量数据:
K E1 E2...Ek
其中 K 为观察的天数,Ei为第 i 天的用电量。

输出格式:

在一行中输出“可能空置”的比率和“空置”比率的百分比值,其间以一个空格分隔,保留小数点后 1 位。

输入样例:

5 0.5 10
6 0.3 0.4 0.5 0.2 0.8 0.6
10 0.0 0.1 0.2 0.3 0.0 0.8 0.6 0.7 0.0 0.5
5 0.4 0.3 0.5 0.1 0.7
11 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
11 2 2 2 1 1 0.1 1 0.1 0.1 0.1 0.1

输出样例:

40.0% 20.0%

(样例解释:第2、3户为“可能空置”,第4户为“空置”,其他户不是空置。)

解题思路:

按题目要求的格式和判断语句来编写代码即可。

完整代码:

a,b,c = [eval(i) for i in input().split()]
m = 0
n = 0
for i in range(a):
    s = [float(_) for _ in input().split()]
    k = 0
    for j in s:
        if j < b:
            k += 1
    if k > s[0]//2:
        if s[0] > c:
            n += 1
        else:
            m += 1
m = m/a*100
n = n/a*100
print('{:.1f}% {:.1f}%'.format(m, n))

 

1054 求平均值 (20分)

本题的基本要求非常简单:给定 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

输入样例1:

7
5 -3.2 aaa 9999 2.3.4 7.123 2.35

输出样例1:

ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38

输入样例2:

2
aaa -9999

输出样例2:

ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined

解题思路:

这道题可以用try...except...语句,在一开始就把不符合条件的内容输出,然后用列表存储符合条件的,最后再判断列表的长度来输出不同的语句。

完整代码:

n = eval(input())
m = input().split()
ls = []
count = 0
for i in m:
    try:
        if -1000 <= eval(i) <= 1000:
            lss = i.split('.')
            if len(lss) == 1:
                l = eval(i)
                ls.append(l)
            else:
                if len(lss[1]) < 3:
                    l = eval(i)
                    ls.append(l)
                else:
                    print('ERROR: {} is not a legal number'.format(i))
        else:
            print('ERROR: {} is not a legal number'.format(i))
    except:
        print('ERROR: {} is not a legal number'.format(i))
if ls == []:
    print('The average of 0 numbers is Undefined')
else:
    a = len(ls)
    if a == 1:
        print('The average of 1 number is {:.2f}'.format(ls[0]))
    else:
        for i in ls:
            count += i
        print('The average of {} numbers is {:.2f}'.format(a,count/a))
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注