笨办法学 Python3 第五版(预览)(一)(1)https://developer.aliyun.com/article/1483422
常见学生问题
=
(单等号)和 ==
(双等号)之间有什么区别? =
(单等号)将右侧的值赋给左侧的变量。==
(双等号)测试两个值是否相同。你以后会学到这个。
我们可以写 x=100
而不是 x = 100
吗? 可以,但这是不好的形式。你应该在操作符周围添加空格,这样更容易阅读。
“反向阅读文件(代码)”是什么意思? 非常简单。想象你有一个有 16 行代码的文件。从第 16 行开始,将其与我在第 16 行的代码进行比较。然后再对第 15 行进行同样的操作,依此类推,直到你将所有代码都反向阅读完。
为什么你在 space_in_a_car
中使用 4.0
? 主要是为了让你了解什么是浮点数,并提出这个问题。参见练习部分。
练习 5:更多变量和打印
现在我们将更多地输入变量并将它们打印出来。这次我们将使用一种称为“格式化字符串”的东西。每当你在文本周围加上"
(双引号)时,你就在制作一个字符串。字符串是你如何制作程序可能提供给人类的东西。你打印字符串,将字符串保存到文件中,将字符串发送到 Web 服务器等等。
字符串非常方便,所以在这个练习中,你将学习如何制作包含嵌入变量的字符串。你通过使用特殊的{}
序列将变量嵌入字符串中,然后将你想要的变量放在{}
字符中。你还必须以字母f
开头,表示“格式”,就像f"Hello {somevar}"
一样。在"
(双引号)和{}
字符之前加上这个小f
告诉 Python 3,“嘿,这个字符串需要格式化。把这些变量放进去。”
和往常一样,即使你不理解也要输入这些内容,并确保完全一样。
列表 5.1:ex5.py
1 my_name = 'Zed A. Shaw' 2 my_age = 35 # not a lie 3 my_height = 74 # inches 4 my_weight = 180 # lbs 5 my_eyes = 'Blue' 6 my_teeth = 'White' 7 my_hair = 'Brown' 8 9 print(f"Let's talk about {my_name}.") 10 print(f"He's {my_height} inches tall.") 11 print(f"He's {my_weight} pounds heavy.") 12 print("Actually that's not too heavy.") 13 print(f"He's got {my_eyes} eyes and {my_hair} hair.") 14 print(f"His teeth are usually {my_teeth} depending on the coffee.") 15 16 # this line is tricky, try to get it exactly right 17 total = my_age + my_height + my_weight 18 print(f"If I add {my_age}, {my_height}, and {my_weight} I get {total}.")
你应该看到的内容
1 Let's talk about Zed A. Shaw. 2 He's 74 inches tall. 3 He's 180 pounds heavy. 4 Actually that's not too heavy. 5 He's got Blue eyes and Brown hair. 6 His teeth are usually White depending on the coffee. 7 If I add 35, 74, and 180 I get 289.
学习扩展
- 将所有变量中的
my_
都去掉。确保你在所有地方都修改了名称,不仅仅是在使用=
设置它们的地方。 - 尝试编写一些变量,将英寸和磅转换为厘米和千克。不要只是输入测量值。在 Python 中进行数学计算。
常见学生问题
我可以像这样定义一个变量吗: 1 = 'Zed Shaw'
? 不可以,1
不是一个有效的变量名。变量名需要以字符开头,所以a1
是可以的,但1
是不行的。
如何将浮点数四舍五入? 你可以像这样使用round()
函数:round(1.7333)
。
为什么我看不懂这个? 尝试将脚本中的数字改为你的测量值。这有点奇怪,但谈论自己会让它看起来更真实。而且,你刚刚开始,所以不会太有意义。继续前进,更多的练习会让你更好地理解。
练习 6:字符串和文本
虽然你一直在写字符串,但你仍然不知道它们是做什么的。在这个练习中,我们创建了一堆带有复杂字符串的变量,这样你就可以看到它们的用途。首先解释一下字符串。
一个字符串通常是你想要向某人显示或从你正在编写的程序“导出”的一小段文本。当你在文本周围放置"
(双引号)或'
(单引号)时,Python 知道你想要的是一个字符串。当你在print
中放置你想要放入字符串中的文本时,你会看到这种情况发生了很多次,放在print
后面的"
或'
中打印字符串。
字符串可以包含在你的 Python 脚本中的任意数量的变量。记住,变量是你设置一个名字=
(等于)一个值的任何代码行。在这个练习的代码中,types_of_people = 10
创建了一个名为types_of_people
的变量,并将其设置为=
(等于)10
。你可以将它放在任何带有{types_of_people}
的字符串中。你还会看到我必须使用一种特殊类型的字符串来“格式化”;它被称为“f-string”,看起来像这样:
f"some stuff here {avariable}" f"some other stuff {anothervar}"
Python 还有另一种使用.format()
语法的格式化方式,你可以在第 17 行看到。有时候当我想对已经创建的字符串应用格式时,你会看到我使用它。我们稍后会更详细地讨论这个。
现在我们将输入一大堆字符串、变量和格式,并打印它们。你还将练习使用简短的缩写变量名。程序员喜欢通过使用令人讨厌的短小和神秘的变量名来节省时间,所以让我们从早期开始阅读和编写它们。
清单 6.1:ex6.py
1 types_of_people = 10 2 x = f"There are {types_of_people} types of people." 3 4 binary = "binary" 5 do_not = "don't" 6 y = f"Those who know {binary} and those who {do_not}." 7 8 print(x) 9 print(y) 10 11 print(f"I said: {x}") 12 print(f"I also said: '{y}'") 13 14 hilarious = False 15 joke_evaluation = "Isn't that joke so funny?! {}" 16 17 print(joke_evaluation.format(hilarious)) 18 19 w = "This is the left side of..." 20 e = "a string with a right side." 21 22 print(w + e)
你应该看到的内容
1 There are 10 types of people. 2 Those who know binary and those who don't. 3 I said: There are 10 types of people. 4 I also said: 'Those who know binary and those who don't.' 5 Isn't that joke so funny?! False 6 This is the left side of...a string with a right side.
学习扩展
- 浏览这个程序,并在每行上面写一个注释,解释它。
- 找出所有将字符串放在另一个字符串中的地方。
- 你确定只有四个地方吗?你怎么知道?也许我喜欢说谎。
- 解释为什么使用
+
将两个字符串w
和e
相加会得到一个更长的字符串。
破解它
现在你已经到了一个可以尝试破坏你的代码以查看结果的阶段。把这看作是一个游戏,想出最聪明的方法来破坏代码。你也可以找到最简单的方法来破坏它。一旦你破坏了代码,你就需要修复它。如果你有一个朋友,那么你们两个可以尝试破坏对方的代码并修复它。把你的代码给你的朋友,保存在一个名为ex6.py
的文件中,这样他们就可以破坏一些东西。然后你尝试找到他们的错误并修复它。玩得开心,并记住,如果你写过这段代码一次,你可以再次做到。如果你把损坏搞得太严重,你总是可以再次输入以进行额外练习。
常见学生问题
为什么你会在一些字符串周围加上'
(单引号),而在另一些字符串周围不加呢?大多数情况下是出于风格考虑,但我会在双引号内部使用单引号。看看第 6 行和第 15 行,看看我是如何做到这一点的。
如果你觉得这个笑话很有趣,你能写下 hilarious = True
吗? 是的,你以后会更多地了解这些布尔值。
练习 7:合并字符串
现在我们将做一系列练习,你只需输入代码并运行它。我不会解释这个练习,因为它和之前的差不多。目的是提高你的技能。在几个练习后见,不要跳过! 不要粘贴!
列表 7.1: ex7.py
1 print("Mary had a little lamb.") 2 print("Its fleece was white as {}.".format('snow')) 3 print("And everywhere that Mary went.") 4 print("." * 10) # what'd that do? 5 6 end1 = "C" 7 end2 = "h" 8 end3 = "e" 9 end4 = "e" 10 end5 = "s" 11 end6 = "e" 12 end7 = "B" 13 end8 = "u" 14 end9 = "r" 15 end10 = "g" 16 end11 = "e" 17 end12 = "r" 18 19 # watch end = ' ' at the end. try removing it to see what happens 20 print(end1 + end2 + end3 + end4 + end5 + end6, end=' ') 21 print(end7 + end8 + end9 + end10 + end11 + end12)
你应该看到的内容
1 Mary had a little lamb. 2 Its fleece was white as snow. 3 And everywhere that Mary went. 4 .......... 5 Cheese Burger
练习
在接下来的几个练习中,你将有完全相同的练习。
- 回顾并对每一行写下注释。
- 反向阅读或大声朗读每一行,找出你的错误。
- 从现在开始,当你犯错时,记下你犯了什么样的错误。
- 当你进行下一个练习时,看看你犯过的错误,并尽量不在新的练习中犯同样的错误。
- 记住每个人都会犯错。程序员就像魔术师一样,让每个人都以为他们是完美的,从不犯错,但这都是表演。他们经常犯错。
拆分它
你是否在练习 6 中玩得开心?从现在开始,你将打破你写的所有代码或朋友的代码。我不会在每个练习中明确列出拆分它
部分,但我几乎会在每个视频中这样做。你的目标是找到尽可能多的不同方法来破坏你的代码,直到你累了或耗尽所有可能性。在一些练习中,我可能会指出人们常犯的某种特定方式来破坏该练习的代码,但除此之外,请始终将其视为一个命令来始终打破它。
常见学生问题
为什么你使用名为’snow’的变量? 实际上那不是一个变量:它只是一个包含单词snow
的字符串。一个变量不会在单引号中。
像你在练习 1 中说的那样,为每一行代码写一个英文注释是正常的吗? 不,你只需要为难以理解的代码或者为什么要这样做写注释。为什么通常更重要,然后你尝试编写代码以解释某个操作是如何完成的。然而,有时你必须编写一些糟糕的代码来解决问题,这时确实需要在每一行上写注释。在这种情况下,这仅仅是为了让你练习将代码翻译成英文。
我可以使用单引号或双引号来创建一个字符串吗?它们有不同的作用吗? 在 Python 中,用任何一种方式创建字符串都是可以接受的,尽管通常你会在像'a'
或'snow'
这样的短字符串中使用单引号。
练习 8:手动格式化字符串
现在我们将看到如何对字符串进行更复杂的格式化。这段代码看起来复杂,但如果你在每一行上面做好注释,并将每个部分分解开来,你就会理解它。
代码清单 8.1: ex8.py
1 formatter = "{} {} {} {}" 2 3 print(formatter.format(1, 2, 3, 4)) 4 print(formatter.format("one", "two", "three", "four")) 5 print(formatter.format(True, False, False, True)) 6 print(formatter.format(formatter, formatter, formatter, formatter)) 7 print(formatter.format( 8 "Try your", 9 "Own text here", 10 "Maybe a poem", 11 "Or a song about fear" 12 ))
你应该看到的内容
1 1 2 3 4 2 one two three four 3 True False False True 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 5 Try your Own text here Maybe a poem Or a song about fear
在这个练习中,我使用了一个叫做“函数”的东西,将 formatter
变量转换为其他字符串。
当你看到我写 formatter.format(...)
时,我是在告诉 Python 执行以下操作:
- 取出第 1 行定义的
formatter
字符串。 - 调用它的
format
函数,类似于告诉它执行一个名为format
的命令行命令。 - 传递给
format
四个参数,这些参数与formatter
变量中的四个{}
匹配。这就像向命令行命令format
传递参数一样。 - 在
formatter
上调用format
的结果是一个新字符串,其中的{}
被这四个变量替换。这就是print
现在打印出来的内容。
这对于第八个练习来说有点多,所以我希望你把它当作一个脑筋急转弯。如果你不是真的理解发生了什么,也没关系,因为本书的其余部分会慢慢澄清这一点。此时,请尝试研究一下这个,并看看发生了什么,然后继续下一个练习。
学习任务
重复 练习 7 中的学习任务。
常见学生问题
为什么我必须在“one”周围加引号,但不需要在 True
或 False
周围加引号? Python 将 True
和 False
视为代表真和假概念的关键字。如果你在它们周围加上引号,那么它们就会变成字符串,无法正常工作。你将在后面学到更多关于它们如何工作的知识。
我可以使用 IDLE 运行吗? 不可以,如果你知道的话,应该使用 Jupyter 或命令行。学习编程是必不可少的,如果你想学习编程,这是一个很好的起点。Jupyter 比 IDLE 是一个更优秀的工具。
练习 9:多行字符串
现在你应该意识到这本书的模式是使用多个练习来教授你新知识。我从你可能不理解的代码开始,然后更多的练习来解释概念。如果你现在不理解某些内容,随着完成更多练习,你以后会理解的。记下你不理解的内容,然后继续。
代码清单 9.1: ex9.py
1 # Here's some new strange stuff, remember type it exactly. 2 3 days = "Mon Tue Wed Thu Fri Sat Sun" 4 months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug" 5 6 print("Here are the days: ", days) 7 print("Here are the months: ", months) 8 9 print(""" 10 There's something going on here. 11 With the three double-quotes. 12 We'll be able to type as much as we like. 13 Even 4 lines if we want, or 5, or 6. 14 """)
你应该看到的内容
1 Here are the days: Mon Tue Wed Thu Fri Sat Sun 2 Here are the months: Jan 3 Feb 4 Mar 5 Apr 6 May 7 Jun 8 Jul 9 Aug 10 11 There's something going on here. 12 With the three double-quotes. 13 We'll be able to type as much as we like. 14 Even 4 lines if we want, or 5, or 6.
学习扩展
重复来自练习 7 的学习扩展。
常见学生问题
为什么我在三个双引号之间放空格时会出错? 你必须像这样输入"""
而不是" " "
, 意思是每个之间都没有空格。
如果我想要在新的一行开始月份怎么办? 你只需像这样以\n
开头的字符串:"\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
。
我的错误总是拼写错误,这是不好的吗? 大多数编程错误在开始阶段(甚至后来)都是简单的拼写错误、打字错误或者简单事情的顺序错了。
第 10 题. 字符串中的转义代码
在第 9 题中,我给你一些新东西,只是为了让你保持警惕。我向你展示了两种跨越多行的字符串的方法。在第一种方法中,我在月份名称之间放置了字符\n
(反斜杠n
)。这两个字符在该点将一个换行字符
放入字符串中。
这个\
(反斜杠)字符将难以输入的字符编码到字符串中。有各种不同的“转义序列”可用于你可能想要使用的不同字符。我们将尝试一些这些序列,这样你就能明白我的意思。
一个重要的转义序列是转义单引号'
或双引号"
。想象一下,你有一个使用双引号的字符串,而你想在字符串中放一个双引号。如果你写"我 "理解" 乔。"
,那么 Python 会感到困惑,因为它会认为"
在"理解"
周围实际上结束了字符串。你需要一种方法告诉 Python,字符串中的"
不是真正的双引号。
要解决这个问题,你需要转义双引号和单引号,这样 Python 才知道将它们包含在字符串中。这里有一个例子:
"I am 6'2\" tall." # escape double-quote inside string 'I am 6\'2" tall.' # escape single-quote inside string
解决这个问题的第二种方法是使用三引号,即"""
,它的工作方式类似于字符串,但你也可以放置任意行的文本,直到再次键入"""
。我们也会玩一下这些。
代码清单 10.1: 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)
你应该看到的内容
寻找你制作的制表符。在这个练习中,正确的间距很重要。
1 I'm tabbed in. 2 I'm split 3 on a line. 4 I'm \ a \ cat. 5 6 I'll do a list: 7 * Cat food 8 * Fishies 9 * Catnip 10 * Grass
笨办法学 Python3 第五版(预览)(一)(3)https://developer.aliyun.com/article/1483425