7-31 jmu-python-异常-学生成绩处理专业版 (25 分)

7-31 jmu-python-异常-学生成绩处理专业版 (25 分)

小明在帮助老师统计成绩,老师给他的是一组数据。数据的第1行代表学生数n,后面
的n行代表每个学生的成绩。成绩是整数类型。小明编写了一个程序,该程序可以批量
处理数据,统计所有学生的平均分。当数据没有任何错误时,提示’All OK’,当数据有
一些错误(某行是浮点数、某行是非整数字符)时,可以提示哪些数据出错,并最后提示
第几行出错,出错的原因,共出错多少行。对于另一些小错误,如某行虽然是整数,但
是左右有多余的空格,可以将空格去除掉进行正常统计。

在最后输出:

共处理多少行数据,几行正确,几行错误,平均成绩(保留两位小数)。

进阶要求:

有可能碰到要求输入n行,后面的数据却小于n行。要求处理这种情况。碰到这种情况。
输出end of files,并统计现有行数。见样例3

输入格式:

第1行为n
接下来输入<=n行数据进行测试

输出格式:

见样例输出。输出错误原因的时候,需要将整行输出(如果该行有左右空格,需要将左右空格也输出)

输入样例1:

3
1
    2    
3
结尾无空行

输出样例1:

Total: 3
OK: 3
Error: 0
avg grade = 2.00
结尾无空行

输入样例2:

5
1
  2
   a  
  b  5
3
结尾无空行

输出样例2:

line 3 error for input "   a  "
line 4 error for input "  b  5"
Total: 5
OK: 3
Error: 2
avg grade = 2.00
结尾无空行

输入样例3:

5
 a
 2    
3
结尾无空行

输出样例3:

line 1 error for input " a"
end of files
Total: 3
OK: 2
Error: 1
avg grade = 2.50
结尾无空行

提示:对于样例3,如果是在IDLE中进行测试,可在输入最后一行并回车后,按’Ctrl+D’结束输入。

我的回答:

Total_numb = int(input())
OK_numb = 0
Error_numb = 0
count = 0
list =[]
row = 1
# 不定行输入
lines = []
while True:
    try:
        lines.append(input())
    except:
        break
# 处理输入
for line in lines:
    try:
        keep_data = line
        data = str.strip(keep_data)
        data = eval(data)
    except:
        print(f'line {row} error for input "{keep_data}"')
        Error_numb += 1
    else:
        if type(data) == float:
            print(f'line {row} error for input "{keep_data}"')
            Error_numb += 1
        else:
            list.append(data)
            OK_numb += 1
    finally:
        count += 1
        row += 1
# 求均值
avg = 0
for numb in list:
    avg += numb
avg = avg/len(list)
# 输出
if count < Total_numb:
    print("end of files")
print(f"Total: {count}")
print(f"OK: {OK_numb}")
print(f"Error: {Error_numb}")
print("avg grade = %.2f"%avg)

你可能感兴趣的:(Python,python)