《Python 3.x入门到应用实践》 —3.8.3 程序代码说明

举报
华章计算机 发表于 2020/02/08 23:40:19 2020/02/08
【摘要】 本节书摘来自华章计算机《Python 3.x入门到应用实践》 一书中第3章,第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所示。

 image.png

图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所示。

 image.png

图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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。