# 练习6.字符串和文本
虽然你已经在程序中写过字符串了,你还没学过它们的用处。在这节练习中我们将使用复杂的字符串来建立一系列的变量,从中你将学到它们的用途。首先我们解释一下字符串是什么。
字符串通常是指你想要展示给别人的、或者是你想要从程序里“导出”的一小段字符。Python 可以通过文本里的双引号`"`或者单引号`'`识别出字符串来。这在你以前的 print 练习中你已经见过很多次了。如果你把单引号或者双引号括起来的文本放到 print 后面,它们就会被 python 打印出来。
字符串可以包含格式化字符`%s`,这个你之前也见过的。你只要将格式化的变量放到字符串中,再紧跟着一个百分号 `%`(percent),再紧跟着变量名即可。 唯一要注意的地方,是如果你想要在字符串中通过格式化字符放入多个变量的时候,你需要将变量放到 `( )` 圆括号(parenthesis)中,而且变量之间用`,` 逗号(comma)隔开。就像你逛商店说“我要买牛奶、面包、鸡蛋、汤”一样,只不过程序员说的是”(milk, eggs, bread, soup)”。
我们将练习输入大量的字符串、变量、和格式化字符,并且将它们打印出来。我们还将练习使用简写的变量名。程序员喜欢用高难度的简写来节约打字时间,所以我们现在就提早学会这个,这样你就能读懂并且写出这些东西了。
~~~
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)
print x
print y
print "I said: %r." % x
print "I also said: '%s'." % y
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
~~~
## 你看到的结果
~~~
$ 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. 通读程序,并给每一行加上注释,解释下这行的作用。
> 1. 找到所有的”字符串包含字符串”的位置,总共有四个位置。
> 1. 你确定只有四个位置吗?你怎么知道的?也许我在骗你呢。
> 1. 解释一下为什么用`+`连起来 w 和 e 就可以生成一个更长的字符串。
## 常见问题
### Q:`%r` 和 `%s`有什么不同?
> 用`%r`显示的是变量“原始”的数据值,`%r`在打印的时候能够重现它代表的对象,但其他的符号用来给用户显示变量值。看下面的例子理解一下:
> > text = "I am %d years old." % 22
print "I said: %s." % text
print "I said: %r." % text
> 返回的结果:
> > I said: I am 22 years old..
I said: 'I am 22 years old.'. // %r 给字符串加了单引号
### Q:我遇到这个报错:not all arguments converted during string formatting.
> 你要重新检查你的代码是否跟示例中的一样。发生这个错误的原因是你写的`%`的格式化字符串数量大于你给出的变量数量。再检查一遍,看你的代码哪里出错了。
### Q:为什么用`'(单引号)`标识字符串而不是其他的符号?
> 大部分情况下这只是一种风格,在一个用双引号标识的字符串内部我也会用单引号来标识其中子串。看看代码的第10行我是如何使用单双引号的。如果你认为一个笑话很好笑,你能否些I`hilarious = True`? 答案当时是可以,而且,我们会在习题27中学到布尔值 。
- 序言
- 前言
- 简介
- 0:安装和准备
- 1:第一个程序
- 2:注释和“#”井号
- 3:数字和数学计算
- 4:变量和命名
- 5:更多的变量和打印
- 6:字符串和文本
- 7:更多的打印(输出)
- 8:打印, 打印
- 9:打印, 打印, 打印
- 10:那是什么?
- 11:提问
- 12:提示别人
- 13:参数, 解包, 变量
- 14:提示和传递
- 15:读文件
- 16:读写文件
- 17:更多文件操作
- 18:命名, 变量, 代码, 函数
- 19:函数和变量
- 20:函数和文件
- 21:函数的返回值
- 22:到目前为止你学到了什么?
- 23:阅读代码
- 24:更多的练习
- 25:更多更多的练习
- 26:恭喜你,可以进行一次考试了
- 27:记住逻辑
- 28:布尔表达式
- 29:IF 语句
- 30:Else 和 If
- 31:做出决定
- 32:循环和列表
- 33:while循环
- 34:访问列表元素
- 35:分支和函数
- 36:设计和调试
- 37:复习符号
- 38:列表操作
- 39:字典,可爱的字典
- 40:模块, 类和对象
- 41:学会说面向对象
- 42:对象、类、以及从属关系
- 43:基本的面向对象的分析和设计
- 44:继承Vs.包含
- 45:你来制作一个游戏
- 46:项目骨架
- 47:自动化测试
- 48:更复杂的用户输入
- 49:写代码语句
- 50:你的第一个网站
- 51:从浏览器获取输入
- 52:开始你的web游戏
- 来自老程序员的建议
- 下一步
- 附录A:命令行教程
- 简介
- 安装和准备
- 路径, 文件夹, 名录 (pwd)
- 如果你迷路了
- 创建一个路径 (mkdir)
- 改变当前路径 (cd)
- 列出当前路径 (ls)
- 删除路径 (rmdir)
- 目录切换(pushd, popd)
- 生成一个空文件(Touch, New-Item)
- 复制文件 (cp)
- 移动文件 (mv)
- 查看文件 (less, MORE)
- 输出文件 (cat)
- 删除文件 (rm)
- 退出命令行 (exit)
- 下一步