python3应用程序代码_《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所示。

1581176356690807.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所示。

1581176367794427.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值