1. 题目🔍
小明在帮助老师统计成绩,老师给他的是一组数据。数据的第1行代表学生数n,后面的n行代表每个学生的成绩。成绩是整数类型。
小明编写了一个程序,该程序可以批量处理数据,统计所有学生的平均分。当数据没有任何错误时,提示’All OK’,当数据有一些错误(某行是浮点数、某行是非整数字符)时,可以提示哪些数据出错,并最后提示第几行出错,出错的原因,共出错多少行。对于另一些小错误,如某行虽然是整数,但是左右有多余的空格,可以将空格去除掉进行正常统计。
在最后输出:
共处理多少行数据,几行正确,几行错误,平均成绩(保留两位小数)。
进阶要求:
有可能碰到要求输入n行,后面的数据却小于n行。要求处理这种情况。碰到这种情况。
输出end of files,并统计现有行数。见样例3
1.1 输入样例1
3
1
2
3
1.2 输出样例1
Total: 3
OK: 3
Error: 0
avg grade = 2.00
1.3 输入样例2
5
1
2
a
b 5
3
1.4 输出样例2
line 3 error for input " a "
line 4 error for input " b 5"
Total: 5
OK: 3
Error: 2
avg grade = 2.00
1.5 输入样例3
5
a
2
3
1.6 输出样例3
line 1 error for input " a"
end of files
Total: 3
OK: 2
Error: 1
avg grade = 2.50
提示:对于样例3,如果是在IDLE中进行测试,可在输入最后一行并回车后,按Ctrl+D
结束输入。
2. 题解✨
2.1 思路
- 通过第一行的输入数字来作为循环,确定随后输入的行数
- 通过
strip()
来去掉输入部分多余的空格 - 通过
isdecimal()
来判断是否为整数 - 用
字典
将格式错误的行数与对应的内容存入,之后再格式化输出
注:暂未完成进阶要求中的内容
2.2 代码
total_num = int(input())
ok = 0
error = 0
total = 0
dic = {}
for i in range(total_num):
temp = input()
trim = temp.strip()
if trim.isdecimal():
ok += 1
total += int(trim)
else:
dic[i + 1] = temp
error += 1
for k, v in dic.items():
print('line {} error for input "{}"'.format(k, v))
print('Total:', total_num)
print('OK:', ok)
print('Error:', error)
print('avg grade = {:.2f}'.format(total/ok))
相关内容