python练习题-jmu-python-异常-学生成绩处理中级版

小明在帮老师处理数据,这些数据的第一行是n,代表有n行整数成绩需要统计。
接着连续输入n个成绩,如果中途输入错误(非整数)提示'Error! Reinput',
并输出错误的数据。然后重新输入,直到输入n个正确的成绩才退出。如果整个
输入过程中没有错误数据,提示'All OK'。最后输出所有学生的平均值,保留两
位小 数。

注:该程序可以适当处理小错误,比如对于有些数据如果左右包含空格,先去掉
空格再行处理。

输入格式:

第一行为n,代表接下来要输入的正确行数。
然后输入成绩,输入错误则提示重输,直到输入n行正确的数据为止。

输出格式:

如果输入过程中无异常,需输出All OK

输入样例1:

3
1
  2   
    3   

输出样例1:

All OK
avg grade = 2.00

输入样例2:

3
1
#
b
2
3

输出样例2:

Error for data #! Reinput
Error for data b! Reinput
avg grade = 2.00

这道题我刚开始做的时候感觉特别坑,我一直在纠结错误的时候如何输出,因为我只看了样例一我以为是只有这一个样例。。后面一直提交错误的时候才又读了一遍题目才明白。。这道题总的来说也是用异常处理做,先默认认为他输入的成绩有问题,保存到err_grade中,再转换为int用grade接收,如果不能转换就去异常处理那里,将flag设置为false表示一会儿会输出错误信息,然后把这个错误的输入添加到一个err_list列表中,最后输出错误信息的时候遍历列表即可。代码如下: 

n = int(input())
num = n
sum_grade = 0
flag = True
err_grade = ""
err_list = []
while n:
    try:
        err_grade = input()
        grade = int(err_grade)
        sum_grade += grade
        n = n-1
    except:
        flag = False
        err_list.append(err_grade)
if flag:
    print("All OK")
else:
    for grade in err_list:
        print("Error for data %s! Reinput" % grade)
print("avg grade = %.2f" % (sum_grade/num))

 

你可能感兴趣的:(python)