练习 4-6 Learn Python 3 The Hard Way

练习 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 中学习到这些布尔值。

    原文作者:爱学习的ai酱
    原文地址: https://www.jianshu.com/p/f285ffb2a51b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞