《“笨办法”学Python(第3版)》——习题6 字符串和文本

本节书摘来自异步社区《“笨办法”学Python(第3版)》一书中的习题6,作者[美]Zed A. Shaw,王巍巍 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

习题6 字符串和文本

虽然你已经在程序中写过字符串了,但是你还不了解它们的用处。在这个习题中我们将使用复杂的字符串来建立一系列变量,从中你将学到它们的用途。首先,我们解释一下字符串是什么。

字符串通常是指你想要展示给别人的或者是想要从程序里“导出”的一小段字符。Python可以通过文本里的双引号(")或者单引号(')识别出字符串来。这在以前的打印练习中你已经见过很多次了。如果你把单引号或者双引号括起来的文本放到print后面,它们就会被Python打印出来。

字符串可以包含之前已经见过的格式化字符。你只要将格式化的变量放到字符串中,紧跟着一个百分号%,再紧跟着变量名即可。唯一要注意的地方是,如果你想要在字符串中通过格式化字符放入多个变量,需要将变量放到圆括号(())中,而且变量之间用逗号(,)隔开。就像你逛商店说“我要买牛奶、鸡蛋、面包、清汤”一样,只不过程序员的语法是“(milk, eggs, bread, soup)”。

我们将键入大量的字符串、变量、格式化字符,并且将它们打印出来。我们还将练习使用简写的变量名。程序员喜欢使用恼人的难读的简写来节约打字时间,所以我们现在就提早学会这个,这样你就能读懂并且写出这些东西了。

ex6.py

1     x = "There are %d types of people." % 10
2     binary = "binary"
3     do_not = "don't"
4     y = "Those who know %s and those who %s." % (binary, do_not)
5     
6     print x
7     print y
8     
9     print "I said: %r." % x
10     print "I also said: '%s'." % y
11     
12     hilarious = False
13     joke_evaluation = "Isn't that joke so funny?! %r"
14     
15     print joke_evaluation % hilarious
16     
17     w = "This is the left side of..."
18     e = "a string with a right side."
19     
20     print w + e

应该看到的结果

习题6 会话

$ python ex6.py
There are 10 types of people.
Those who know binary and those who don't.
I said: 'There are 10 types of people.'.
I also said: 'Those who know binary and those who don't.'.
Isn't that joke so funny?! False
This is the left side of...a string with a right side.

附加练习

1.通读这段程序,在每一行的上面写一行注释,给自己解释一下这一行的作用。

2.找到所有“把一个字符串放进另一个字符串”的位置。总共有4个地方。

3.你确定只有4个位置吗?你怎么知道的?没准儿我骗你呢。

4.解释一下为什么w和e用+连起来就可以生成一个更长的字符串。

常见问题回答

%r和%s有什么不同?

%r用来做调试(debug)比较好,因为它会显示变量的原始数据(raw data),而%s和其他的符号则是用来向用户显示输出的。
既然有%r了,为什么还要用%s和%d?

%r用来调试最好,而其他格式符则是用来向用户显示变量的。
如果你觉得很好笑,可不可以写一句hilarious = True?

可以。在习题27中你会学到关于布尔函数的更多知识。
为什么你在有些字符串上用单引号而在别的字符串上没有用?

很大程度上只是个风格问题,我的风格就是在双引号的字符串中使用单引号,比如代码的第10行就是这样做的。
我遇到了错误TypeError: not all arguments converted during string formatting。

确定每一行代码都完全正确。发生这种错误是因为你的字符串里的%格式化字符数量比后面给的变量多,仔细检查一下哪里写错了。

上一篇:dubbo专题-服务暴露总结(本地暴露+远程暴露时序图)


下一篇:Nginx 用ModSecurity实现WAF功能