練習 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 中學習到這些布爾值。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 練習 1. 第一個程序 警告!如果你跳過了練習 0,那你就沒有按照這本書的正確學習方式來。另外,也不要使用 IDL...
    愛學習的ai醬閱讀 3,339評論 0 10
  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,628評論 1 118
  • 我聽說,有種雞叫云雛。個頭很小,成年后也就比得上剛出生的雞仔。體輕,一身的絨毛,遠看像團棉花球,伸手摸摸,更像。 ...
    新酒_閱讀 215評論 0 0
  • 早上鬧鈴響了不想起床,磨嘰一陣后想到今天是自己早起跑步的第21天,趕緊坐起來穿衣服襪子換鞋,拿上家門鑰匙和手機,上...
    魏魏說閱讀 165評論 0 1
  • 假如從你來到這個世界的那一天就失去光明,你會怎么辦? 我,是一個拾荒者。我,也是一個盲人。我的眼睛從娘胎里一出來便...
    千葉蹁躚舞閱讀 112評論 2 8