Python程序设计教程(第2版)
上QQ阅读APP看书,第一时间看更新

3.3 控制结构综合实例

3.3.1 学生成绩统计

【例3-17】 输入若干个同学的计算机成绩,成绩分布在[0,120]区间内。求出这些同学的计算机成绩平均值、最小值和最大值。输入出现负数时终止输入,且该负数不计入统计范围。

分析:因为平均值是所有成绩之和再除以人数,所以设置总分变量iSum初始值为0,计数总人数的变量sCnt为0。因为需要求成绩的最大值和最小值,所以设置成绩最大值变量sMax在循环开始前是一个非常小的数,譬如是-100;设置成绩最小值变量sMin在循环开始前是一个非常大的数,譬如是150。

在程序运行时依次输入若干个同学的计算机成绩,存入变量aScore,以输入负数结束输入。每输入一个同学的成绩就进行以下操作。

(1)将该学生的计算机成绩累加到变量iSum中。

(2)对人数计数变量sCnt增加1。

(3)判断该学生的成绩与成绩最大值的关系,如果该生成绩大于成绩最大值,则将成绩最大值修改为该生的成绩值,否则不做任何操作。

(4)判断该学生的成绩与成绩最小值的关系,如果该生成绩小于成绩最小值,则将成绩最小值修改为该生的成绩值,否则不做任何操作。

(5)输入下一个学生的成绩,继续做上述(1)~(4)的操作。直到输入负数结束。

通过上述分析可见,需要利用循环控制结构实现上述(1)~(5)步操作,循环结束的条件是输入的成绩值为负数。而对变量iSum、sCnt、sMax和sMin的赋初值要放到循环体以外。第(3)步和第(4)步需要用分支控制结构实现。而第(5)步的输入下一个学生的成绩,是推动程序进入下一轮循环的关键。

程序代码:

程序的一次运行结果:

思考:如果正确成绩位于[0,100]这个区间,也就是最高分只能是100分,那么如果输入了一个错误的分数103,如何修改程序,使得在输错成绩时出现提示,并可以继续输入其他成绩?