通过痛苦的方式学习Python,第六个练习。
我在这个网站上搜索过,但似乎《Learn Python the Hard Way》这本书里的这个练习没有在之前的问题中被讨论过。
这个练习是这样的:
1) 找出所有字符串中包含另一个字符串的地方。总共有四个地方。
2) 你确定只有四个地方吗?你怎么知道?也许我喜欢撒谎。
x = "There are %d types of people." % 10
binary = "binary"
do_not = "don't"
y = "Those who know %s and those who %s." % (binary, do_not) #two strings inside a string, count is 2
print x
print y
print "I said: %r." % x #here, count is 3
print "I also said: '%s'." % y #here, count is 4
hilarious = False
joke_evaluation = "Isn't that joke so funny?! %r"
print joke_evaluation % hilarious
w = "This is the left side of..."
e = "a string with a right side."
print w + e
我试着解决这个问题,并在我找到字符串中包含另一个字符串的地方做了注释(找到了4个)。但是,作者的第二个问题让我担心我可能没有找到全部。请问我是不是漏掉了什么?如果是的话,能告诉我是什么吗?
1 个回答
如果你把“把一个字符串放在另一个字符串里”理解为“用格式字符和字符串参数”,那么你就正确地找到了四个出现的地方。也许我们可以不看那些没用的说明,直接解释一下发生了什么。想了解更多,可以看看官方文档关于格式字符的介绍。我会尽量提供一些有用的练习题,而不是让你感到困惑的问题。
x = "There are %d types of people." % 10
%d
是用来表示一个有符号的十进制整数
的格式字符(大多数人听到“数字”时会想到的东西)。比如10就是十进制的,放进字符串里后,就变成了字符串There are 10 types of people.
。
练习: "7+6: %d" % (7+6)
的结果会是什么?在你的Python环境里试试吧。
练习: "0x12: %d" % 0x12
的结果会是什么?在你的Python环境里试试。提示:前面有0x
的数字是十六进制的,也就是基数16,而不是10。
binary = "binary"
do_not = "don't"
y = "Those who know %s and those who %s." % (binary, do_not)
%s
用来插入一个值的字符串表示。这个例子说明了如果格式字符串里有多个%d
、%s
等,我们需要提供相应数量的参数,这些参数可以放在一个元组或列表里。元组(用圆括号)和列表(用方括号)的区别在于,元组是不可变的(也就是说不能改变),而列表是可以改变的。
练习: 给定元组x = ('world', 'Hello')
,构造一个元组y
,使单词的顺序正确。可以参考Dive Into Python对元组的介绍,帮助你理解元组的基础知识。
print "I said: %r." % x
%r
是一个值的表示形式,理想情况下是你可以在Python环境中输入的内容。你也可以用repr
函数得到相同的表示形式。例如,repr("a") == "'a'"
,而str(a) == "a"
。对于大多数类型,除了字符串,repr
和str
(或者在格式字符串中的%r
和%s
)的结果是一样的。
print w + e
这连接了两个字符串(也就是把一个放在另一个后面)。注意,如果两个参数都是数字,+
的意思就变成了加法。
练习: "3" + "4"
的结果是什么?在你的Python环境里试试。
练习: 给定x = "3"; y = "4"
,打印出和为7的结果(提示)。