練習(xí) 4 變量和名字
現(xiàn)在你已經(jīng)能用 print 打印東西了,也能用 Python 做數(shù)學(xué)計(jì)算了。接下來(lái)我們要學(xué)習(xí)變量。在編程中,變量就是給某個(gè)東西起的名字,就像“寫這本書的人”名叫“Zed”一樣。程序員用這些變量讓代碼讀起來(lái)更像自然語(yǔ)言。如果他們不給軟件里面的東西起名字,當(dāng)他們?cè)俅伍喿x他們寫的代碼時(shí)就會(huì)毫無(wú)頭緒。
如果你在做這個(gè)練習(xí)的時(shí)候卡住了,記得我交給你的技巧,尋找不同點(diǎn),并專注細(xì)節(jié):
- 在每行代碼上面寫上注釋,跟自己解釋這行代碼的作用。
- 倒著讀你的
.py文件。- 大聲把你的
.py文件讀出來(lái),字符也要讀。
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 中的 _ 是下劃線,我們會(huì)在以后的練習(xí)中經(jīng)常用它來(lái)代替變量名之間的空格。 |
你會(huì)看到
練習(xí) 4 會(huì)話
$ 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.
附加練習(xí)
當(dāng)我第一次寫這個(gè)程序的時(shí)候我出了一個(gè)小錯(cuò)誤,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
用你自己的話解釋這段錯(cuò)誤信息,要用行號(hào)并解釋清楚為什么。
更多附加練習(xí):
- 我給
space_in_a_car賦予了 4.0 而不是 4,小數(shù)部分有必要加嗎?如果只寫 4 會(huì)怎么樣?- 記住,4.0 是一個(gè)浮點(diǎn)數(shù),浮點(diǎn)數(shù)就是有小數(shù)點(diǎn)的數(shù)字,要得到一個(gè)浮點(diǎn)數(shù),你就得寫成
4.0而不是4。- 給每一個(gè)變量寫一些注釋。
- 確定你知道
=就是給一個(gè)變量名(比如cars_driven,passengers)賦一個(gè)值(可以是數(shù)字、字符串等等)。- 記住
_是個(gè)下劃線。- 像之前的練習(xí)一樣把 Python3.6 當(dāng)做一個(gè)計(jì)算器來(lái)運(yùn)行,然后用變量名來(lái)做運(yùn)算,比如用得比較多的 i、x、j 等。
常見(jiàn)問(wèn)題
= 和 == 有什么區(qū)別? = 把右邊的值賦給左邊的變量。== 用來(lái)檢測(cè)左右兩邊的東西是不是有同樣的值。你會(huì)在練習(xí) 27 中學(xué)到這塊內(nèi)容。
我們能把 x = 100 寫成 x=100 嗎? 可以,但這種格式不好,加上空格閱讀體驗(yàn)更好。
你說(shuō)的“倒著讀文件”是什么意思?很簡(jiǎn)單,假如你有一個(gè) 16 行代碼的文件,從第 16 行開(kāi)始,和我文件中的第 16 行開(kāi)始對(duì)比,然后是第 15 行等等,直到你把整個(gè)文件過(guò)完。
為什么給 space_in_a_car 賦值要用 4.0?主要是為了讓你知道什么是浮點(diǎn)數(shù),以及問(wèn)出這個(gè)問(wèn)題,可以參考附加練習(xí)。
練習(xí) 5 更多變量和打印
現(xiàn)在我們要輸入更多的變量并把它們打印出來(lái)。這次我們將用一個(gè)叫做“格式字符串”的東西。每次你用引號(hào)把一段文本引起來(lái),你就是在創(chuàng)建一個(gè)字符串。字符串是你讓計(jì)算機(jī)呈現(xiàn)給人看的內(nèi)容。你可以打印字符串、把字符串保存到文件、或者發(fā)送到網(wǎng)絡(luò)服務(wù)器等等。
字符串真的非常方便。你將在這個(gè)練習(xí)中學(xué)習(xí)如何創(chuàng)建包含變量的字符串。把你需要的變量放在 {} 里面就可以把變量嵌入在字符串中。你還需要在字符串前面加上字母 f (代表 format),比如 f"Hello, {somevar}"。雙引號(hào)前面的 f 是為了告訴 python3: “這個(gè)字符串需要被格式化,把這些變量放在那兒?!?/p>
同樣的,輸入以下內(nèi)容,哪怕你不理解,確保準(zhǔn)確無(wú)誤。
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}.")
你會(huì)看到
練習(xí) 5 會(huì)話
$ 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.
附加練習(xí)
- 修改所有的變量,把前面的
my_刪掉。要更改所有的變量名,而不只是有=的部分。- 試著寫一些變量,把英尺(inches)和英鎊(pounds)換算成厘米( centimeters)和千克(kilograms),別自己直接把自己的數(shù)據(jù)進(jìn)去,用 python 的數(shù)學(xué)運(yùn)算來(lái)?yè)Q算。
常見(jiàn)問(wèn)題
我能創(chuàng)建一個(gè)這樣的變量嗎:1 = 'Zed Shaw'?不能,1 不是一個(gè)有效的變量名。變量名需要以字母開(kāi)頭,比如 a1 就可以,但 1 不行。
我如何給浮點(diǎn)數(shù)四舍五入取整數(shù)?你可以用 round() 函數(shù),比如:round(1.7333)。
為什么我還是不理解這些代碼?試著把這些數(shù)字換成你自己的。雖然有點(diǎn)奇怪,但是與你自己相關(guān)能夠讓這些代碼看起來(lái)更接地氣。而且,你還剛開(kāi)始學(xué)習(xí),肯定會(huì)有不理解的地方。繼續(xù)努力,再做一些練習(xí)你就會(huì)慢慢理解的。
練習(xí) 6 字符串和文本
你已經(jīng)寫過(guò)字符串了,但你還是不知道它們是用來(lái)干嘛的。在這個(gè)練習(xí)中,我們會(huì)創(chuàng)建一些包含復(fù)雜字符串的變量,讓你看看它們的作用。首先解釋一下字符串的含義。
字符串通常是一些你想要讓你的程序呈現(xiàn)給別人或者”輸出“出來(lái)的文本信息。當(dāng)你把雙引號(hào)或者單引號(hào)括在一段本文外面時(shí),Python 就會(huì)知道你想要把這些文本變成字符串。你在學(xué)習(xí) print 的時(shí)候應(yīng)該多次看到這種用法了,當(dāng)你想要打印一些文本的時(shí)候,你就把這些文本放在雙引號(hào)或者單引號(hào)里面。
字符串可以包含你的 Python 腳本中任意數(shù)量的變量。記住,變量就是讓名字 = 一個(gè)值的那行代碼。在本練習(xí)的代碼中,types_of_people = 10 創(chuàng)建了一個(gè)名稱為 types_of_people,值為 10 的變量。你可以用 {types_of_people} 的形式把這個(gè)變量放到任意字符串中。你還會(huì)看到我用了格式字符串(f-string),就像這樣:
f"some stuff here { avariable }"
f"some other stuff { anothervar }"
Python 還有其他種類的格式,就像你在第 17 行看到的 .format() 語(yǔ)法。你還會(huì)看到當(dāng)我想對(duì)一個(gè)已經(jīng)創(chuàng)建的字符串應(yīng)用一種格式的時(shí)候,我就會(huì)這樣用,比如在一個(gè)循環(huán)里,我們會(huì)在后面的內(nèi)容中涉及到。
我們現(xiàn)在要輸入一整段字符串、變量和格式,然后把它們打印出來(lái)。你還會(huì)練習(xí)使用縮寫作為變量名。程序員都喜歡使用簡(jiǎn)短的縮寫來(lái)節(jié)省時(shí)間,但是那些縮寫在你看來(lái)會(huì)十分晦澀難懂。所以我們得盡早開(kāi)始學(xué)習(xí)閱讀和書寫這些東西。
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)
你會(huì)看到
練習(xí) 6 會(huì)話
$ 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.
附加練習(xí)
- 復(fù)習(xí)一遍這個(gè)程序,并在每一行上面寫上注釋來(lái)解釋它。
- 找到所有把字符串放在字符串里面的地方,一共有 4 處。
- 你確定有 4 處嗎?你怎么知道?也許我愛(ài)撒謊呢。
- 解釋一下為什么把
w和e兩個(gè)字符串用+連起來(lái)能夠弄成一個(gè)更長(zhǎng)的字符串。
把代碼打亂
你現(xiàn)在已經(jīng)可以把代碼打亂了。把它當(dāng)成一個(gè)游戲,用一種最聰明或者最簡(jiǎn)單的方式把代碼打亂。打亂之后,你需要修復(fù)它們。如果你跟你的朋友一起學(xué)習(xí),你們可以相互打亂對(duì)方的代碼,然后再試著修復(fù)它。把你的 ex6.py 發(fā)給你的朋友,讓他們打亂,然后你再試著找出它們的錯(cuò)誤,并修復(fù)它。記住,如果你已經(jīng)寫了一遍這些代碼了,你可以再寫一次。如果你打亂得太徹底了,就試著重新寫一遍。
常見(jiàn)問(wèn)題
為什么你在一些字符串外面放的是單引號(hào),而其他的不是?大多數(shù)是因?yàn)楦袷?。但是如果一個(gè)字符串已經(jīng)用了雙引號(hào),我就會(huì)在這個(gè)字符串里面用單引號(hào),看看第 6 行和第 15 行你就知道了。
如果你覺(jué)得一個(gè)笑話很好笑,可以寫 hilarious = True 嗎?** 可以的,你會(huì)在練習(xí) 27 中學(xué)習(xí)到這些布爾值。