《Python 3.x入门到应用实践》 —3.8.3 程序代码说明
3.8.3 程序代码说明
这个范例程序使用的scores.csv文件包含10位学生的姓名及数学、英语和语文三科的成绩,我们需要将三科成绩加总、计算平均分,再以平均分来评比等级。
scores.csv文件第一行是标题,必须略过不处理,所以我们使用一个变量x来记录当前读取的行数,x的初始值为0,x必须大于0,if条件判断表达式才会为真,代码如下:
with open("scores.csv",encoding="utf-8") as csvfile:
x = 0 #设置x初始值为0
for row in csv.reader(csvfile):
if x > 0: #当x>0时,if判断表达式为真
…
x += 1 #相当于x=x+1
编写Python程序的时候不同区块记得缩排,上面的语句共有三个区块,即with…as区块、for循环区块、if区块,x=0的声明必须放在for循环外面,x+=1语句放在for循环内,这样每一次循环x才会累加,如图3-19所示。
图3-19
进入if区块之后要将三科成绩加总,由于csv.reader函数读入的都是字符串(string)格式,因此计算前必须先转换成int格式,再将加总结果赋值给变量scoreTotal:
scoreTotal = int(row[1]) + int(row[2]) + int(row[3])
接着计算平均值,题目要求平均值保留到小数点后1位:
average = round(scoreTotal / 3, 1)
使用平均分来评级,4个等级的分数区间如下。
甲:平均80~100分。
乙:平均60~79分。
丙:平均50~59分。
丁:平均50分以下。
平均80~100分就评定为“甲”等,80分也在这一区间,因此必须用“>=”(大于等于)关系运算符,如果只用average > 80来判断,80分就不会落在这一区间。
平均60~79分就评定为“乙”等,这个判断需要两个条件,average > = 60以及average < 80,而且两个条件必须都符合,所以必须用and(与)来判断:
average > = 60 and average < 80
由于这两个条件是一个数值区间,因此可以写成下面的表达式,表示average的值必须在60~79以内。
60 <= average < 80
完整if...else语句如下:
if average >= 80 :
grade = "甲"
elif 60 <= average < 80:
grade = "乙"
elif 50 <= average < 60:
grade = "丙"
else:
grade = "丁"
最后只要将总分(scoreTotal)、平均分(average)以及等级(grade)用print语句输出就完成了,执行结果如图3-20所示。
图3-20
以下是完整的程序代码。
【范例程序:Review_scores.py】 成绩单统计小帮手
01 # -*- coding: utf-8 -*-
02 """
03 程序名称:成绩单统计小帮手
04 题目要求:
05 读入CSV文件
06 列出总和、平均分以及等级(甲、乙、丙、丁)
07 甲:平均80~100分
08 乙:平均60~79分
09 丙:平均50~59分
10 丁:平均50分以下
11 """
12 import csv
13
14 print("{0:<3}{1:<5}{2:<4}{3:<5}{4:<5}".format("", "姓名", "总分", "平均分", "等级"))
15 with open("scores.csv",encoding="utf-8") as csvfile:
16 x = 0
17 for row in csv.reader(csvfile):
18
19 if x > 0:
20 scoreTotal = int(row[1]) + int(row[2]) + int(row[3])
21 average = round(scoreTotal / 3, 1)
22
23 if average >= 80 :
24 grade = "甲"
25 elif 60 <= average < 80:
26 grade = "乙"
27 elif 50 <= average < 60:
28 grade = "丙"
29 else:
30 grade = "丁"
31
32 print("{0:<3}{1:<5}{2:<5}{3:<6}{4:<5}".format(x, row[0], scoreTotal, average, grade))
33
34 x += 1
- 点赞
- 收藏
- 关注作者
评论(0)