Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 Python 开发课程
第 章
>
第 级

字符串与时间模块
字符串模块

目标

使用 string 模块汇编申请数据并发送回复信件。

现在,既然新农场建设的材料已经落实,是时候将注意力转向农场的新人员了。我们有几封针对求职申请需要发送的信件,通常这会需要大量的书写工作,不过我们可以利用 string 模块来弥补这一点,从而创建模板并格式化文本,使处理长篇文本变得更加容易。

这次导入 string 模块的方式与其他模块有所不同,因为我们将导入扩展该模块的类,并将按照下面的方式执行:

import string from string import Template from string import Formatter

这不仅让我们可以访问模块本身,还可以访问包含自身函数的模板和格式化类。就我们的需求而言,我们将使用以下函数和类:

  • string.capwords(): 此函数将字符串中的单词进行适当的首字母大写转换,无论字符串原本如何格式化,它都将使单词的首字母大写,其余字母小写。
  • Template(): 这是一个字符串类,用于创建模板对象。它使用 substitute() 函数,允许你设置字符串并使用 $ 符号标记位置以替换数据。这让你可以随意创建模块化字符串。
  • Formatter(): 这是一个字符串类,用于格式化或组合字符串。它的工作方式类似于 Template() 类,但更为强大,更适合处理较长的字符串序列。它使用 format() 函数,允许你设置字符串并使用 {} 插入字符串数据。

首先,走向光亮的 X 标记,并面向文件柜使用 read() 函数,这将允许你访问以各个申请者名字命名的文件夹。这些文件夹以三个(3个)列表常量的形式存在,分别命名为:folder_afolder_bfolder_c

走向绿地毯上的暗 X 标记并面向桌子,创建三个(3个)列表,分别命名为:names_anames_bnames_c。使用列表推导式和 string.capwords() 函数为名字格式化适当的首字母大写。将使用相同字母命名的常量与列表进行配对,例如,对于 names_a,使用 string.capwords() 处理 folder_a,如下所示:

names_a = [string.capwords(x) for x in folder_a]

使用相同的公式填充 names_bnames_c

创建一个名为 all_names 的列表,并将三个(3个)名字列表相加,如下所示:

all_names = names_a + names_b + names_c

这会将所有列表合并成一个更大的列表,接下来使用 Python 函数 join() 将列表中的所有项合并成一个字符串。你也可以通过在引号内声明来指定每个列表项之间的分隔符,例如:

all_names = ", ".join(all_templates)

使用预定义的 write() 函数以及 all_names 列表,将所有名字以正确的格式写出。

接下来,走向金色的 X 标记并面向桌子,这里我们将设置模板。这里预先写好两个模板对象,分别为 red_templatesblue_templates

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

每个模板都有独特的信息,但它们有一个共同点,即都包含一个标记为 $name 的占位符。$ 符号用于标记一个可用你所选择的字符串替换的位置,在这里正如标题所示,它代表一个名字。如果没有替换值,则模板将仅在字符串中使用占位符。为了补充这一点,创建一个名为 all_templates 的列表。

创建一个包含四(4)次循环的 for 循环,通过该循环我们将使用包含名字的模板替换三个(3)名字列表中的名字。例如,我们将对 names_a 列表应用 red_template。使用 Template() 类的 substitute() 函数替换模板中的 $name 占位符为列表中的名字。

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

names_bnames_c 进行相同操作,对于 names_b 也使用 red_template,而对于 names_c 则使用 blue_template

一旦所有名字列表都使用新模板填充后,就该检查它们了。创建一个新的列表 all_templates,将所有名字列表合并,如下所示:

all_templates = names_a + names_b + names_c

使用之前相同的 join() 函数将所有带模板的名字合并成可读的形式,如下所示:

all_templates = "\n".join(all_templates)

使用预定义的 write() 函数和 all_templates 将所有不同名字的标题写出。

接下来,我们走向红地毯上暗色的 X 标记并面向桌子,这里我们将格式化并写出第一组信件。首先创建两个(2个)格式化器对象,分别命名为 red_1red_2,形式如下:

red_1 = Formatter() , red_2 = Formatter()

对于信件的撰写,创建一个名为 red_letters 的列表。

与之前类似,我们将创建一个包含四(4)次循环的 for 循环,我们将有两个预先写好的字符串,通过 format() 函数组合名字变量。将这些格式化后的字符串追加到 red_letters 列表中,从而形成一份完整的将被发送的信件列表。例如,使用 red_1 格式化对象对 names_a 列表中的名字进行格式化,并追加到 red_letters 列表中。

for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))

names_b 列表使用 red_2 格式化对象按照预先写好的字符串进行同样操作。一切设置好后,使用 join() 函数将 red_letters 列表中的数据合并为一个单独的文件,如下所示:

red_letters = "\n".join(red_letters)

使用 write() 函数和 red_letters 将所有格式化后的信件写出。

最后,走向蓝色地毯上暗色的 X 标记并面向桌子,这里我们将格式化并撰写最后一组信件。与之前类似,创建两个(2个)格式化器对象,分别命名为 blue_1blue_2,形式如下:

blue_1 = Formatter() , blue_2 = Formatter()

创建一个 blue_letters 列表来格式化并撰写所有信件。

再次创建一个包含四(4)次循环的 for 循环,使用预先写好的字符串对名字列表进行格式化,并通过 format() 函数追加到 blue_letters 列表中。在这种情况下,将 blue_1 格式化对象与 names_c 列表搭配使用,而将 blue_2 格式化对象与 names_b 列表搭配使用。所有操作方式与红地毯部分相同,但使用了不同的值,从而展示了格式和模板的多样性。一切完成后,使用 write() 函数和 blue_letters 将最后一组信件归档,从而完成关卡。

代码书