练习 4-6 笨办法学Python3

练习 4 变量和名字

现在你已经能用 print 打印东西了,也能用 Python 做数学计算了。接下来我们要学习变量。在编程中,变量就是给某个东西起的名字,就像“写这本书的人”名叫“Zed”一样。程序员用这些变量让代码读起来更像自然语言。如果他们不给软件里面的东西起名字,当他们再次阅读他们写的代码时就会毫无头绪。

如果你在做这个练习的时候卡住了,记得我交给你的技巧,寻找不同点,并专注细节:

  1. 在每行代码上面写上注释,跟自己解释这行代码的作用。
  2. 倒着读你的 .py 文件。
  3. 大声把你的 .py 文件读出来,字符也要读。

ex4.py

1   cars = 100
2   space_in_a_car = 4.0
3   drivers = 30
4   passengers = 90
5   cars_not_driven = cars - drivers
6   cars_driven = drivers
7   carpool_capacity = cars_driven * space_in_a_car
8   average_passengers_per_car = passengers / cars_driven     
9
10
11  print("There are", cars, "cars available.")
12  print("There are only", drivers, "drivers available.")
13  print("There will be", cars_not_driven, "empty cars today.")
14  print("We can transport", carpool_capacity, "people today.")
15  print("We have", passengers, "to carpool today.")
16  print("We need to put about", average_passengers_per_car,
17        "in each car.")
警告!
space_in_a_car 中的 _ 是下划线,我们会在以后的练习中经常用它来代替变量名之间的空格。

你会看到

练习 4 会话

$ python3.6 ex4.py
There are 100 cars available.
There are only 30 drivers available. 
There will be 70 empty cars today.
We can transport 120.0 people today. 
We have 90 to carpool today.
We need to put about 3.0 in each car.

附加练习

当我第一次写这个程序的时候我出了一个小错误,Python 是这样告诉我的:

Traceback ( most recent call last ): 
   File "ex4.py" , line 8 , in <module>
     average_passengers_per_car = car_pool_capacity / passenger 
NameError : name ' car_pool_capacity ' is not defined

用你自己的话解释这段错误信息,要用行号并解释清楚为什么。

更多附加练习:

  1. 我给 space_in_a_car 赋予了 4.0 而不是 4,小数部分有必要加吗?如果只写 4 会怎么样?
  2. 记住,4.0 是一个浮点数,浮点数就是有小数点的数字,要得到一个浮点数,你就得写成 4.0 而不是 4
  3. 给每一个变量写一些注释。
  4. 确定你知道 = 就是给一个变量名(比如cars_drivenpassengers)赋一个值(可以是数字、字符串等等)。
  5. 记住 _ 是个下划线。
  6. 像之前的练习一样把 Python3.6 当做一个计算器来运行,然后用变量名来做运算,比如用得比较多的 i、x、j 等。

常见问题

=== 有什么区别? = 把右边的值赋给左边的变量。== 用来检测左右两边的东西是不是有同样的值。你会在练习 27 中学到这块内容。

我们能把 x = 100 写成 x=100 吗? 可以,但这种格式不好,加上空格阅读体验更好。

你说的“倒着读文件”是什么意思?很简单,假如你有一个 16 行代码的文件,从第 16 行开始,和我文件中的第 16 行开始对比,然后是第 15 行等等,直到你把整个文件过完。

为什么给 space_in_a_car 赋值要用 4.0?主要是为了让你知道什么是浮点数,以及问出这个问题,可以参考附加练习。

练习 5 更多变量和打印

现在我们要输入更多的变量并把它们打印出来。这次我们将用一个叫做“格式字符串”的东西。每次你用引号把一段文本引起来,你就是在创建一个字符串。字符串是你让计算机呈现给人看的内容。你可以打印字符串、把字符串保存到文件、或者发送到网络服务器等等。

字符串真的非常方便。你将在这个练习中学习如何创建包含变量的字符串。把你需要的变量放在 {} 里面就可以把变量嵌入在字符串中。你还需要在字符串前面加上字母 f (代表 format),比如 f"Hello, {somevar}"。双引号前面的 f 是为了告诉 python3: “这个字符串需要被格式化,把这些变量放在那儿。”

同样的,输入以下内容,哪怕你不理解,确保准确无误。

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}.")

你会看到

练习 5 会话

$ python3.6 ex5.py
Let's talk about Zed A. Shaw. He's 74 inches tall.
He's 180 pounds heavy. 
Actually that's not too heavy.
He's got Blue eyes and Brown hair.
His teeth are usually White depending on the coffee. 
If I add 35, 74, and 180 I get 289.

附加练习

  1. 修改所有的变量,把前面的 my_ 删掉。要更改所有的变量名,而不只是有 = 的部分。
  2. 试着写一些变量,把英尺(inches)和英镑(pounds)换算成厘米( centimeters)和千克(kilograms),别自己直接把自己的数据进去,用 python 的数学运算来换算。

常见问题

我能创建一个这样的变量吗:1 = 'Zed Shaw'?不能,1 不是一个有效的变量名。变量名需要以字母开头,比如 a1 就可以,但 1 不行。

我如何给浮点数四舍五入取整数?你可以用 round() 函数,比如:round(1.7333)

为什么我还是不理解这些代码?试着把这些数字换成你自己的。虽然有点奇怪,但是与你自己相关能够让这些代码看起来更接地气。而且,你还刚开始学习,肯定会有不理解的地方。继续努力,再做一些练习你就会慢慢理解的。

练习 6 字符串和文本

你已经写过字符串了,但你还是不知道它们是用来干嘛的。在这个练习中,我们会创建一些包含复杂字符串的变量,让你看看它们的作用。首先解释一下字符串的含义。

字符串通常是一些你想要让你的程序呈现给别人或者”输出“出来的文本信息。当你把双引号或者单引号括在一段本文外面时,Python 就会知道你想要把这些文本变成字符串。你在学习 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 还有其他种类的格式,就像你在第 17 行看到的 .format() 语法。你还会看到当我想对一个已经创建的字符串应用一种格式的时候,我就会这样用,比如在一个循环里,我们会在后面的内容中涉及到。

我们现在要输入一整段字符串、变量和格式,然后把它们打印出来。你还会练习使用缩写作为变量名。程序员都喜欢使用简短的缩写来节省时间,但是那些缩写在你看来会十分晦涩难懂。所以我们得尽早开始学习阅读和书写这些东西。

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)

你会看到

练习 6 会话

$ python3.6 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. 复习一遍这个程序,并在每一行上面写上注释来解释它。
  2. 找到所有把字符串放在字符串里面的地方,一共有 4 处。
  3. 你确定有 4 处吗?你怎么知道?也许我爱撒谎呢。
  4. 解释一下为什么把 we 两个字符串用 + 连起来能够弄成一个更长的字符串。

把代码打乱

你现在已经可以把代码打乱了。把它当成一个游戏,用一种最聪明或者最简单的方式把代码打乱。打乱之后,你需要修复它们。如果你跟你的朋友一起学习,你们可以相互打乱对方的代码,然后再试着修复它。把你的 ex6.py 发给你的朋友,让他们打乱,然后你再试着找出它们的错误,并修复它。记住,如果你已经写了一遍这些代码了,你可以再写一次。如果你打乱得太彻底了,就试着重新写一遍。

常见问题

为什么你在一些字符串外面放的是单引号,而其他的不是?大多数是因为格式。但是如果一个字符串已经用了双引号,我就会在这个字符串里面用单引号,看看第 6 行和第 15 行你就知道了。

如果你觉得一个笑话很好笑,可以写 hilarious = True 吗?** 可以的,你会在练习 27 中学习到这些布尔值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 练习 1. 第一个程序 警告!如果你跳过了练习 0,那你就没有按照这本书的正确学习方式来。另外,也不要使用 IDL...
    爱学习的ai酱阅读 3,302评论 0 10
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,571评论 1 118
  • 我听说,有种鸡叫云雏。个头很小,成年后也就比得上刚出生的鸡仔。体轻,一身的绒毛,远看像团棉花球,伸手摸摸,更像。 ...
    新酒_阅读 198评论 0 0
  • 早上闹铃响了不想起床,磨叽一阵后想到今天是自己早起跑步的第21天,赶紧坐起来穿衣服袜子换鞋,拿上家门钥匙和手机,上...
    魏魏说阅读 158评论 0 1
  • 假如从你来到这个世界的那一天就失去光明,你会怎么办? 我,是一个拾荒者。我,也是一个盲人。我的眼睛从娘胎里一出来便...
    千叶蹁跹舞阅读 100评论 2 8