練習(xí) 1-3 笨辦法學(xué)Python3

練習(xí) 1. 第一個(gè)程序

警告!
如果你跳過了練習(xí) 0,那你就沒有按照這本書的正確學(xué)習(xí)方式來。另外,也不要使用 IDLE 或者 IDE。如果你跳過了練習(xí) 0,拐回去重新學(xué)習(xí)。

你可能已經(jīng)花費(fèi)了大量時(shí)間在練習(xí) 0 上,學(xué)習(xí)如何安裝一個(gè)文本編輯器,運(yùn)行編輯器以及 Terminal,并且學(xué)習(xí)如何操作它們。如果你還沒有做這些,就不要繼續(xù),否則你會(huì)后悔的。這種練習(xí)前的警告我再說最后一次:不要擅自跳過練習(xí)自己往前學(xué)

把下面的本文輸入到一個(gè)名為 ex1.py 單個(gè)文件中,python 文件一般以 .py為后綴。

ex1.py

1   print("Hello World!")
2   print("Hello Again")
3   print("I like typing this.")
4   print("This is fun.")
5   print('Yay! Printing.')
6   print("I'd much rather you 'not'.")
7   print('I "said" do not touch this.')

你的 Atom 文本編輯器應(yīng)該看起來像這樣:

ex1-1.jpg

如果你的編輯器看起來不完全一樣也不用擔(dān)心,只要大體一致就行。

當(dāng)你敲這個(gè)文件時(shí),你得明白:

  1. 左邊這些數(shù)字不是我敲上去的,它印在書上是為了講解的時(shí)候方便說明。比如“看第 5 行...”之類,所以不要把行數(shù)敲進(jìn) Python 腳本里。
  2. 我輸出的結(jié)果跟我在練習(xí) 1 的 ex1.py 中讓你們輸入的內(nèi)容是一模一樣的,而不是大致相同。所以每一個(gè)字符你都要嚴(yán)格按照我的要求來輸入,當(dāng)然顏色無所謂。

在終端這樣輸入就可以運(yùn)行你的 Python 文件:

python3.6 ex1.py

如果你都做對了,你就會(huì)看到和我一樣的結(jié)果,如果沒有,你肯定是哪里出錯(cuò)了。不,相信我,不是電腦的問題。

你應(yīng)該看到

在 MacOS 的 Terminal 上你應(yīng)該看到這樣的結(jié)果:

ex1-2.jpg

在 Windows 的 Powershell 上你應(yīng)該看到這樣的結(jié)果:

ex1-3.jpg

你可能會(huì)在 python3.6 命令行前面看到不同的名字,這不重要,重要的是你輸入的命令要輸出跟我一樣的結(jié)果。

如果你出錯(cuò)了你可能會(huì)看到這個(gè):

$ python3.6 python/ex1.py
File "python/ex1.py" , line 3 
print (" I like typing this.
                                   ^
SyntaxError : EOL while scanning string literal

能讀懂這些錯(cuò)誤信息很重要,因?yàn)槟憬酉聛砜赡軙?huì)出現(xiàn)很多這種錯(cuò)誤,我也是。讓我們一行一行來看。

  1. 我們在 Terminal 運(yùn)行 ex1.py 腳本。
  2. Python 告訴我們 ex1.py 文件的第三行出錯(cuò)了。
  3. 它把第三行的代碼打印出來以便我們查看。
  4. 然后它放了一個(gè) ^ (插入符號)來指出哪里出了問題。注意到那個(gè)缺失的 " 了嗎?
  5. 最后,它輸出“SyntaxError”,并告訴我們可能的錯(cuò)誤信息。通常這些錯(cuò)誤信息都比較隱晦,但是如果你用搜索引擎搜索以下,你就會(huì)發(fā)現(xiàn)別人也遇到過這樣的錯(cuò)誤,然后你很可能就會(huì)找到問題的解決辦法。

課后練習(xí)

這個(gè)課后練習(xí)包括一些你應(yīng)該嘗試去做的東西,如果你不會(huì),可以先跳過,隨后再拐回來做。

對于這個(gè)練習(xí),試試以下操作:

  1. 讓你的腳本再打印出一行。
  2. 讓你的腳本只打印一行。
  3. 在任一行的開頭放一個(gè) # ,看看會(huì)發(fā)生什么?試著弄明白這個(gè)符號的作用。

從現(xiàn)在開始,我不會(huì)解釋每個(gè)練習(xí)都是如何工作的,除非遇到特殊情況。

常見問題

以下是實(shí)際學(xué)習(xí)本節(jié)練習(xí)過程中學(xué)生們經(jīng)常會(huì)問到的一些問題:

我能用 IDLE 嗎?不,你應(yīng)該用 Terminal 或者 Powershell。如果你不知道怎么用,就去學(xué)習(xí)附錄 A 的命令行速成教程。

我怎么才能像你一樣編輯代碼時(shí)有顏色?先把你的文件另存為 .py ,比如 ex1.py 。然后你在輸入的時(shí)候就會(huì)有顏色了。

我在運(yùn)行 ex1.py 時(shí)遇到了 SyntaxError:invalid syntax 提示。你很可能是已經(jīng)運(yùn)行了 Python,然后又輸了一次 python。關(guān)閉 Terminal,重新打開,然后只輸入 python3.6 ex1.py

我遇到了 can't open 'ex1.py': [Errno 2] No such file or directory. (“無法打開‘ex1.py’:[錯(cuò)誤號 2] 沒有該文件或目錄”)。你需要和你創(chuàng)建的文件在同一個(gè)目錄(文件夾)下。你要先使用 cd 命令切換到了那個(gè)目錄下。比如,如果你把你的文件保存在 lpthw/ex1.py,那你就應(yīng)該在運(yùn)行 python3.6 ex1.py 之前先用 cd lpthw/ 切換到 lpthw/ 目錄下。如果這段你看不懂,去學(xué)附錄 A 的命令行速成教程。

我的文件不運(yùn)行,我只是返回了提示符,沒有任何輸出。 你很可能以為我讓你輸入 print("Hello World!")只是讓你輸 "Hello World!"。并不是,你要完整地、一字不差地把代碼敲出來。

練習(xí) 2 注釋和井號

注釋在程序中非常重要,它們可以用自然語言告訴你某段代碼的功能時(shí)什么,還能在你想要暫時(shí)移除某段代碼時(shí)禁用程序的一部分。以下是如何在 Python 中使用注釋:

ex2.py

1   # A comment, this is so you can read your program later.
2   # Anything after the # is ignored by python. 3
4   print("I could have code like this.") # and the comment after 5
6   # You can also use a comment to "disable" or comment out code
7   # print("This won't run.") 8
9   print("This will run.")

從現(xiàn)在開始,我都會(huì)這樣寫代碼。你得明白不是所有的東西都得在字面上保持一致,你的屏幕和程序可能看起來跟我的不一樣,但是只要你在編輯器里輸入的文本一樣就行。事實(shí)上,我用任何文本編輯器都可以輸出同樣的結(jié)果。

你應(yīng)該看到

練習(xí) 2 會(huì)話

$ python3.6 ex2.py
I could have code like this. This will run.

再說一次,我之后可能不會(huì)將所有的截圖都貼出來,你得明白第一個(gè) $ 和最后一個(gè) $ 之間的內(nèi)容才是你應(yīng)該關(guān)注的。

課后練習(xí)

  1. 弄清楚 # 符號的作用,而且記住它的名字。(中文為井號,英文為 octothorpe 或者 pound character)。
  2. 打開你的 ex2.py 文件,從后往前逐行檢查每個(gè)單詞,與要求輸入的內(nèi)容進(jìn)行對比。
  3. 有沒有發(fā)現(xiàn)什么錯(cuò)誤?有的話就改正過來.
  4. 讀你寫的習(xí)題,把每個(gè)字符都讀出來。有沒有發(fā)現(xiàn)更多錯(cuò)誤?有的話改正過來。

常見問題

為什么在 print("Hi # there.")# 就沒有被忽略? 因?yàn)? # 在一個(gè)字符串里,計(jì)算機(jī)會(huì)打印引號之間字符串的所有內(nèi)容, # 在字符串里被認(rèn)為是一個(gè)字符,而不是注釋符號。

我如何把很多行變成注釋? 在每一行前面加一個(gè) #

為什么我要倒著檢查代碼? 這是一個(gè)讓你的大腦不專注于每行代碼意思的小技巧,這樣做能夠讓你更準(zhǔn)確地檢查出錯(cuò)誤,可以說是一個(gè)很好用的糾錯(cuò)技巧了。

練習(xí) 3 數(shù)字和數(shù)學(xué)

每一種編程語言都得和數(shù)字、數(shù)學(xué)打交道。不用擔(dān)心:程序員總是自詡為數(shù)學(xué)天才,其實(shí)事實(shí)并非如此。如果他們是數(shù)學(xué)天才,他們就會(huì)去研究數(shù)學(xué),而不是去寫那些 bug 連篇的網(wǎng)站框架以便能開上豪車。

這個(gè)練習(xí)包含了很多數(shù)學(xué)符號。讓我們看看它們的名字,在你輸入的時(shí)候,試著說出名字,直到你爛熟于心為止。以下是這些符號的名字:

? + plus,加號
? - minus,減號
? / slash,斜杠
? * asterisk,星號
? % percent,百分號
? < less-than,小于號
? > greater-than,大于號
? <= less-than-equal,小于等于號
? >= greater-than-equal,大于等于號

有沒有注意到以上只是些符號,沒有運(yùn)算操作呢?寫完下面的練習(xí)代碼后,再回到上面的列表,弄明白每個(gè)符號的作用。例如 + 是用來做加法運(yùn)算的。

ex3.py

1   print("I will now count my chickens:")
2
3   print("Hens", 25 + 30 / 6)
4   print("Roosters", 100 - 25 * 3 % 4)
5
6   print("Now I will count the eggs:") 
7
8   print(3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6)
9
10  print("Is it true that 3 + 2 < 5 - 7?") 
11
12  print(3 + 2 < 5 - 7)
13
14  print("What is 3 + 2?", 3 + 2)
15  print("What is 5 - 7?", 5 - 7)
16
17  print("Oh, that's why it's False.") 
18
19  print("How about some more.") 
20
21  print("Is it greater?", 5 > -2)
22  print("Is it greater or equal?", 5 >= -2)
23  print("Is it less or equal?", 5 <= -2)

確保你在運(yùn)行它之前準(zhǔn)確輸入了每一行代碼,和我的要求做一下對比檢查。

你應(yīng)該看到

練習(xí) 3 會(huì)話

$ python3.6 ex3.py
I will now count my chickens: Hens 30.0
Roosters 97
Now I will count the eggs: 6.75
Is it true that 3 + 2 < 5 - 7? False
What is 3 + 2? 5
What is 5 - 7? -2
Oh, that's why it's False. How about some more.
Is it greater? True
Is it greater or equal? True

Is it less or equal? False

課后練習(xí)

  1. 在每一行上面,用 # 寫一句注釋,向自己解釋這行代碼的作用。
  2. 還記得你在練習(xí) 0 中是如何啟動(dòng) Python 3.6 的嗎?再次啟動(dòng)它,把 Python 當(dāng)成一個(gè)計(jì)算器來做一些數(shù)學(xué)運(yùn)算。
  3. 找一些你需要計(jì)算的東西,然后寫一個(gè)新的 .py 文件。
  4. 用浮點(diǎn)數(shù)重新寫一下 ex3.py,讓它更精確一些,比如 20.0 就是一個(gè)浮點(diǎn)數(shù)。

常見問題

為什么 % 是一個(gè)模數(shù),而不是百分比? 這很可能只是設(shè)計(jì)者們選用的一個(gè)符號。在正常情況下你可以把它讀作百分號,但是,在編程中 % 只是一個(gè)符號。

% 是如何工作的? 可以這樣講,x 除以 y 余 J。比如 100 除以 16 余 4,% 求的就是余數(shù) J。

運(yùn)算順序是怎樣的? 在美國我們遵循 PEMDAS 規(guī)則,即“括號,指數(shù),乘,除,加,減(Parentheses Exponents Multiplication Division Addition Subtraction)。Python 也遵循這樣的規(guī)則。很多人對 PEMDAS 規(guī)則存在誤解,認(rèn)為它們是嚴(yán)格按照先后次序來的,其實(shí)并不是,乘除是同時(shí)的,加減也是同時(shí)的,所以這個(gè)規(guī)則可能寫成 PE(M&D)(A&S) 更合適。

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