3.8 序列控制迭代和格式化字符串

本节和下一节将求解两个班级平均成绩的问题。以下是需求声明:

一个班有十个学生参加了一个测验。它们的成绩(0~100的整数)分别是98、76、71、87、83、90、57、79、82、94,要求计算班级的平均成绩。

下面用于解决该问题的脚本会使用循环求出成绩的总和,然后计算出平均值并显示结果。该脚本将10个成绩放在一个列表中,当然也可以让用户在键盘上输入这些成绩(下一个示例会使用这种方式)或从文件中读取它们(第9章会介绍如何操作)。除此之外,我们还将在第16章介绍如何从SQL和NoSQL数据库中读取数据。

第5~6行创建变量totalgrade_counter,并将两个变量都初始化为0。第7行

创建变量grades并使用包含10个整数成绩的列表对其进行初始化。

for语句依次处理列表grades中的每个grade。第11行将当前的grade值加到total中,然后,第12行将变量grade_counter加1,记录到目前为止已经处理的成绩数量。当处理完列表中的所有10个成绩时,迭代终止。Style Guide for Python Code建议在每个控制语句的上方和下方放置一个空行,如第8行和第13行所示。当for语句执行结束后,第15行计算成绩的平均值,第16行显示计算结果。在本章后面的部分中,我们将介绍如何使用函数式编程来更加简洁地计算列表项的平均值。

格式化字符串简介

第16行中使用了如下所示的f字符串(formatted string,即格式化字符串)将average的值插入字符串中,以此来格式化脚本的输出结果:

字符串开头的引号前的字母f表示它是一个f字符串。可以使用由花括号({})分隔的占位符指定插入值的位置。占位符先将变量average的值转换为以字符串形式表示的替换文本,然后用该替换文本替换{average}。替换文本表达式可以包含值、变量或其他表达式,例如计算或函数调用。在第16行中,可以使用total/grade_counter代替average,从而能够省略第15行。