笨辦法學 Python (Learn Python The Hard Way)中文版
習題 0: 準備工作
總有一天你會聽到有程序員建議你使用 Mac OSX 或者 Linux。如果他喜歡字體美觀,他會告訴你讓你弄臺 Mac OSX 計算機,如果他們喜歡操作控制而且留了一部大胡子,他會讓你安裝 Linux。這里再次向你說明,只要是一臺手上能用的電腦就可以了。你需要的只有三樣東西: gedit、一個命令行終端、還有python。
習題 1: 第一個程序
學會看調試錯誤
這些內容你應該學會看懂的,這是很重要的一點,因為你以后還會犯類似的錯誤。就是我現在也會犯這樣的錯誤。讓我們一行一行來看。
python
- 會打印出錯誤的行
- 指示錯誤的地方
- 指示錯誤的類型
習題 2: 注釋和井號
程序里的注釋是很重要的。它們可以用自然語言告訴你某段代碼的功能是什么。
在你想要臨時移除一段代碼時,你還可以用注解的方式將這段代碼臨時禁用.
習題 3: 數字和數學計算
每一種編程語言都包含處理數字和進行數學計算的方法。不必擔心,程序員經常撒謊說他們是多么牛的數學天才,其實他們根本不是。
如果他們真是數學天才,他們早就去從事數學相關的行業了,而不是寫寫廣告程序和社交網絡游戲,從人們身上偷賺點小錢而已。
習題 4: 變量(variable)和命名
在編程中,變量只不過是用來指代某個東西的名字。
程序員通過使用變量名可以讓他們的程序讀起來更像英語。
而且因為程序員的記性都不怎么地.
變量名可以讓他們更容易記住程序的內容。如果他們沒有在寫程序時使用好的變量名,在下一次讀到原來寫的代碼時他們會大為頭疼的
習題 5: 更多的變量和打印
- 格式化字符串(format string)
- 試著使用更多的格式化字符。例如 %r 就是是非常有用的一個,它的含義是“不管什么都打印出來”。
習題 6: 字符串(string)和文本
字符串可以包含格式化字符 %s,這個你之前也見過的。你只要將格式化的變量放到字符串中,再緊跟著一個百分號 % (percent),再緊跟著變量名即可。
唯一要注意的地方,是如果你想要在字符串中通過格式化字符放入多個變量的時候,你需要將變量放到 ( ) 圓括號(parenthesis)中,而且變量之間用 ,逗號(comma)隔開。就像你逛商店說“我要買牛奶、面包、雞蛋、八寶粥”一樣,只不過程序員說的是”(milk, eggs, bread, soup)”。
習題 7: 更多打印
- 從現在開始,把你的錯誤記錄下來,寫在一張紙上。
- 在開始下一節習題時,閱讀一遍你記錄下來的錯誤,并且盡量避免在下個練習中再犯同樣的錯誤。
- 記住,每個人都會犯錯誤。程序員和魔術師一樣,他們希望大家認為他們從不犯錯,不過這只是表象而已,他們每時每刻都在犯錯。
習題 8: 打印,打印
習題 9: 打印,打印,打印
習題 10: 那是什么
- 使用反斜杠 \ (back-slash) 可以將難打印出來的字符放到字符串。針對不同的符號有很多這樣的所謂“轉義序列(escape sequences)”.
- 但有一個特殊的轉義序列,就是 **雙反斜杠(double back-slash) \\ **。這兩個字符組合會打印出一個反斜杠來.
tabby_cat = "\tI'm tabbed in." #\t制表符
persian_cat = "I'm split\non a line." #\n換行符
backslash_cat = "I'm \\ a \\ cat." #2個\\顯示1個\
fat_cat = """
I'll do a list:
\t* Cat food
\t* Fishies
\t* Catnip\n\t* Grass
"""
print tabby_cat
print persian_cat
print backslash_cat
print fat_cat
輸出:
I'm tabbed in.
I'm split
on a line.
I'm \ a \ cat.
I'll do a list:
* Cat food
* Fishies
* Catnip
* Grass
習題 11: 提問
一般軟件做的事情主要就是下面幾條:
- 接受人的輸入。
- 改變輸入。
- 打印出改變了的輸入。
注意到我在每行 print 后面加了個逗號(comma) , 了吧?這樣的話 print 就不會輸出新行符而結束這一行跑到下一行去了。
習題 12: 提示別人
習題 13: 參數、解包、變量
- 在第 1 行我們有一個“import”語句. 這是你將 python 的功能引入你的腳本的方法.
- Python 不會一下子將它所有的功能給你,而是讓你需要什么就調用什么。
- 這樣可以讓你的程序保持精簡,而后面的程序員看到你的代碼的時候,這些“import”可以作為提示,讓他們明白你的代碼用到了哪些功能。
from sys import argv
script, first, second, third = argv
print ("The script is called:") , script
print ("Your first variable is:") , first
print ("Your second variable is:") , second
print ("Your third variable is:") , third
在pycharm里面運行命令行:
Run/Debug Configurations->Configurations->Script Parames
輸出:
The script is called:
F:/2???/python/nesterjerrychan/chapter6/learnhardway/test.py
Your first variable is: first
Your second variable is: second
Your third variable is: third
習題 14: 提示和傳遞
習題 15: 讀取文件
我使用了“命令”這個詞,不過實際上它們的名字是“函數(function)”和“方法(method)。上網搜索一下這兩者的意義和區別。看不明白也沒關系,迷失在別的程序員的知識海洋里是很正常的一件事情。
習題 16: 讀寫文件
- close – 關閉文件。跟你編輯器的 文件->保存.. 一個意思。
- read – 讀取文件內容。你可以把結果賦給一個變量。
- readline – 讀取文本文件中的一行。
- truncate – 清空文件,請小心使用該命令。
- write(stuff) – 將stuff寫入文件。
習題 17: 更多文件操作
文本1--->復制文本--->文本2
為什么每次需要output.close()?
1.把文件想象成信件就可以了,打開信封才能取出信紙,把信紙放入信封還要封好,不然隨時可能掉出來.
2.如果沒有close(),寫入的內容可能會存在緩沖區中,并沒有真正的寫入文件里。
3.close()是為了釋放資源。
如果不close(),那就要等到垃圾回收時,自動釋放資源。垃圾回收的時機是不確定的,也無法控制的。
如果程序是一個命令,很快就執行完了,那么可能影響不大(注意:并不是說就保證沒問題)。
但如果程序是一個服務,或是需要很長時間才能執行完,或者很大并發執行,就可能導致資源被耗盡,也有可能導致死鎖。
習題 18: 命名、變量、代碼、函數
函數可以做三樣事情:
- 它們給代碼片段命名,就跟“變量”給字符串和數字命名一樣。
- 它們可以接受參數,就跟你的腳本接受 argv一樣。
- 通過使用 #1 和 #2,它們可以讓你創建“微型腳本”或者“小命令”。
創建函數過程:
- 告訴 Python 創建一個函數,def ,也就是“定義(define)”的意思。
- 緊接著 def 的是函數的名稱。但最好函數的名稱能夠體現出函數的功能來。
習題 19: 函數和變量
函數里邊的變量和腳本里邊的變量之間是沒有連接的
習題 20: 函數和文件
習題 21: 函數可以返回東西
習題 22: 到現在你學到了哪些東西?
做這節練習沒有失敗,只有嘗試,請牢記這一點。
習題 23: 讀代碼
習題 24: 更多練習
老程序員的建議
在這么久的旅程下來我的體會是:編程語言這東西并不重要,重要的是你用這些語言做的事情。事實上我一直知道這一點,不過以前我會周期性地被各種編程語言分神而忘記了這一點。現在我是永遠不會忘記這一點了,你也不應該忘記這一點。
你學到和用到的編程語言并不重要。不要被圍繞某一種語言的宗教把你扯進去,這只會讓你忘掉了語言的真正目的,也就是作為你的工具來實現有趣的事情。
編程作為一項智力活動,是唯一一種能讓你創建交互式藝術的藝術形式。你可以創建項目讓別人使用,而且你可以間接地和使用者溝通。沒有其他的藝術形式能做到如此程度的交互性。電影領著觀眾走向一個方向,繪畫是不會動的。而代碼卻是雙向互動的。
技術公司里邊會編程的人多到一毛錢一打,根本得不到什么尊敬。而在生物學、醫藥學、政府部門、社會學、物理學、數學等行業領域從事編程的人就能得到足夠的尊敬,而且你可以使用這項技能在這些領域做出令人驚異的成就。