《HeadFirst Python》第一章学习笔记
對于Python初學(xué)者來說,舍得強(qiáng)烈推薦從《HeadFirst Python》開始讀起,這本書當(dāng)真做到了深入淺出,HeadFirst系列,本身亦是品質(zhì)的保證。這本書舍得已在《Python起步:寫給零編程基礎(chǔ)的童鞋》一文中提供了下載。為了方便大家的學(xué)習(xí),舍得特意制作了Jupyter Notebook格式的筆記,文章末尾舍得提供了筆記的下載地址。
讀《HeadFirst Python》的同時(shí),最緊要的是及時(shí)做練習(xí),你甚至可以在快速瀏覽過一章后,便拿起練習(xí)來做。
做練習(xí)的時(shí)候,切記,不要用書中建議的Python自帶的IDLE。作為過來人,舍得的建議是使用Jupyter Notobook。具體的安裝方法舍得已在《Python起步:寫給零編程基礎(chǔ)的童鞋》中講得很清楚了,每次你要練習(xí)的時(shí)候,運(yùn)行jupyter-notebook.exe,便可以在程序打開的瀏覽器頁面中進(jìn)行代碼輸入了。Jupyter Notobook與Python自帶的IDLE相比,有著巨大的優(yōu)勢:
- 增強(qiáng)版的代碼自動(dòng)補(bǔ)全:輸入代碼過程中,可嘗試按Tab鍵,程序會(huì)提示相應(yīng)的代碼;
- 每次錄入的代碼程序會(huì)自動(dòng)替你保存下來,這就相當(dāng)于你自己的學(xué)習(xí)筆記,你可以在代碼的前或后加入注釋,注釋前面用一個(gè)“#”+一個(gè)空格(空格可以不加,但舍得建議從一開始便養(yǎng)成良好的寫代碼習(xí)慣,#后帶空格是Python代碼規(guī)范-PEP8的要求)就可以了;
- Notebook給你保存的筆記,你可以隨時(shí)打開,點(diǎn)RUN按鈕(或用Alt+Enter快捷鍵)便可以運(yùn)行選擇中的某一段代碼,這是Python自帶的IDLE根本無法做到的事情;
- 在Notebook中你可以極為方便地輸入多行代碼,而Python自帶的IDLE在這方面有極大的限制;
- 對于顏控來說,Notebook的代碼著色看起來更加舒服一些;
- ……
舍得會(huì)將書中每一章中提到的大部分練習(xí),收錄到筆記中,你可以在看完一章后,拿舍得給你的筆記,在Jupyter Notebook中進(jìn)行練習(xí)。當(dāng)然你也可以在看到書出給出一段代碼時(shí),立刻在Jupyter Notobook中輸入并運(yùn)行。
舍得提供的筆記是ipynb格式(ipy是指ipython, Notebook是用ipython來實(shí)現(xiàn)的。而nb則是notebook的縮寫),當(dāng)你下載了筆記之后,請將其放到“你的python安裝文件夾(默認(rèn)是c:\python34)\Scripts”文件夾下,然后刷新一下瀏覽器中Jupyter Notebook的首頁,便可以看到這個(gè)筆記,點(diǎn)擊該筆記,就可以瀏覽了。
如果你在Jupyter Notebook首頁中已經(jīng)點(diǎn)擊過“New->Python 3”, 那么你可以使用菜單”File->Open“回到首頁選擇舍得提供的筆記。
下面舍得開始講解第一章的要點(diǎn)。
文中”[in]:“后面的內(nèi)容,表示我們在Jupyter Notebook中輸入的代碼和注釋,內(nèi)容中以”# “開頭的,是舍得的注釋。
”[out]:“后面的內(nèi)容,則是代碼執(zhí)行后的輸出結(jié)果。
舍得在注釋中,標(biāo)明了該段代碼的頁碼,方便你對照書本進(jìn)行練習(xí)。書中有些內(nèi)容的講解比舍得更詳細(xì)。
舍得對部分代碼進(jìn)行了改寫,但不影響代碼的最終效果。
[in]:
??? # 熟愁一下打印命令.
??? # 第一章 p4
??? # 內(nèi)容前面加一個(gè)#號表示注釋, python會(huì)自動(dòng)忽略#號后面的內(nèi)容
??? if 43 > 42:
??????? print("Don't panic!")
[out]:
??? Don't panic!
???
[in]:
??? # 創(chuàng)建簡單的Python列表
??? # 第一章 p8
??? # 標(biāo)識(shí)符:movies, 你給這個(gè)列表起的名字
??? # 操作符:=,把列表賦給標(biāo)識(shí)符
??? # 列表格式:兩端用中括號;列表中每一項(xiàng)用逗號隔開;電影名稱兩邊加引號;
??? movies = ["The Holy Grail",
???????????? "The Life of Brian",
???????????? "The Meaning of Life"]
??? print(movies)
[out]:
??? ['The Holy Grail', 'The Life of Brian', 'The Meaning of Life']
???
[in]:
??? # 用中括號記法訪問列表
??? # 第一章 p9
??? # 打印列表中第2個(gè)數(shù)據(jù)(第1個(gè)為0)
??? print(movies[1])
[out]:
??? The Life of Brian
???
[in]:
??? # 列表深入學(xué)習(xí):len
??? # 第一章 p10
??? # len:獲取列表長度,即列表有幾個(gè)數(shù)據(jù)項(xiàng)
??? cast = ["Cleese", 'Plain', 'Jones',"Idle"]
??? print(cast)
??? print(len(cast))
??? print(cast[0])? # 0表示第一個(gè)數(shù)據(jù)項(xiàng), 你可以自己換不同的數(shù)字嘗試一下
[out]:
??? ['Cleese', 'Plain', 'Jones', 'Idle']
??? 4
??? Cleese
???
[in]:
??? # 列表深入學(xué)習(xí):append
??? # 第一章 p10
??? # append:在列表末尾增加一項(xiàng)數(shù)據(jù)
??? cast.append("Gillianm")
??? print(cast)
[out]:
??? ['Cleese', 'Plain', 'Jones', 'Idle', 'Gillianm']
???
[in]:
??? # 列表深入學(xué)習(xí):pop
??? # 第一章 p10
??? # pop:從列表末尾刪除數(shù)據(jù)
??? cast.pop()
[out]:
??? 'Gillianm'
[in]:
??? # 再打印一下,看看有何變化
??? print(cast)
[out]:
??? ['Cleese', 'Plain', 'Jones', 'Idle']
???
[in]:
??? # 列表深入學(xué)習(xí):extend
??? # 第一章 p10
??? # extend:在列表末尾增加一個(gè)列表(兩個(gè)列表合并)
??? cast.extend(["Gillianm", "Chapman"])
??? print(cast)
[out]:
??? ['Cleese', 'Plain', 'Jones', 'Idle', 'Gillianm', 'Chapman']
???
[in]:
??? # 列表深入學(xué)習(xí):remove
??? # 第一章 p10
??? # remove:在列表中找到并刪除一個(gè)特定的數(shù)據(jù)項(xiàng)
??? cast.remove("Chapman")
??? print(cast)
[out]:
??? ['Cleese', 'Plain', 'Jones', 'Idle', 'Gillianm']
???
[in]:
??? # 列表深入學(xué)習(xí):insert
??? # 第一章 p10
??? # insert:在列表中特定的位置前增加一個(gè)數(shù)據(jù)項(xiàng)
??? cast.insert(0, "Chapman")? # 0表示插入在最前面,你可以試試其它的數(shù)字
??? print(cast)
[out]:
??? ['Chapman', 'Cleese', 'Plain', 'Jones', 'Idle', 'Gillianm']
???
[in]:
??? # 習(xí)題
??? # 第一章 p13
??? # 把每部電影的出品年代加到列表中
??? # 象下面這樣: ['The Holy Grail', 1975, 1975, 1979,
??? # 'The Life of Brian', 1979, 'The Meaning of Life', 1983, 1983]
??? # 把數(shù)字放進(jìn)列表的時(shí)候,數(shù)字不用加引號
??? movies.insert(1, 1975)? # 第1個(gè)插入到第2個(gè)列表項(xiàng)前
??? movies.insert(3, 1979)? # 第2個(gè)插入到第4個(gè)列表項(xiàng)前(好好想想為什么用3)
??? movies.append(1983)? # 最后一個(gè)追加到末尾就行
??? print(movies)
[out]:
??? ['The Holy Grail', 1975, 'The Life of Brian', 1979, 'The Meaning of Life', 1983]
???
[in]:
??? # 列表: 迭代
??? # 第一章 p15
??? # 迭代: 用一個(gè)for循環(huán),把列表中所有的項(xiàng)逐個(gè)打印出來
??? # for ... in ...表示取這個(gè)列表的每一個(gè)數(shù)據(jù)
??? for i in movies:? # 這里的i隨便用哪個(gè)(一個(gè)或多個(gè))字母都行
??????? print(i)? # 只要兩個(gè)i保持一致.你可以試試用不同的字母
[out]:
??? The Holy Grail
??? 1975
??? The Life of Brian
??? 1979
??? The Meaning of Life
??? 1983
???
[in]:
??? # 列表: 迭代
??? # 第一章 p16
??? # 迭代: 用一個(gè)while循環(huán),把列表中所有的項(xiàng)逐個(gè)打印出來
??? # 效果和for循環(huán)一樣
??? # while xx < xxx表示:只要xx < xxx,就一直執(zhí)行下去, 直到這個(gè)條件不成立
??? count = 0
??? while count < len(movies):? # 前面剛學(xué)過的len用法
??????? print(movies[count])? # 前面剛學(xué)過的中括號記法
??????? count += 1? # 和書本上的count = count + 1相同, 表示讓count自增1
[in]:
??? # 列表:在列表中儲(chǔ)存列表
??? # 第一章 p18
??? # 我們用movies這個(gè)列表來記錄一部電影的數(shù)據(jù). The Holy Grail這部電影全名叫
??? # 《Monty Python and the Holy Grail》(巨蟒與圣杯),1975年出品,兩個(gè)Terry是導(dǎo)演,
??? # 同時(shí)也參加了演出。影片時(shí)長為91分鐘,Chapman是編劇(同時(shí)也是主演)。Michael這
??? # 一伙人既是編劇,亦是配角。這幫人真是玩嗨了,自編自導(dǎo)自演。
??? movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
????????????? ["Graham Chapman", ["Michael Palin", "John Clseese",
??????????????????????????????? "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
??? print(movies)
[out]:
??? ['The Holy Grail', 1975, 'Terry Jones & Terry Gilliam', 91, ['Graham Chapman', ['Michael Palin', 'John Clseese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones']]]
???
[in]:
??? # 用for循環(huán)處理這個(gè)列表
??? for i in movies:
??????? print(i)
[out]:
??? The Holy Grail
??? 1975
??? Terry Jones & Terry Gilliam
??? 91
??? ['Graham Chapman', ['Michail Palin', 'John Clseese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones']]
???
[in]:
??? # 列表:在列表中查找列表
??? # 第一章 p20
??? # isinstance: 判斷標(biāo)識(shí)符的類型
??? names = ['Michael', 'Terry']
??? isinstance(names, list)? # 判斷它是不是列表(list)類型
???
[out]:
??? True
[in]:
??? # 列表:在列表中查找列表
??? # 第一章 p20
??? # isinstance: 判斷標(biāo)識(shí)符的類型
??? # 換個(gè)方式
??? num_names = len(names)
??? isinstance(num_names, list)
[out]:
??? False
[in]:
??? # 列表:在列表中查找列表
??? # 第一章 p21
??? # 習(xí)題: 把上面那個(gè)movies列表中的每一個(gè)數(shù)據(jù)項(xiàng)都打印出來
??? # 用if ... else ...模式
??? # 結(jié)合isinstance
??? for i in movies:
??????? if isinstance(i, list):? # 先判斷i是不是列表
??????????? for j in i:? # 是的話用for循環(huán)
??????????????? if isinstance(j, list):? # 還要再往下挖一層, 因?yàn)檫€有一個(gè)嵌套的列表
??????????????????? for k in j:
??????????????????????? print(k)
??????????????? else:? # 每一對if...else...要對齊
??????????????????? print(j)
??????? else:? # 不是列表就直接打印
??????????? print(i)
??? # 如果再來一層嵌套的列表, 怎么辦?
[out]:
??? The Holy Grail
??? 1975
??? Terry Jones & Terry Gilliam
??? 91
??? Graham Chapman
??? Michail Palin
??? John Clseese
??? Terry Gilliam
??? Eric Idle
??? Terry Jones
???
[in]:
??? # 函數(shù)
??? # 第一章 p30
??? # 使用函數(shù)可以簡化剛才寫的那段代碼, 再多來幾層列表咱也不怕啦!
??? # def關(guān)鍵字是define的縮寫,python看到def就知道這個(gè)是函數(shù)
??? def print_lol(the_list):? # print_lol就是我們定義的函數(shù)名,盡可能把名字起得有意義一點(diǎn)
??????? for i in the_list:
??????????? if isinstance(i, list):
??????????????? print_lol(i)? # 如果是列表, 那么調(diào)用"自己"再次處理這個(gè)列表
??????????? else:
??????????????? print(i)
[in]:
??? # 函數(shù)
??? # 第一章 p30
??? # 我們來用print_lol這個(gè)函數(shù)來打印我們的列表movies
??? print_lol(movies)? # 看看,代碼是不是精簡了很多?
[out]:
??? The Holy Grail
??? 1975
??? Terry Jones & Terry Gilliam
??? 91
??? Graham Chapman
??? Michail Palin
??? John Clseese
??? Terry Gilliam
??? Eric Idle
??? Terry Jones
???
第一章完。
本文筆記下載地址:
鏈接:http://pan.baidu.com/s/1eR4iJoI 密碼:t72j
本文版權(quán)歸舍得學(xué)苑所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者和出處。謝謝!
作者:舍得
首發(fā):舍得新浪博客
轉(zhuǎn)載于:https://blog.51cto.com/emagic/1882376
總結(jié)
以上是生活随笔為你收集整理的《HeadFirst Python》第一章学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数模板特化(一)
- 下一篇: Python的函数参数传递:传值?引用?