练习 10 那是什么?
在练习 9 中我教了你一些新东西。这两天我们一直在学习字符串。我教了你两种创建多行字符串的方式,第一种是在月份中间加 \n
,它可以实现换行。
\
这个字符可以把没法输入的字符转化成字符串。有很多你可能会用到的“转义字符”(escape scequence),我们会在接下来的练习中学到一些,以便你理解我说的意思。
一个很重要的转义字符就是转义单引号或者双引号。比如你要在一个用双引号引起来的字符串中再加一对双引号,就像这样:"I "understand" joe."
,python 就会懵掉,因为它会认为 understand 后面的双引号就代表这个字符串已经结束了。所以你需要用一种方式告诉 python 字符串里面的双引号并不是一个真正的双引号。
要解决这个问题,你得转义双引号和单引号,让 python 知道得把它们包含在字符串里。例如:
"I am 6'2\" tall." # escape double—quote inside string
'I am 6\'2" tall.' # escape single—quote inside string
第二种方法是用三个双引号,即 """
,这样就能像字符串一样运行,而且你可以多输入几行,最后再以 """
结尾即可。我们来做个练习。
ex10.py
1 tabby_cat = "\tI'm tabbed in."
2 persian_cat = "I'm split\non a line."
3 backslash_cat = "I'm \\ a \\ cat."
4
5 fat_cat = """
6 I'll do a list:
7 \t* Cat food
8 \t* Fishies
9 \t* Catnip\n\t* Grass
10 """
11
12 print(tabby_cat)
13 print(persian_cat)
14 print(backslash_cat)
15 print(fat_cat)
你会看到
找一找你输入的 tab
符号(即 \t
),在这个练习中空格很重要,别弄错了。
$ python ex10 . py
I'm tabbed in.
I'm split
on a line.
I'm \ a \ cat .
I'll do a list:
* Cat food
* Fishies
* Catnip
* Grass
转义字符
这是 python 支持的所有的转义字符了。你可能用不到这么多,但是记住它们的格式以及用法。在一些字符串里试着用用它们,看看能不能成功运行。
附加练习
- 记住所有的转义字符。可以把它们添加到卡片上来记。
- 改用三个单引号(
'''
),你知道什么情况下用它而不是三个双引号("""
)吗?- 把转义字符和格式字符串结合起来创建一个更复杂的字符串。
常见问题
我还是没完全理解前面的练习,我该继续往下学吗? 是的,继续学,别停在这儿。把你不明白的东西记在本子上,定期复习,等你做完更多的练习看你能不能理解。有时候你可能需要回过头去重新做做之前的练习才能明白。
双反斜杠 \\
和其他符号有什么区别? 它只是为了让你能把单反斜杠 \
打印出来,想想你为什么要用 \\
。
我要是用 //
或者 /n
就不行。 因为你用的是斜杠而不是反斜杠。它们是不同的符号,有着不同的作用。
我不明白附加练习的第 3 题。你说的把转义字符和格式字符串结合起来是什么意思? 我需要你理解一个概念,就是这些练习都可以结合起来解决问题。用你知道的关于格式字符串的东西和本练习学到的转义字符写一些新的代码。
'''
和 """
用哪个更好? 这完全基于风格。现在先用 '''
,当你感觉用 """
更好或者别人都用它的时候你可以用 """
。
练习 11 问问题
现在可以缓一缓了。前面我们做了大量的打印练习,以让你熟悉这些简单的东西,但是的确,它们很无聊。我们现在要做的是在你的程序里放入数据。这块有点复杂,因为你得学着做两件你可能一下子理解不了的事情。但是相信我,无论如何先试试看。做几个练习之后你就会明白。
大多数软件就是做如下事情:
- 从用户那里获得一些输入。
- 改一改。
- 打印出来一些东西以显示它变成了什么。
到现在为止你一直在打印东西,但是你还不知道怎么从用户那里获得 input
(输入)。你甚至不知道“input”是什么意思。不管怎样,准确无误地输入这些代码,在下一个练习中我们会做更多的操作来解释 input
。
ex11.py
1 print("How old are you?", end=' ')
2 age = input()
3 print("How tall are you?", end=' ')
4 height = input()
5 print("How much do you weigh?", end=' ')
6 weight = input()
7
8 print(f"So, you're {age} old, {height} tall and {weight} heavy.")
警告! |
---|
我们在每一个打印行末尾放一个 end=' ' ,是为了告诉 print 不要另起一行。 |
你会看到
练习 11 会话
$ python3.6 ex11.py
How old are you? 38
How tall are you? 6'2"
How much do you weigh? 180lbs
So, you're 38 old, 6'2" tall and 180lbs heavy.
附加练习
- 上网查查 python 的
input
是干嘛的。- 你能找到它的其他使用方式吗?输入你找到的一些例子。
- 再写一个像这样的格式,来问一些问题。
常见问题
我如何从别人那里获得一些数字来做数学运算? 这就有点高级了,你可以试试输入 x = int(input())
,这样可以从 input()
里面获取到字符串形式的数字,再用 int()
把它们转化成数值。
我把我的体重作为 input
像这样输入进去:input("6'2")
,但是不能正常运行。 你别把你的体重放在那儿,你得直接在 Terminal 里面输入。首先,回去输入我让你输的代码;然后,运行脚本,当它暂停的时候,用你的键盘输入你的体重。这才是正确的做法。
练习 12 提示用户
当你输入 ()
的时候,一定要确保输入完整,它们是成对出现的。对于 input
来说,你还可以给用户放一个提示,让他知道该输入什么。你可以把提示的字符串放在 ()
里面,就像这样:
y = input("Name?")
这个提示告诉用户输入“名字”,然后把结果放到变量 y 里面。通过这种方式你就可以问用户问题然后得到他输入的答案。
这意味着我们可以重新写我们之前的练习,就用 input
来做所有的提示。
ex12.py
1 age = input("How old are you? ")
2 height = input("How tall are you? ")
3 weight = input("How much do you weigh? ")
4
5 print(f"So, you're {age} old, {height} tall and {weight} heavy.")
练习 12 会话
$ python3.6 ex12.py
How old are you? 38
How tall are you? 6'2"
How much do you weigh? 180lbs
So, you're 38 old, 6'2" tall and 180lbs heavy.
附加练习
- 在 Terminal 里输入
pydoc input
,看看它会说什么。如果你用的是 Windows, 输入python3.6 -m pydoc input
。- 输入
q
,退出pydoc
。- 到网上查查
pydoc
命令的作用。- 用
pydoc
读一读关于open
,file
,os
,和sys
的内容;浏览一遍即可,把有意思的东西记下来。
常见问题
为什么我每次运行 pydoc
都会收到错误信息:SyntaxError: invalid syntax
? 要么你没在命令行运行 pydoc
,要么你先运行了 python3.6,先退出 python3.6 再运行 pydoc
。
为什么我的 pydoc
没有像你的一样暂停? 有时候如果帮助文件很短,一屏足以放下的话,pydoc
就只会把它打印出来。
当我运行 pydoc
的时候我会收到 more is not recognized as an internal
。 一些 Windows 版本没有这个命令,你可以跳过这个小题,需要它的时候在网上搜搜 Python documentation 即可。
为什么我不能用 print("How old are you?", input()) ?
你能,只不过 input()
的结果不会被保存到一个变量里,它会以一种奇怪的方式运行。你可以试试,然后试着打印你输入的东西,看看你能不能搞明白为什么它无法运行。