笨办法学 Python3 第五版(预览)(一)(2)

简介: 笨办法学 Python3 第五版(预览)(一)(2)

笨办法学 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.

学习扩展

  1. 将所有变量中的my_都去掉。确保你在所有地方都修改了名称,不仅仅是在使用=设置它们的地方。
  2. 尝试编写一些变量,将英寸和磅转换为厘米和千克。不要只是输入测量值。在 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.

学习扩展

  1. 浏览这个程序,并在每行上面写一个注释,解释它。
  2. 找出所有将字符串放在另一个字符串中的地方。
  3. 你确定只有四个地方吗?你怎么知道?也许我喜欢说谎。
  4. 解释为什么使用+将两个字符串we相加会得到一个更长的字符串。

破解它

现在你已经到了一个可以尝试破坏你的代码以查看结果的阶段。把这看作是一个游戏,想出最聪明的方法来破坏代码。你也可以找到最简单的方法来破坏它。一旦你破坏了代码,你就需要修复它。如果你有一个朋友,那么你们两个可以尝试破坏对方的代码并修复它。把你的代码给你的朋友,保存在一个名为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

练习

在接下来的几个练习中,你将有完全相同的练习。

  1. 回顾并对每一行写下注释。
  2. 反向阅读或大声朗读每一行,找出你的错误。
  3. 从现在开始,当你犯错时,记下你犯了什么样的错误。
  4. 当你进行下一个练习时,看看你犯过的错误,并尽量不在新的练习中犯同样的错误。
  5. 记住每个人都会犯错。程序员就像魔术师一样,让每个人都以为他们是完美的,从不犯错,但这都是表演。他们经常犯错。

拆分它

你是否在练习 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. 取出第 1 行定义的 formatter 字符串。
  2. 调用它的 format 函数,类似于告诉它执行一个名为 format 的命令行命令。
  3. 传递给 format 四个参数,这些参数与 formatter 变量中的四个 {} 匹配。这就像向命令行命令 format 传递参数一样。
  4. formatter 上调用 format 的结果是一个新字符串,其中的 {} 被这四个变量替换。这就是 print 现在打印出来的内容。

这对于第八个练习来说有点多,所以我希望你把它当作一个脑筋急转弯。如果你不是真的理解发生了什么,也没关系,因为本书的其余部分会慢慢澄清这一点。此时,请尝试研究一下这个,并看看发生了什么,然后继续下一个练习。

学习任务

重复 练习 7 中的学习任务。

常见学生问题

为什么我必须在“one”周围加引号,但不需要在 True False 周围加引号? Python 将 TrueFalse 视为代表真和假概念的关键字。如果你在它们周围加上引号,那么它们就会变成字符串,无法正常工作。你将在后面学到更多关于它们如何工作的知识。

我可以使用 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

相关文章
|
14天前
|
数据可视化 定位技术 Python
笨办法学 Python3 第五版(预览)(三)(3)
笨办法学 Python3 第五版(预览)(三)(3)
22 1
|
14天前
|
存储 Shell Ruby
笨办法学 Python3 第五版(预览)(三)(2)
笨办法学 Python3 第五版(预览)(三)(2)
23 0
|
14天前
|
存储 程序员 索引
笨办法学 Python3 第五版(预览)(二)(4)
笨办法学 Python3 第五版(预览)(二)(4)
37 1
|
14天前
|
存储 程序员 Shell
笨办法学 Python3 第五版(预览)(二)(3)
笨办法学 Python3 第五版(预览)(二)(3)
42 0
|
程序员 iOS开发 MacOS
笨办法学 Python3 第五版(预览)(一)(1)
笨办法学 Python3 第五版(预览)(一)(1)
64 1
|
5月前
|
Web App开发 前端开发 JavaScript
Python Selenium 浏览器打印预览
Python Selenium 浏览器打印预览
|
Rust 网络协议 IDE
Python语言学习路线及技术汇总预览
Rust语言是一种新型的系统编程语
83 0
Python语言学习路线及技术汇总预览
|
机器学习/深度学习 SQL 前端开发
Python语言学习路线及技术汇总预览
Python语言学习路线及技术汇总预览
122 0
Python语言学习路线及技术汇总预览
|
1天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver