練習(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)該看起來像這樣:
如果你的編輯器看起來不完全一樣也不用擔(dān)心,只要大體一致就行铭污。
當(dāng)你敲這個(gè)文件時(shí)恋日,你得明白:
- 左邊這些數(shù)字不是我敲上去的膀篮,它印在書上是為了講解的時(shí)候方便說明。比如“看第 5 行...”之類岂膳,所以不要把行數(shù)敲進(jìn) Python 腳本里誓竿。
- 我輸出的結(jié)果跟我在練習(xí) 1 的
ex1.py
中讓你們輸入的內(nèi)容是一模一樣的,而不是大致相同谈截。所以每一個(gè)字符你都要嚴(yán)格按照我的要求來輸入筷屡,當(dāng)然顏色無所謂。
在終端這樣輸入就可以運(yùn)行你的 Python 文件:
python3.6 ex1.py
如果你都做對(duì)了傻盟,你就會(huì)看到和我一樣的結(jié)果速蕊,如果沒有,你肯定是哪里出錯(cuò)了娘赴。不规哲,相信我,不是電腦的問題诽表。
你應(yīng)該看到
在 MacOS 的 Terminal 上你應(yīng)該看到這樣的結(jié)果:
在 Windows 的 Powershell 上你應(yīng)該看到這樣的結(jié)果:
你可能會(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ò)誤,我也是泛啸。讓我們一行一行來看绿语。
- 我們?cè)?Terminal 運(yùn)行
ex1.py
腳本。- Python 告訴我們
ex1.py
文件的第三行出錯(cuò)了候址。- 它把第三行的代碼打印出來以便我們查看吕粹。
- 然后它放了一個(gè)
^
(插入符號(hào))來指出哪里出了問題。注意到那個(gè)缺失的"
了嗎岗仑?- 最后匹耕,它輸出“SyntaxError”,并告訴我們可能的錯(cuò)誤信息荠雕。通常這些錯(cuò)誤信息都比較隱晦稳其,但是如果你用搜索引擎搜索以下,你就會(huì)發(fā)現(xiàn)別人也遇到過這樣的錯(cuò)誤炸卑,然后你很可能就會(huì)找到問題的解決辦法既鞠。
課后練習(xí)
這個(gè)課后練習(xí)包括一些你應(yīng)該嘗試去做的東西,如果你不會(huì)盖文,可以先跳過嘱蛋,隨后再拐回來做。
對(duì)于這個(gè)練習(xí),試試以下操作:
- 讓你的腳本再打印出一行浑槽。
- 讓你的腳本只打印一行蒋失。
- 在任一行的開頭放一個(gè)
#
,看看會(huì)發(fā)生什么桐玻?試著弄明白這個(gè)符號(hào)的作用篙挽。
從現(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ò)誤號(hào) 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 注釋和井號(hào)
注釋在程序中非常重要庇绽,它們可以用自然語言告訴你某段代碼的功能時(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í)
- 弄清楚
#
符號(hào)的作用趟妥,而且記住它的名字猫态。(中文為井號(hào),英文為 octothorpe 或者 pound character)披摄。- 打開你的
ex2.py
文件懂鸵,從后往前逐行檢查每個(gè)單詞,與要求輸入的內(nèi)容進(jìn)行對(duì)比行疏。- 有沒有發(fā)現(xiàn)什么錯(cuò)誤匆光?有的話就改正過來.
- 讀你寫的習(xí)題,把每個(gè)字符都讀出來酿联。有沒有發(fā)現(xiàn)更多錯(cuò)誤终息?有的話改正過來。
常見問題
為什么在 print("Hi # there.")
里 #
就沒有被忽略贞让? 因?yàn)? #
在一個(gè)字符串里周崭,計(jì)算機(jī)會(huì)打印引號(hào)之間字符串的所有內(nèi)容, #
在字符串里被認(rèn)為是一個(gè)字符喳张,而不是注釋符號(hào)续镇。
我如何把很多行變成注釋? 在每一行前面加一個(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é)符號(hào)。讓我們看看它們的名字杰捂,在你輸入的時(shí)候社露,試著說出名字,直到你爛熟于心為止琼娘。以下是這些符號(hào)的名字:
?
+
plus峭弟,加號(hào)
?-
minus,減號(hào)
?/
slash脱拼,斜杠
?*
asterisk瞒瘸,星號(hào)
?%
percent,百分號(hào)
?<
less-than熄浓,小于號(hào)
?>
greater-than情臭,大于號(hào)
?<=
less-than-equal,小于等于號(hào)
?>=
greater-than-equal赌蔑,大于等于號(hào)
有沒有注意到以上只是些符號(hào)俯在,沒有運(yùn)算操作呢?寫完下面的練習(xí)代碼后娃惯,再回到上面的列表跷乐,弄明白每個(gè)符號(hào)的作用。例如 +
是用來做加法運(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)確輸入了每一行代碼愕提,和我的要求做一下對(duì)比檢查。
你應(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í)
- 在每一行上面皿哨,用
#
寫一句注釋浅侨,向自己解釋這行代碼的作用。- 還記得你在練習(xí) 0 中是如何啟動(dòng) Python 3.6 的嗎证膨?再次啟動(dòng)它如输,把 Python 當(dāng)成一個(gè)計(jì)算器來做一些數(shù)學(xué)運(yùn)算。
- 找一些你需要計(jì)算的東西央勒,然后寫一個(gè)新的
.py
文件不见。- 用浮點(diǎn)數(shù)重新寫一下
ex3.py
,讓它更精確一些订歪,比如 20.0 就是一個(gè)浮點(diǎn)數(shù)脖祈。
常見問題
為什么 %
是一個(gè)模數(shù)肆捕,而不是百分比刷晋? 這很可能只是設(shè)計(jì)者們選用的一個(gè)符號(hào)。在正常情況下你可以把它讀作百分號(hào),但是眼虱,在編程中 %
只是一個(gè)符號(hào)喻奥。
%
是如何工作的? 可以這樣講捏悬,x 除以 y 余 J撞蚕。比如 100 除以 16 余 4,%
求的就是余數(shù) J过牙。
運(yùn)算順序是怎樣的甥厦? 在美國我們遵循 PEMDAS 規(guī)則,即“括號(hào)寇钉,指數(shù)刀疙,乘,除扫倡,加谦秧,減(Parentheses Exponents Multiplication Division Addition Subtraction)。Python 也遵循這樣的規(guī)則撵溃。很多人對(duì) PEMDAS 規(guī)則存在誤解疚鲤,認(rèn)為它們是嚴(yán)格按照先后次序來的,其實(shí)并不是缘挑,乘除是同時(shí)的集歇,加減也是同時(shí)的,所以這個(gè)規(guī)則可能寫成 PE(M&D)(A&S)
更合適语淘。