本文共 3954 字,大约阅读时间需要 13 分钟。
本节书摘来自华章计算机《Python程序设计》一书中的第2章,第2.3节,作者:[美]戴维 I.施奈德(David I. Schneider)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看
通过带有两个可选参数print函数和format方法的使用,能够产生更丰富的输出格式。
2.3.1 print的可选参数sep下列形式的语句:将依次显示每个value的值并用空格分隔,其中,每个值可以是字符串或者数字。因此,可以说print函数在使用一个将空格字符作为分隔符的字符串。我们可以通过sep参数将分隔符改变为我们想要的任何字符串。如果sepString是一个字符串,那么下列形式的语句:
将依次显示每个value的值并用sepString分隔。一些例子如下:
2.3.2 print的可选参数end
在上面提到的任一语句执行后,输出的显示在当前行也就结束了。后面语句的输出将显示在下一行中。因此,可以说print语句是以执行了一个换行操作结束的(也可以说,print语句将光标移动到了下一行的开始位置或者print语句执行了一个“回车和换行”)。我们可以通过end参数将结束操作进行改变。如果endString是一个字符串,那么下列形式的语句:将显示从value0到valueN,然后在同一行的末尾显示endString,而代替了换行操作。这里给出了一些使用end参数的代码。
2.3.3 转义序列
转义序列是位于字符串中的短序列,用于指示光标或者允许一些特殊字符的输出。第一个转义字符是反斜杠()。最为常见的两个光标指示转义序列是t(产生一个水平制表符)和n(产生一个换行操作)。默认情况下,制表符的大小是8个空格,但是可以使用expandtabs方法增加或者减少制表符的大小。例1 转义序列下面的程序展示了转义序列t和n的用法。当计算一个字符串的长度时,每个转义序列可当作一个字符。例如,len("atbtc")的结果为5。反斜杠不被认为是一个字符,而是一个指示器告诉Python对跟随其后的字符进行特殊处理。转义序列n经常被看作为一个换行符。
反斜杠也可用于将引号变为普通字符。例如,语句print('Say it ain't so.')所显示的第三个单词是ain抰。反斜杠字符告诉Python将引号视为普通的单引号,而不是一个两旁的引号。另外两个有用的转义序列是"和\,可让print函数分别显示一个双引号字符和一个反斜杠字符。在后面的章节中,我们会经常碰到以换行符结尾的字符串。例如,文本文件的每一行都是一个以换行符结尾的字符串。字符串方法rstrip可以用来从字符串末端移除换行符。例如,如果str1的值是"xyzn",那么str1.rstrip()的值为"xyz"。此外,当int、float和eval函数作用于以换行符结尾的字符串时,它们会忽略换行符。例如,int('7n')具有和int('7')一样的值。2.3.4 域内输出对齐程序经常需要以固定的宽度一列一列地显示输出。ljust(n)、rjust(n)和center(n)方法可用于以宽度为n的域,分别按照居左、居右和居中对齐字符串输出。如果一个字符串没有达到域指定的宽度,该字符串的右边、左边或者两边将用空格填充。如果该字符串长度大于指定的宽度,对齐方法可以忽略。例2 输出对齐下面的程序使用三种对齐方法创建一个职业棒球联赛中全垒打前三的击球员的表格。第一行用于标记表格中的每个列。前5列(第0~4列)列出了前三位击球员的排名。数字1、2和3居中显示在宽度为5的域中。后面的20列(第5~24列)记录了前三位击球员的姓名,每个名字居左显示在宽度为20的域中。每个名字的右侧使用空格填充。最后3列(第25~27列)记录了每位击球员击出的全垒打数目。考虑到每个数字长度都是三位,它们正好可以放到宽度为3的域中。尽管不使用rjust方法,该列的输出也是一样的。2.3.5 使用format方法对齐输出
format方法是最近才加入Python中的,有着与文本对齐方法一样甚至更为强大的功能。例如,它可以在数字中加入千位分隔符、四舍五入和将数字转换为百分数。我们将为大家展示这个方法文本对齐的能力,并给出一些其他的特性。如果str1是一个字符串,并且w是域宽,那么下列形式的语句:产生与下列语句相同的输出:
如果num是一个数字,并且w是域宽,那么下列形式的语句:
产生与下列语句相同的输出:
注意format方法能够直接接受数字。它们不需要转换为字符串。位于每个域宽度前的符号<、 ^和>要求print函数输出分别左对齐、居中对齐和右对齐。
在上面包含format方法的语句中,format方法中有个单独的参数(num)。经常有多个参数,分别要对应从0开始计数的多个位置。实际上,大括号中冒号前的0意味着num位于第0个位置上。当有多个参数的时候,相应地会有多对大括号,每对大括号对应一个参数。每对大括号里面冒号前的数字给出了每个所格式化参数的位置。例3 输出对齐下面的程序将产生与例2一样的输出,但使用的是format方法。请注意第四行。格式串{0:^5n}、{1:<20s}和{2:>3n} 分别决定了数字1、字符串“Barry Bond”和数字762的格式。当需要格式化数字时,我们使用字母d表示整型,字母f表示浮点型,符号%表示数字以百分数显示,而不是使用大括号中的可以表示任何类型数字的字母n。当使用f和%时,它们前面应该有一个小数点和一个整数。整数决定了小数部分显示的位数。在上面的三种情况下,如果我们想要千位分隔符,也可以通过在指定域宽的数字后面加入逗号来完成。
当format方法用于格式化数字时,居右对齐是默认的对齐方式。因此,当没有出现符号<、^或者>时,数字在域内将居右对齐显示。表2-4显示了一些语句及其对应的输出。跟随在冒号之后的域宽数字可以被忽略。在这种情况下,数字的显示方式将由冒号后的其他说明符来决定。
到目前为止,跟随着“.format”的字符串总是包含一对或多对大括号。然而,这个字符串可以是包含大括号的任意字符串。在这种情况下,大括号是占位符,告诉Python在什么位置插入format方法使用的参数。例4 州数据
下面的程序使用花括号中的字符串来说明。注释
给出以下代码行的显示输出。
习题2.3
在习题1~50中,给出下列代码行相应的输出。在用户输入本金、利率和年数之后,计算投资的未来值。图2-27显示了1 000美元的投资在3年后会增长到1 157.63美元。
在用户输入未来值、利率和年数之后,计算投资的现值。图2-28显示了以每年4%的利率,要在6年后达到10 000美元,现在必须要投资7 903.15美元。
实践问题2.3的解答
我们在程序中使用指示符s能够提高可读性。它提醒程序员参数集合中有一个参数必须是字符串。
转载地址:http://fnflx.baihongyu.com/