笨办法学 Python3 第五版(预览)(一)(2)https://developer.aliyun.com/article/1483424
转义序列
这是 Python 支持的所有转义序列。你可能不会使用其中许多,但无论如何要记住它们的格式和功能。尝试在一些字符串中使用它们,看看能否让它们起作用。
学习练习
- 通过将它们放在闪存卡上来记忆所有的转义序列。
- 使用
'''
(三个单引号)代替。你能看出为什么你可能会使用它而不是"""
吗? - 结合转义序列和格式字符串创建更复杂的格式。
常见学生问题
我还没有完全弄清楚最后一个练习。我应该继续吗? 是的,继续。不要停下来,记下你对每个练习不理解的事情。定期查看你的笔记,看看在完成更多练习后是否能弄清楚这些事情。有时候,你可能需要回头做几个练习。
是什么让 // 与其他的不同? 这只是你会写出一个反斜杠(\
)字符的方式。想想为什么你会需要这个。
当我写 //
或 /n
时它不起作用。那是因为你使用的是正斜杠/
而不是反斜杠\
。它们是不同的字符,做着非常不同的事情。
我不明白练习 3。你说的“结合”转义序列和格式是什么意思? 我需要你理解的一个概念是,这些练习可以结合起来解决问题。利用你对格式化字符串的了解,编写一些新代码,使用格式化字符串和这个练习中的转义序列。
哪个更好, '''
还是 """
? 这完全取决于风格。现在选择'''
(三个单引号)风格,但要准备根据感觉或其他人的做法选择其中之一。
练习 11:向人们提问
现在是加快节奏的时候了。你一直在打印以便熟悉输入简单的东西,但那些简单的东西相当无聊。我们现在想要做的是将数据输入到你的程序中。这有点棘手,因为你必须学会做两件可能一开始不太明白的事情,但相信我,无论如何都要做。在几个练习后,它们会变得清晰起来。
软件大部分的功能是以下内容:
- 从一个人那里获取某种输入。
- 改变它。
- 打印出一些内容以展示它是如何改变的。
到目前为止,你一直在打印字符串,但还没有能够从一个人那里获取任何输入。你可能甚至不知道“输入”是什么意思,但无论如何都要输入这段代码,并确保完全相同。在下一个练习中,我们将做更多的解释输入的内容。
清单 11.1: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
不要以换行符结束该行并转到下一行。
你应该看到的内容
1 How old are you? 38 2 How tall are you? 6'2" 3 How much do you weigh? 180lbs 4 So, you're 38 old, 6'2" tall and 180lbs heavy.
学习练习
- 上网查找 Python 的
input
是做什么的。 - 你能找到其他使用它的方法吗?尝试一些你找到的示例。
- 写另一个像这样的“表格”来询问其他问题。
常见学生问题
我如何从某人那里获取一个数字以便进行数学计算? 这有点高级,但尝试x =
int(input())
,它从input()
获取数字作为字符串,然后使用int()
将其转换为整数。
我使用 input("6'2")
将我的身高输入到原始输入中,但它不起作用。你不需要在那里输入你的身高;你直接在终端中输入。首先,回去把代码完全改成和我的一样。接下来,运行脚本,当它暂停时,在键盘上输入你的身高。就是这么简单。
练习 12:更简单的提示方式
当你输入input()
时,你实际上输入了(
和)
字符,这些是括号
字符。对于input
,你也可以输入一个提示,让人知道该输入什么。在()
内放入你想要的提示字符串,看起来像这样:
y = input("Name? ")
这提示用户输入“姓名?”,并将结果放入变量y
中。这就是你向某人提问并得到答案的方式。
这意味着我们可以完全重写我们之前的练习,只需使用input
来进行所有提示。
列表 12.1: 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.")
你应该看到什么
1 How old are you? 38 2 How tall are you? 6'2" 3 How much do you weigh? 180lbs 4 So, you're 38 old, 6'2" tall and 180lbs heavy.
学习练习
- 在你的 Jupyter 单元格中右键点击任何
print
,然后选择显示上下文帮助
。这将为print
提供快速文档。 - 如果你这样做,面板上会显示“点击函数查看文档。”,那么你需要用
SHIFT-ENTER
运行代码,然后再次点击print
函数。 - 接下来,去Google搜索
python print site:python.org
以获取 Pythonprint
函数的官方文档。
常见学生问题
为什么上下文帮助会消失? 我不确定,但我怀疑它无法在你编辑代码时找到你想要文档的函数。运行代码,然后突然它就会起作用。你也可以点击你工作的任何其他单元格中的任何其他函数。
这些文档是从哪里来的? 这些是添加到代码本身的文档注释,这就是为什么它可能与在线文档不同的原因。养成在可能的情况下同时学习两者的习惯。
练习 13:参数、解包、变量
现在我们将快速进入终端
(又称PowerShell
)版本的python
世界。如果你正确完成了First Steps,你应该已经学会了如何启动终端并运行一个简单的 Python 脚本。在本课程的后面,你将学习如何更广泛地使用终端,但在这个练习中,我们只是做一个小小的测试。
首先,我希望你使用 Jupyter 的新 Python 文件创建一个名为ex13.py
的文件:
- 左侧有一个列出你目录中文件的列表。
- 在那个列表的上方有一个蓝色的
[+]
按钮。 - 点击那个按钮,滚动到底部,那里应该有一个带有 Python“蓝色和黄色蛇”标志的
Python
File
按钮。 - 点击那个按钮打开一个新的面板,你可以在其中输入代码。
- 立即使用鼠标选择
File > Save Python File
或按住CTRL
键并按下s
键(通常显示为Ctrl-S
,但你不需要按住 Shift 键来输入S
)。 - 这将打开一个模态提示,上面写着“重命名文件”。输入“ex13”,它应该保留
.py
,但确保这个输入显示为ex13.py
。 - 点击蓝色的
[Rename]
按钮将文件保存在那个目录中。
保存了那个文件之后,你可以将以下代码输入到文件中:
列表 13.1: ex13.py
1 from sys import argv 2 # read the What You Should See section for how to run this 3 script, first, second, third = argv 4 5 print("The script is called:", script) 6 print("Your first variable is:", first) 7 print("Your second variable is:", second) 8 print("Your third variable is:", third)
我建议你只输入一两行代码,然后执行以下操作:
- 再次保存你的文件。按下
CTRL-s
是最简单的方法,但如果你记不住,可以使用菜单。这次它不应该要求你“重命名”文件,而应该直接保存。 - 你的文件现在保存在你的项目目录中。如果你还记得*First Steps*部分,你创建了一个目录在
~/Projects/lpythw
,当你运行jupyter-lab
时,你首先cd ~/Projects/lpythw
。 - 现在打开一个新的终端(在 Windows 上是 PowerShell),再次输入
cd ~/Projects/lpythw/
以进入该终端。 - 最后,输入
python ex13.py first 2nd 3rd
。(在终端中输入时不要加句号。)当你这样做时,你应该看到绝对什么都没有!是的,这点非常重要。你只输入了一两行代码,所以在你的代码中没有print
语句。这意味着它不会打印任何内容,但这是好事。如果出现错误,那么停下来弄清楚你做错了什么。你是不是打错了那行代码?你运行了python ex13.py
吗?那也是错误的。你必须运行python ex13.py first 2nd 3rd
。(再次强调,不要在终端中加句号。)
如果你迷路了
如果你对自己所在位置感到困惑,可以在 macOS 上使用open
命令,在 Windows 上使用start
命令。如果你输入以下内容:
1 open .
在 macOS 电脑上,它会打开一个窗口,显示当前终端所在位置的内容。当你输入以下内容时,同样的情况也会发生:
1 start .
在 Windows 中在 PowerShell 中。这样做将帮助你将“文件在窗口中的文件夹中”这个概念连接到“文件在终端(PowerShell)中的目录中”。
如果这是你第一次看到这个建议,那么回到*First Steps*部分,重新查看它,因为你似乎错过了这个重要概念。
代码描述
在第1
行,我们有一个称为“import”的东西。这是你从 Python 功能集中添加功能到你的脚本的方式。Python 不会一次性给你所有功能,而是要求你说出你打算使用的功能。这样可以使你的程序保持简洁,同时也作为其他程序员阅读你代码时的文档。
argv
是“参数变量”,在编程中是一个非常标准的名称,你会发现它在许多其他语言中被使用。这个变量保存你在运行 Python 脚本时传递的参数。在练习中,你将有机会更多地玩弄它,并看看会发生什么。
第 3 行“unpacks” argv
,这样,它不再保存所有参数,而是被分配给四个你可以使用的变量:script
、first
、second
和third
。这可能看起来很奇怪,但“unpack”可能是最好的描述它的词。它只是说,“取出argv
中的任何内容,解包它,并按顺序分配给左边的所有这些变量。”
之后我们就像平常一样打印它们出来。
等一下!features 还有另一个名字
我在这里称它们为“features”(你import
来使你的 Python 程序做更多事情的小东西),但没有人称它们为 features。我只是用这个名字是因为我需要欺骗你学习它们是什么,而不带有行话。在继续之前,你需要学习它们的真实名称:modules
。
从现在开始,我们将称这些为“features”,我们import
modules。我会说像,“你想要导入sys
模块。”其他程序员也称它们为“库”,但让我们坚持使用模块。
你应该看到的内容
警告!
注意!你一直在没有命令行参数运行 Python 脚本。如果你只输入python3 ex13.py
,那么你做错了!请仔细看我是如何运行的。每当看到使用 argv 时都适用。
当你输入完所有代码后,它应该像这样最终运行(而且你必须传递三个命令行参数):
1 $ python ex13.py first 2nd 3rd 2 The script is called: ex13.py 3 Your first variable is: first 4 Your second variable is: 2nd 5 Your third variable is: 3rd
这是你使用不同参数进行几次运行时应该看到的内容:
1 $ python ex13.py stuff things that 2 The script is called: ex13.py 3 Your first variable is: stuff 4 Your second variable is: things 5 Your third variable is: that
这里有一个更多的例子,显示它可以是任何东西:
1 $ python ex13.py apple orange grapefruit 2 The script is called: ex13.py 3 Your first variable is: apple 4 Your second variable is: orange 5 Your third variable is: grapefruit
你实际上可以用任何三个你想要的东西替换first
、2nd
和3rd
。
如果你没有正确运行它,那么你会得到这样的错误:
命令失败:python ex13.py first 2nd Traceback (most recent call last): File “/Users/zedshaw/Project s/learncodethehardway.com/private/db/modules/learn-python-the-hard-way-5e-section-1/code/ex13.py”,第 3 行,在脚本、第一个、第二个、第三个 = argv ValueError: not enough values to unpack (expected 4, got 3)
当你在运行时没有在命令中放足够的参数时会发生这种情况(在这种情况下只有first 2nd
)。注意,当我运行它时,我给了它first 2nd
,这导致它出现了一个关于“需要超过 3 个值来解包”的错误,告诉你没有给足够的参数。
学习练习
- 尝试给你的脚本提供少于三个参数。看看你会得到什么错误?看看你能否解释清楚。
- 编写一个参数较少的脚本和一个参数较多的脚本。确保给解包的变量起一个好名字。
- 结合
input
和argv
编写一个脚本,从用户那里获取更多输入。不要想得太多。只需使用argv
获取一些内容,然后使用input
从用户那里获取其他内容。 - 记住模块给你提供了功能。模块。模块。记住这一点,因为我们以后会用到它。
常见学生问题
当我运行它时,我得到 ValueError: need more than 1 value to unpack
。记住一个重要的技能是注意细节。如果你看一下你应该看到的内容部分,你会看到我是如何在命令行上运行脚本的。你应该完全复制我运行它的方式。那里还有一个巨大的警告解释了你刚刚犯的错误,所以请再次注意。
argv
和 input()
之间有什么区别? 区别在于用户需要在哪里提供输入。如果他们在命令行上给你的脚本输入,那么使用argv
。如果你希望他们在脚本运行时使用键盘输入,那么使用input()
。
命令行参数是字符串吗? 是的,它们作为字符串传入,即使你在命令行上输入了数字。使用int()
来转换它们,就像使用int(input())
一样。
你如何使用命令行? 你应该已经学会如何快速流利地使用它了,但如果你在这个阶段需要学习,那么请阅读附录 A,“命令行速成课程”。
我无法将 argv
与 input()
结合起来。不要想得太多。只需在脚本末尾加上两行,使用input()
获取一些内容然后打印出来。从那里开始尝试更多同时使用两者的方法。
为什么我不能这样做 input('? ') = x
? 因为这是反向的工作方式。按照我的方式去做,它就会起作用。
为什么你要让我一次只输入一行? 初学者和专业人士最常犯的错误就是他们输入一大块代码,运行一次,然后因为所有的错误而哭泣。编程语言中的错误令人沮丧,并经常指向源代码中错误的位置。如果你一次只输入几行代码,你会更频繁地运行代码,当出现错误时,你知道这可能是你刚刚输入的那几行代码有问题。当你输入 100 行代码时,你将花费接下来的 5 天来寻找所有的错误,最终放弃。省点麻烦,一次只输入一点点。这就是我和大多数有能力的程序员在现实生活中所做的。
练习 14:提示和传递
让我们做一个练习,结合使用argv
和input
来询问用户特定的事情。你将在下一个练习中需要这个,那里你将学习如何读写文件。在这个练习中,我们将稍微不同地使用input
,让它打印一个简单的>
提示。
列表 14.1: ex14.py
1 from sys import argv 2 3 script, user_name = argv 4 prompt = '> ' 5 6 print(f"Hi {user_name}, I'm the {script} script.") 7 print("I'd like to ask you a few questions.") 8 print(f"Do you like me {user_name}?") 9 likes = input(prompt) 10 11 print(f"Where do you live {user_name}?") 12 lives = input(prompt) 13 14 print("What kind of computer do you have?") 15 computer = input(prompt) 16 17 print(f""" 18 Alright, so you said {likes} about liking me. 19 You live in {lives}. Not sure where that is. 20 And you have a {computer} computer. Nice. 21 """)
我们创建一个名为prompt
的变量,设置为我们想要的提示,并将其提供给input
,而不是一遍又一遍地输入。现在,如果我们想要将提示更改为其他内容,我们只需在这一个地方更改它,然后重新运行脚本。非常方便。
警告!
记住,你必须像在 Exercise 13 中那样做,并使用终端使其工作。这将是一段时间内的最后一次,但重要的是要知道如何从终端运行代码,因为这是运行 Python 代码的一种常见方式。
你应该看到的内容
运行此代码时,请记住必须为argv
参数提供你的名字。
1 $ python ex14.py zed 2 Hi zed, I'm the ex14.py script. 3 I'd like to ask you a few questions. 4 Do you like me zed? 5 > Yes 6 Where do you live zed? 7 > San Francisco 8 What kind of computer do you have? 9 > Tandy 1000 10 11 Alright, so you said Yes about liking me. 12 You live in San Francisco. Not sure where that is. 13 And you have a Tandy 1000 computer. Nice.
学习练习
- 找出 Zork 和 Adventure 是什么游戏。尝试找到一份副本并玩一玩。
- 将
prompt
变量完全更改为其他内容。 - 添加另一个参数,并在你的脚本中使用它,就像在上一个练习中使用
first, second = ARGV
一样。 - 确保你理解我是如何将
"""
样式的多行字符串与{}
格式激活器结合在一起作为最后一个打印的。 - 尝试找到在 Jupyter 中运行此代码的方法。你可能需要用其他东西替换使用
argv
的代码,比如一些变量。
常见学生问题
当我运行这个脚本时,我收到 SyntaxError: invalid syntax
。再次强调,你必须在命令行上正确运行它,而不是在 Python 内部。如果你输入python3
然后尝试输入python3 ex14.py Zed
,它将失败,因为你是在Python 内部运行 Python。关闭窗口,然后只需输入python3 ex14.py Zed
。
我不明白你所说的改变提示是什么意思。看看变量prompt = '> '
。将其更改为其他值。你知道这个;这只是一个字符串,你已经做了 13 个练习来创建它,所以花点时间弄清楚。
我收到错误 ValueError: need more than 1 value to unpack
。记得我说过你需要查看你应该看到的内容(WYSS)部分并复制我做的吗?你需要在这里做同样的事情,关注我如何输入命令以及为什么要有命令行参数。
我如何从 IDLE 运行这个? 不要使用 IDLE。它很糟糕。
我可以为 prompt
变量使用双引号吗? 完全可以。试试看吧。
你有一台 Tandy 电脑吗? 我小时候有过。
当我运行它时,我收到 NameError: name 'prompt' is not defined
。你要么拼错了prompt
变量的名称,要么忘记了那一行。回去逐行比较我的代码和你的代码,从脚本底部到顶部。每当你看到这个错误时,意味着你拼写错了或忘记创建变量。
练习 15:读取文件
你知道如何使用input
或argv
从用户那里获取输入。现在你将学习如何从文件中读取。你可能需要仔细研究这个练习,以理解发生了什么,所以仔细做练习并记住你的检查。如果不小心处理文件,这是一种擦除你的工作的简单方法。
这个练习涉及编写两个文件。一个是你将运行的通常的ex15.py
文件,但另一个名为ex15_sample.txt
。这第二个文件不是一个脚本,而是一个我们将在我们的脚本中读取的纯文本文件。以下是该文件的内容:
1 This is stuff I typed into a file. 2 It is really cool stuff. 3 Lots and lots of fun to have in here.
我们想要在我们的脚本中“打开”那个文件并将其打印出来。然而,我们不想将名为ex15_sample.txt
的文件名直接“硬编码”到我们的脚本中。所谓“硬编码”是指将应该来自用户的一些信息作为字符串直接放在我们的源代码中。这是不好的,因为我们希望以后加载其他文件。解决方案是使用argv
或input
询问用户要打开哪个文件,而不是将文件名“硬编码”到脚本中。
列表 15.1:ex15.py
1 from sys import argv 2 3 script, filename = argv 4 5 txt = open(filename) 6 7 print(f"Here's your file {filename}:") 8 print(txt.read()) 9 10 print("Type the filename again:") 11 file_again = input("> ") 12 13 txt_again = open(file_again) 14 15 print(txt_again.read())
这个文件中有一些花哨的东西,所以让我们快速地分解一下。
第 1-3 行使用argv
获取文件名。接下来是第 5 行,我们使用一个新命令:open
。现在运行pydoc open
并阅读说明。注意,就像你自己的脚本和input
一样,它接受一个参数并返回一个可以设置为你自己变量的值。你刚刚打开了一个文件。
第 7 行打印了一条小消息,但在第 8 行,我们有一些非常新颖和令人兴奋的东西。我们在txt
上调用了一个名为read
的函数。你从open
得到的是一个file
,它也有你可以给它的命令。你可以使用.
(点)命令一个文件,命令的名称和参数,就像open
和input
一样。不同之处在于txt.read()
表示,“嘿txt
!执行你的读取命令,不带参数!”
文件的其余部分基本相同,但我们将在学习练习部分留给你来分析。
你应该看到什么
警告!
注意!我说了要注意!你之前只是用脚本的名称运行脚本,但现在你正在使用argv
,你必须添加参数。看看以下示例的第一行,你会看到我执行python ex15.py ex15_sample.txt
来运行它。在ex15.py
脚本名称后面看到额外的参数ex15_sample.txt
。如果你不输入,你会得到一个错误,所以要注意!
笨办法学 Python3 第五版(预览)(一)(4)https://developer.aliyun.com/article/1483427