第一章? 用編程改造世界
第二章? 先做鍵盤俠
第三章? 過程大于結(jié)果
第一章 用編程改造世界
1.1 從計(jì)算機(jī)到編程
·馮.諾伊曼結(jié)構(gòu)
」逄辏控制器:管理計(jì)算機(jī)其他部分的工作仇穗,決定執(zhí)行指令的順序腮郊,控制不同部件之間的數(shù)據(jù)交流
狱庇。運(yùn)算器:進(jìn)行運(yùn)算的部件宁赤,進(jìn)行+舀透,—,*决左,/愕够,與,或佛猛,非的運(yùn)算惑芭,與控制器一起構(gòu)成了CPU
。存儲(chǔ)器:存儲(chǔ)信息的部件(馮.諾依曼提出存儲(chǔ)器不但要記錄數(shù)據(jù)继找,還要記錄所要執(zhí)行的程序)
遂跟。輸入設(shè)備:向計(jì)算機(jī)輸入信息的設(shè)備,如鍵盤码荔,鼠標(biāo)漩勤,攝像頭等
。輸出設(shè)備:計(jì)算機(jī)向外輸出信息的設(shè)備缩搅,如顯示屏越败,打印機(jī),音響等
1.2 所謂的編程硼瓣,是做什么的
·封裝:把執(zhí)行特殊功能的指令打包成一個(gè)程序塊究飞,然后給這個(gè)程序塊起個(gè)容易查詢的名字。如果需要重復(fù)使用堂鲤,則可通過名字調(diào)用
·封裝代碼的方式有很多種亿傅,根據(jù)不同的方式,寫程序時(shí)要遵循特定的編程方式(eg:面向過程的C語言瘟栖,面向?qū)ο蟮腏ava語言葵擎,面向函數(shù)的Lisp語言)(Python是一門多范式語言)
1.3 為什么學(xué)Python
從Python開始學(xué)習(xí)編程的好處:語法簡單,模塊豐富等
1.4 最簡單的Hello Word
·print()函數(shù):在屏幕上打印出字符半哟,函數(shù)括號(hào)里的內(nèi)容即要打印出來的字符酬滤,括號(hào)里的" "并沒有打印在屏幕上,其作用是從print之類的程序文本中標(biāo)記出普通字符寓涨,以免計(jì)算機(jī)混淆盯串。也可以用' '替換" "
·注釋
。注釋:用一些文字來解釋某一段程序戒良,在Python的程序文件中体捏,每一行中從#開始的文字都是注釋,注釋的內(nèi)容并不會(huì)被當(dāng)作程序執(zhí)行
。單行注釋:用#
几缭。多行注釋:標(biāo)志符是三個(gè)連續(xù)的雙引號(hào)河泳,也可以使用三個(gè)連續(xù)的單引號(hào)
▲:如果想要在Python 2中使用中文,則需要在程序開始之前加上一行編碼信息 (# -
奏司。*- coding: utf-8 -*- )乔询,以說明程序文件中使用了支持中文的utf-8編碼。在Python 3中不需要這一行信息
第2章 先做鍵盤俠
2.1 計(jì)算機(jī)會(huì)算術(shù)
·數(shù)值運(yùn)算
韵洋。常見的數(shù)值運(yùn)算:
竿刁。除了常見的數(shù)值運(yùn)算,字符串也能進(jìn)行加法運(yùn)算搪缨。其效果是把兩個(gè)字符串連成一個(gè)字符串
食拜。一個(gè)字符串還能和一個(gè)整數(shù)進(jìn)行乘法運(yùn)算(一個(gè)字符串與一個(gè)整數(shù)n相乘的話,會(huì)把該字符串重復(fù)n次)
·邏輯運(yùn)算
副编。布爾值(Boolean): Ture,False
负甸。在Python中,用and來表示"與"的邏輯運(yùn)算痹届,在“與”運(yùn)算中呻待,兩個(gè)子命題必須都為真時(shí),用“與”連接起來的復(fù)合命題才是真
队腐。Python用or來進(jìn)行“或”的邏輯運(yùn)算蚕捉,在“或”運(yùn)算中,只要有一個(gè)命題為真柴淘,那么用“或'連接起來的復(fù)合命題就是真
迫淹。Python使用not這個(gè)關(guān)鍵字來表示非運(yùn)算
·判斷表達(dá)式
。判斷表達(dá)式符號(hào):==
为严。其他的判斷運(yùn)算符:
敛熬!=? 不等于 ? ???
<? 小于 ??
?<= ? 小于或等于 ? ?
?>? 大于 ?? >
=? 大于或等于
·運(yùn)算優(yōu)先級(jí)
。運(yùn)算符可以按照優(yōu)先級(jí)先后歸為:
第股。如果是相同優(yōu)先級(jí)的運(yùn)算符应民,那么Python會(huì)按照從左向右的順序進(jìn)行運(yùn)算:
。如果有優(yōu)先級(jí)高的運(yùn)算符夕吻,Python會(huì)打破從左向右的默認(rèn)次序诲锹,執(zhí)行優(yōu)先級(jí)高的運(yùn)算,比如:括號(hào)會(huì)打破運(yùn)算優(yōu)先級(jí)梭冠。如果有括號(hào)存在辕狰,會(huì)先進(jìn)行括號(hào)中的運(yùn)算
2.2計(jì)算機(jī)記性好
·變量革命
改备。用變量的方式來存儲(chǔ)數(shù)據(jù):給變量起一個(gè)變量名控漠,在程序中作為該變量空間的索引。數(shù)據(jù)交給變量,然后在需要的時(shí)候通過變量的名字來提取數(shù)據(jù)盐捷。(從硬件的角度來看偶翅,給變量賦值的過程,就是把數(shù)據(jù)存入內(nèi)存的過程)
碉渡。在計(jì)算機(jī)編程時(shí)聚谁,經(jīng)常設(shè)置許多變量,讓每個(gè)變量存儲(chǔ)不同功能的數(shù)據(jù)滞诺,比如:
形导。另外,可根據(jù)情況增大或減小變量的值
习霹。變量提供的符號(hào)化表達(dá)方式朵耕,是實(shí)現(xiàn)代碼復(fù)用的第一步。
·變量的類型
淋叶。數(shù)據(jù)類型:整數(shù)(Integer)阎曹,浮點(diǎn)數(shù)(Float),布爾值(Boolean)煞檩,字符串(String,簡寫為bool)等
处嫌。Python中,可以把各種類型的數(shù)據(jù)賦予同一個(gè)變量
斟湃。變量類型
一動(dòng)態(tài)類型;能自由改變變量類型的特征
一靜態(tài)類型:變量有事先說明好的類型熏迹,特定類型的數(shù)據(jù)必須存入特定類型的變量
。type()函數(shù):查看變量類型
桐早。常見變量類型:
癣缅。計(jì)算機(jī)的存儲(chǔ)空間以位(bit)為單位,每一位能存儲(chǔ)一個(gè)0或1的數(shù)字哄酝。為了記錄一個(gè)布爾值友存,只需讓1代表真值,0代表假值就可以陶衅。
屡立。計(jì)算機(jī)在內(nèi)存中必須要分類型存儲(chǔ)
.序列
。序列:序列包含的一個(gè)數(shù)據(jù)被稱為序列的一個(gè)元素搀军。序列可以包含一個(gè)或多個(gè)元素?也可以是完全沒有任何元素的空序列
膨俐。兩種序列:元組(Tuple)和列表(List)。二者的主要區(qū)別在于罩句,一旦建立焚刺,元組的各個(gè)元素不可再變更。
门烂。同一個(gè)序列可包含不同類型的元素?也是Python動(dòng)態(tài)類型的一個(gè)體現(xiàn)乳愉。此外兄淫,序列的元素不僅可是基本類型的數(shù)據(jù),還可以是另外一個(gè)序列
蔓姚。由于元組不能改變數(shù)據(jù)捕虽,所以很少會(huì)建立一個(gè)空的元組。而序列可以增加和修改元素?所以Python經(jīng)常會(huì)建立一個(gè)空表
坡脐。序列元素的位置索引稱為下標(biāo)泄私。第一個(gè)元素的下標(biāo)為0
。表的數(shù)據(jù)可變更备闲,可以對(duì)單個(gè)元素進(jìn)行賦值晌端,通過下標(biāo)說明想對(duì)哪個(gè)元素賦予怎樣的值,但不能對(duì)元組的元素進(jìn)行賦值
恬砂。通過范圍引用的方式斩松,來找到多個(gè)元素。范圍引用的基本樣式是:序列名[下限:上限:步長]下限表示起始下標(biāo)?上限表示結(jié)尾下標(biāo)觉既。在起始和結(jié)尾下標(biāo)之間惧盹,按照步長間隔找到元素?默認(rèn)步長為1
。表的范圍引用與元組同瞪讼。在范圍英語中钧椰,如果寫明上限,那么上限下標(biāo)指向的元素講不包括在結(jié)果中
尾部引用
.詞典
詞典的很多方面和表類似符欠,是一個(gè)可以容納多個(gè)元素的容器嫡霞,但是詞典不是以位置來作為索引的?詞典允許用自定義的方式來建立數(shù)據(jù)的索引
可在詞典中修改或增添一個(gè)元素的值,也可構(gòu)建一個(gè)新的空的詞典
2.3計(jì)算機(jī)懂選擇
.if結(jié)構(gòu)
if?結(jié)構(gòu):條件語句
希柿。if...else...語句:if?與else?分別有隸屬于它們的一行代碼诊沪,從屬代碼開頭會(huì)有四個(gè)空格的縮進(jìn),程序會(huì)根據(jù)if后的條件是否成立曾撤,選擇執(zhí)行if的從屬代碼端姚,還是執(zhí)行else的從屬代碼
。也可寫只有if的程序?如果if后的條件不成立挤悉,那么計(jì)算機(jī)什么都不用執(zhí)行
.小弟靠后站
縮進(jìn):Python中通過縮進(jìn)來識(shí)別出隸屬關(guān)系渐裸,Python中的縮進(jìn)
.if的嵌套與elif
Python先檢測(cè)if的條件,如果if的條件為假装悲,則跳過隸屬于if的程序塊昏鹃,檢測(cè)elif的條件
.2.4計(jì)算機(jī)循環(huán)
·for?循環(huán):
。
序列中元素的個(gè)數(shù)決定了循環(huán)重復(fù)的次數(shù)诀诊,for循環(huán)的重復(fù)次數(shù)是確定的洞渤,for循環(huán)會(huì)依次從序列中取出元素,賦予跟緊在for后面的變量
属瓣。如果只是想簡單地重復(fù)特定的次數(shù)载迄,不想建立序列奈懒,則可:
程序中的5向range()函數(shù)說明了需要重復(fù)的次數(shù),而for循環(huán)后面依然有一個(gè)變量i宪巨,它為每次循環(huán)起到了計(jì)數(shù)的功能
.while循環(huán)
。while后面緊跟一個(gè)條件溜畅,如果條件為真捏卓,則while會(huì)不停地循環(huán)執(zhí)行隸屬于它的語句。只有條件為假時(shí)慈格,程序才會(huì)停止
怠晴。一旦有了無限循環(huán),程序就會(huì)不停地運(yùn)行下去浴捆,直到程序被打斷或電腦關(guān)機(jī)
.跳過或停止
蒜田。continue:跳過循環(huán)的這一次執(zhí)行,進(jìn)行下一次的循環(huán)操作
选泻。break:停止執(zhí)行整個(gè)循環(huán)
.附錄:代碼規(guī)范
第三章?過程大于結(jié)果
3.1?懶人炒菜機(jī)
.定義函數(shù)
冲粤。def:通知Python要定義函數(shù)了在函數(shù)名后面還有一個(gè)括號(hào),用來說明函數(shù)有哪些參數(shù)页眯,參數(shù)可以有多個(gè)梯捕,也可以完全沒有,但即使沒有輸入數(shù)據(jù)窝撵,函數(shù)后面的括號(hào)也要保留
傀顾。形參:即函數(shù)定義中的參數(shù),是一個(gè)形式代表碌奉,并非真實(shí)數(shù)據(jù)
短曾。return:用于說明函數(shù)的返回值,可返回多個(gè)值赐劣;此外嫉拐,return還起到中止函數(shù)和制定返回值的功能嗎
.調(diào)用函數(shù)
。函數(shù)調(diào)用:把真實(shí)的數(shù)據(jù)填入到括號(hào)中魁兼,作為參數(shù)傳遞給函數(shù)椭岩,除具體的數(shù)據(jù)表達(dá)式外,參數(shù)還可以是程序中已經(jīng)存在的變量
璃赡。?實(shí)參:是括號(hào)里具體的參數(shù)判哥,在函數(shù)調(diào)用時(shí)出現(xiàn)
。調(diào)用函數(shù)獲得返回值后碉考,常把返回值賦給變量
.函數(shù)文檔
塌计。help()函數(shù):用來找到某個(gè)函數(shù)的說明文檔
以下以函數(shù)max()為例
。對(duì)于自定義的函數(shù)侯谁,需要自己加上注釋锌仅,在參數(shù)和返回值上要盡量寫得詳細(xì)
3.2參數(shù)傳遞
.基本傳參
章钾。參數(shù)傳遞:即把數(shù)據(jù)用參數(shù)的形式輸入到函數(shù)
如果只有一個(gè)參數(shù),只需把函數(shù)調(diào)用時(shí)輸入的唯一數(shù)據(jù)對(duì)應(yīng)為參數(shù)既可热芹;
贱傀。位置傳參:如果有多個(gè)參數(shù),那么在調(diào)用函數(shù)時(shí)伊脓,Python會(huì)根據(jù)位置來確認(rèn)數(shù)據(jù)對(duì)應(yīng)哪個(gè)參數(shù)
府寒。關(guān)鍵字傳參:根據(jù)參數(shù)名讓數(shù)據(jù)與符號(hào)對(duì)應(yīng)上
。此外报腔,位置傳遞與關(guān)鍵字傳遞可以混合使用
.包裹傳參
株搔。包裹位置傳參:所有的數(shù)據(jù)都根據(jù)先后順序,收集到一個(gè)元組纯蛾。在函數(shù)內(nèi)部纤房,通過元組來讀取傳入的數(shù)據(jù)
。在定義package_position()時(shí)要在元組名all?arguments前加*號(hào)
.包裹關(guān)鍵字傳參:把傳入的數(shù)據(jù)收集為一個(gè)詞典翻诉,當(dāng)函數(shù)調(diào)用時(shí)炮姨,所有參數(shù)會(huì)收集到數(shù)據(jù)容器里,把數(shù)據(jù)傳遞給函數(shù)使用
碰煌。為了提醒剑令,參數(shù)all-arguments是包裹關(guān)鍵字傳遞所用的字典,因此在all_arguments前加**
拄查。包裹位置傳參和包裹關(guān)鍵字傳參還可以混合使用
吁津。包裹傳參和基本傳參混合使用,其出現(xiàn)順序:位置一關(guān)鍵字一包裹位置一包裹關(guān)鍵字
·解包裹
堕扶。解包裹:把一個(gè)數(shù)據(jù)容器傳遞給函數(shù)碍脏,再自動(dòng)地分解為各個(gè)參數(shù)
。包裹傳參和解包裹不是相反操作稍算,而是兩個(gè)相對(duì)獨(dú)立的功能
典尾。元組解包裹:在args前加上*符號(hào),來提醒Python?糊探,把元組拆成單個(gè)元素蒸眠,每一個(gè)元素對(duì)應(yīng)函數(shù)的一個(gè)位置參數(shù)
暇务。詞典解包裹:在args前加上**符號(hào)响委,在傳遞詞典args時(shí)崭别,讓詞典的每個(gè)鍵值作為一個(gè)關(guān)鍵字傳遞給函數(shù)unpackage()
。解包裹用于函數(shù)調(diào)用瞪慧,在調(diào)用函數(shù)時(shí)髓考,幾種參數(shù)的傳遞也可以混合,順序?yàn)?位置一關(guān)鍵字一位置解包裹一關(guān)鍵字解包裹
3.3遞歸
.高斯求和和數(shù)學(xué)歸納法
.函數(shù)棧
弃酌。棧:數(shù)據(jù)結(jié)構(gòu)的一種氨菇,可以有序地存儲(chǔ)數(shù)據(jù)
儡炼。特征:后進(jìn)先出;只支持兩個(gè)操作:pop和push查蓉,棧用彈出(pop)操作來取出棧頂元素乌询,用推入(push)操作將一個(gè)新的元素存入棧頂
。程序運(yùn)行的過程:可看作一個(gè)先增長棧后消滅棧的過程
豌研。變量的作用域:函數(shù)內(nèi)部可以創(chuàng)建新變量妹田,Python尋找變量的范圍不止是當(dāng)前幀,它還會(huì)尋找函數(shù)外部(即主程序)中定義了的變量
一當(dāng)主程序中已經(jīng)有了一個(gè)變量聂沙,函數(shù)調(diào)用內(nèi)部可以通過賦值的方式創(chuàng)建了一個(gè)同名變量。函數(shù)會(huì)優(yōu)先使用自己函數(shù)幀中的變量
一且函數(shù)內(nèi)部使用的是自己內(nèi)部的變量初嘹,所以函數(shù)內(nèi)部對(duì)變量的操作不會(huì)影響到外部變量(特例:對(duì)于數(shù)據(jù)容器及汉,函數(shù)內(nèi)部的更改會(huì)影響到外部)
3.4引入那把寶劍
.引入模塊
.搜索路徑
。在引入模塊時(shí)屯烦,把庫文件和應(yīng)用文件放在了同一文件夾下坷随,當(dāng)在該文件夾下運(yùn)行程序時(shí),Python會(huì)自動(dòng)在當(dāng)前文件夾搜索它想要引入的模塊
驻龟。標(biāo)準(zhǔn)庫是Python官方提供的庫温眉,Python會(huì)自動(dòng)搜索標(biāo)準(zhǔn)庫所在的路徑
3.5異常處理
.惱人的bug
。語法錯(cuò)誤翁狐,比如类溢,下面程序錯(cuò)用了語法,在for的一行沒有加引號(hào)
露懒。運(yùn)行時(shí)錯(cuò)誤
這種錯(cuò)誤只有在運(yùn)行時(shí)闯冷,編譯器才會(huì)發(fā)現(xiàn)。比如:下面的程序并沒有語法上的錯(cuò)誤懈词,但在Python運(yùn)行時(shí)蛇耀,會(huì)發(fā)現(xiàn)引用的下標(biāo)超出了列表元素的范圍;
程序會(huì)中途報(bào)錯(cuò):
。語義錯(cuò)誤
一這種錯(cuò)誤坎弯,編譯器認(rèn)為程序沒有問題纺涤,可以正常運(yùn)行。但當(dāng)檢查程序時(shí)抠忘,卻發(fā)現(xiàn)程序并非想做的
.Debug
撩炊。debug:即修復(fù)程序缺陷
.異常處理
。異常處理語句:try-except語句
崎脉。異常處理完整的語法形式:
代碼地址:https://gitee.com/mabingqi/learn_programming_from_python