計算機二級Python

概述

計算機二級在近兩年新加了python的選擇,趁機考了一下,順便記錄一下學習的一些所獲html

第一章 程序設計語言概述

考綱考點:

1

這一部分主要是介紹計算機語言的公共常識,一些嘗試我就按照本身的理解方式來記憶:python

程序設計語言——計算機與人類之間的翻譯官,因此稱爲交互體系,翻譯官用的語言稱爲計算機程序,就像人類的語言有語法等等規則同樣。git

高級編程語言包括靜態語言和腳本語言,python是解釋語言,就是直接跟計算機對話的那種,也就是腳本語言;Java那種是須要編譯才能執行的語言,就至關於須要二次翻譯,是靜態語言,由於靜態(懶),還須要一個傳話的才行。程序員

官方用語的話,編譯是將源代碼轉換成目標代碼的過程,解釋是將源代碼逐條轉換成目標代碼的同時逐條運行目標代碼的過程。兩者區別可見下圖來理解:github

2

3

編譯是一次性翻譯,再傳話,通過傳話人之後,就不須要翻譯官再翻譯一遍了,因此一旦程序被編譯,就不須要再次編譯,因此重複執行速度更快,固然這個目標代碼也就再也不須要編譯器。算法

解釋是每次都須要解釋,由於翻譯一遍的外語容易忘,告訴傳話人之後,傳話人就不容易忘本身母語記憶的內容,可是解釋是翻譯官兼職傳話人,因此只要翻譯官存在,程序就能夠執行。不管是那種系統,並且一我的幹,程序糾錯和維護也很是方便。數據庫

Python語言概述

這是python的最小程序了。編程

至於python的開發環境配置這裏就不介紹了,環境變量能夠直接添加,比jdk方便多了小程序

python的解釋器有兩個重要工具:IDLE——python集成開發環境(至關於人類、翻譯官、計算機組成的總體),pip——python第三方庫安裝工具(邀請翻譯官的功能)後端

Python程序的運行方式——交互式(命令行)、文件式(非命令行)

程序的基本編寫方法

IPO程序編寫方法——Input(輸入,至關於人類編寫代碼這個過程),process(處理,至關於翻譯),output(計算機獲得翻譯官給的信息作出響應)

Python程序的特色

Python具備通用性,由於應用領域廣,因此纔要學習,看成工具用也好

Python語法簡潔,只有33個保留字,看起來就像英語正常表達同樣

Python生態高產,庫特別多,也就是翻譯官特別充足,不少荒誕無理的要求均可以被翻譯官聽懂

除了Python語法的三個重要特色外,Python程序還 有一些具體特色。

•平臺無關:前面說到過,只要有翻譯官就能夠,在任何系統均可以運行

•強制可讀 :也就是利用縮進來代表邏輯關係,至關於句子之間沒有停頓,使用縮進來強制理解

•支持中文:看下圖

第二章 Python語言基本語法元素

考綱考點:

程序的格式框架

縮進:

Python語言採用嚴格的「縮進」來代表程序的 格式框架,用來表示代碼之間的包含和層次關係。 1個縮進 = 4個空格 =1個退格。可是空格和退格不能混用。並且縮進是Python語言中代表程序框架的惟一手段。其重要性可見一斑。

註釋:

註釋就是在輸入的時候加入一些不想讓翻譯官翻譯的東西,可是翻譯官如何去區分哪些是要的,哪些是不要的呢?因此就有了註釋,單行註釋用井號。多行註釋用三對引號,三隊引號之間的內容就是被註釋掉了。單引號雙引號無所謂。

1
2
3
4
5
6
7
8
9
'''
這裏面
都是註釋
'''
#print("Hello!") 這是一條單行註釋
"""
這裏面
也都是註釋
"""

變量:

變量就是一個一個的小房子,用來存放東西的,常常用一個等號把東西放進變量(房子)裏,也就是賦值。

1
2
a=3 #把3放進了a中
a==2 #兩個等號是用來比較兩者是否相同

命名:

Python語言容許採用大寫字母、小寫字母、數 字、下劃線(_)和漢字等字符及其組合給變量命 名,但名字的首字符不能是數字,中間不能出現空格,長度沒有限制 n。注意:標識符對大小寫敏感,python和Python 是兩個不一樣的名字

保留字:

python中你蓋的房子是變量,早就存在的名勝建築就是叫作保留字了,本身的房子愛咋咋地,名勝古蹟可不能亂動,並且還不能建一個和名勝建築同樣的房子,要否則就侵權了,要坐牢(出bug)的!

數據類型

Python語言支持多種數據類型,最簡單的包括數字類型、字符串類型,略微複雜的包括元組類型、集合類型、列表類型、字典類型等。

數字類型

表示數字或數值的數據類型稱爲數字類型,Python語言提供3種數字類型:整數、浮點數和複數,分別對應數學中的整數、實數和複數。

一個整數值又能夠表示爲十進制、十六進制、八進制和二進制等不一樣進制形式。一個浮點數能夠表示爲帶有小數點的通常形式,也能夠採用科學計數法表示。

1
2
3
4
5
6
7
8
9
舉個例子,看不懂也不要緊
#整數類型
十進制: 1010
十六進制:0x3F2
八進制: 0o1762
二進制: 0b001111110010
#浮點數類型
通常形式: 123.456
科學計數法: 1.23456e2

字符串

至於字符串, Python語言中,字符串是用兩個雙引號「 」或者單 引號‘ ’括起來的一個或多個字符。

1
2
3
4
5
6
"hello world"[1]
輸出:e
"hello world"[6]
輸出:w
"hello world"[-1]
輸出:d

能夠採用[N: M](左閉右開區間)格式獲取字符串的子串,這個操做被形象地稱爲切片。

1
2
3
4
"hello world"[1:4]
輸出:ell
"hello world"[6:-2]
輸出:wor

能夠經過Python默認提供的len()函數獲取字符串 的長度,一箇中文字符和西文字符的長度都記爲1。

1
2
3
4
len("hello")
輸出:5
len("hello world")
輸出:11

程序的語句元素

表達式

產生或計算新數據值的代碼片斷稱爲表達式,簡單說就是鏈接在一塊兒的一個句子/短句

賦值

前面提到過了,一個等號是賦值,並且是從右往左賦值,如a=3

引用

Python程序會常用當前程序以外已有的功能 代碼,這個過程叫「引用」。Python語言使用 import保留字引用當前程序之外的功能庫,使用方 式以下: import <功能庫名稱>

其實說白了就是請翻譯官

分支語句

分支語句是控制程序運行的一種語句,它的做用是根據判斷 條件選擇程序執行路徑。分支語句包括:單分支、二分支和 多分支。如:

1
2
3
a=3 #一開始告訴你a裏面放的是3
if a==3: #注意冒號,而後翻譯一下,若是a等於3
print("a=3沒毛病") #注意縮進,表示上一句的"斷句",翻譯爲"則輸出a=3沒毛病"

循環語句

循環語句是控制程序運行的一類重要語句,與分支 語句控制程序執行相似,它的做用是根據判斷條件 肯定一段程序是否再次執行一次或者屢次。

1
2
3
4
#輸出1到10中全部的天然數
n=1
while n<10: #注意冒號,翻譯——當n小於10的時候
print(n) #注意縮進,翻譯——則輸出n

基本輸入輸出函數

直接演示了

1
2
3
4
5
a=input("默認會輸入字符串噢") #輸入函數input(),就算是輸入數字也會當成字符串
b=eval("1.3+a") #輸入函數eval(),裏面就算是有字符串類型的數字,也會變成數字噢
print(a) #輸出一串數字
print(b) #加入a輸入了1,這裏就輸出2.3
print(1.3+a) #這裏會報錯噢,由於字符串類型的數字和數字不能相加

print函數還有個重要的地方:print函數輸出講道理是直接就換行了,由於print()裏面自帶換行,舉個例子:

1
2
3
print(3,end="") #不換行
print(3) #換行,實際上是print(3,end="\n"),後面的部分默認就不顯示出來了
print(3,end="k") #輸出3k

第三章 基本數據類型

考綱考點

數字類型

前面提到過,python提供的數字類型有三種,整數、浮點、複數,翻譯一下就算整數、實數、複數。

整數嘛,在前面加0b或者0B,就意味着你在寫二進制數字,b表明binary,其餘英文可自行查閱。

浮點和整數的區別就算10.10是浮點,10.0也是浮點,都不是整數。浮點數還能夠用科學計數法來寫,如1010.0-1010.1.01e3-1.01E-3

至於複數,計算機可不像人變通那麼多,10+0j是複數,10就不是複數,因此只要帶j的數就算複數。

1
2
3
4
5
6
(1.23e4+5.67e4j).real #.real是用來獲取實部,點翻譯成「的」,real翻譯爲實部
12300.0
(1.23e4+5.67e4j).imag #同上
56700.0
1.23e4+5.67e4j.imag # 先得到5.67e4j的虛部,再與1.23e4進行求和計算
69000.0

數字類型的運算

操做符 功能
x+y 求和
x-y 求差
x*y 求積
x/y 求商
x//y x與y之整數商,即:不大於x與y之商的最大整數
x**y x的y次冪,即:xy
+x x
-x -x
x % y x與y之商的餘數,也稱爲模運算
x+=y x=x+y
x*=y x=x*y
依次類推 ……
abs(x) x的絕對值
divmod(x, y) (x//y, x%y),輸出爲二元組形式(也稱爲元組類型)
pow(x, y[, z]) (xy)%z,[..]表示該參數能夠省略,即:pow(x,y),它與xy相同
round(x[, ndigits]) 對x四捨五入,保留ndigits位小數。round(x)返回四捨五入的整數值
max(x1, x2, …, xn) x1, x2, …, xn的最大值,n沒有限定
min(x1, x2, …, xn) x1, x2, …, xn的最小值,n沒有限定

浮點數與整數運算,產生結果是浮點數 ,另外int(10.10)獲得整數10,int("10")也會獲得10,可是int(「10.10」)就會報錯,打個比方就是你把10.10放進int的房子裏時,int首先接待第一個字符,也就是1,他知道這是數字,就收下了,可是隻能收下整數,當第一個字符是"時,他知道是字符串,就收下了,固然只要是整數就沒問題,結果字符串給他一個浮點,他int就被撐炸了。

字符串類型及格式化

1
2
3
4
5
6
7
8
print('這是"單行字符串"') 
這是"單行字符串"
print("這是'單行字符串'")
這是'單行字符串'
print("""這是'多行字符串'的第一行 這是'多行字符串'的第二行 """)
這是'多行字符串'的第一行 這是'多行字符串'的第二行
print('''這是"多行字符串"的第一行 這是"多行字符串"的第二行 ''')
這是"多行字符串"的第一行 這是"多行字符串"的第二行

重點,這個好像在考試常常會挖坑:Python語言轉義符: \ ,例如:\n表示換行、\表示反斜槓、'表示單引 號、"表示雙引號、\t表示製表符(TAB)等。

而後這個叫字符串的索引,切片,字面意思

1
2
3
4
5
6
"hello world"[1]
輸出:e
"hello world"[6]
輸出:w
"hello world"[-1]
輸出:d

重點,format()方法的基本使用,舉幾個例子,本身理解比書面用於可能會好理解一點

1
2
3
4
5
6
7
8
"{}曰:學而時習之,不亦說乎。".format("孔子") 
'孔子曰:學而時習之,不亦說乎。'
"{}曰:學而時習之,不亦{}。".format("孔子","說乎")
'孔子曰:學而時習之,不亦說乎。'
"{1}曰:學而時習之,不亦{0}。".format("說乎","孔子")
'孔子曰:學而時習之,不亦說乎。'
"{1}曰:{{學而時習之,不亦{0}}}。".format("說乎","孔子")
'孔子曰:{學而時習之,不亦說乎}。'

而後我總結一下:大括號就至關於座位,format裏面就是即將入座的學生,大括號裏沒數字的就表明座位沒寫名字,誰排前面誰坐,有數字就按數字坐,固然最前的數字是第0,固然若是大括號裏原本就有東西,那些表明刻在桌子上的其餘字,照例輸出就行

除此以外,format還有控制格式的做用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
s = "等級考試" #在下面的25表明輸出的字符數量
"{:25}".format(s) #左對齊,默認 '等級考試 '
"{:^25}".format(s) #居中對齊 ' 等級考試 '
"{:>25}".format(s) #右對齊 ' 等級考試'
"{:*^25}".format(s) #居中對齊且填充*號 '**********等級考試***********'
"{:+^25}".format(s) #居中對齊且填充+號 '++++++++++等級考試+++++++++++'
"{:十^25}".format(s) #居中對齊且填充漢字「十」 '十十十十十十十十十十等級考試十十十十十十十十十十十'
"{:^1}".format(s) #指定寬度爲1,不足變量s的寬度 '等級考試'
"{:.2f}".format(12345.67890) #'12345.68'
"{:>25.3f}".format(12345.67890) # ' 12345.679'
"{:.5}".format("全國計算機等級考試") #'全國計算機'
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425) # '110101001,Ʃ,425,651,1a9,1A9' b: 輸出整數的二進制方式; c: 輸出整數對應的Unicode字符; d: 輸出整數的十進制方式; o: 輸出整數的八進制方式; x: 輸出整數的小寫十六進制方式; X: 輸出整數的大寫十六進制方式;
"{0:e},{0:E},{0:f},{0:%}".format(3.14) #'3.140000e+00,3.140000E+00,3.140000,314.000000%'
"{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14) #對比輸出 '3.14e+00,3.14E+00,3.14,314.00%'

這個讀者自行總結好了吧,適合本身的記憶纔是有用的,官方解釋之後遇到再說,反正能看懂

其實經常使用的就幾個

1
2
3
4
"{:.2f}".format(3.1415926) # 輸出小數點後兩位 '3.14' 
"{:x}".format(1010) # 輸出整數的十六機制形式 '3f2'
"{:.5}".format("這是一個很長的字符串") # 輸出字符串的前5位 '這是一個很'
"{:-^10}".format("PYTHON") # 居中並填充 '--PYTHON--'

字符串類型的操作

操做符 翻譯
x + y 鏈接兩個字符串x與y
x * n 或 n * x 複製n次字符串x
x in s 若是x是s的子串,返回True,不然返回False,’Y’ in name →False

字符串處理函數

函數 描述
len(x) 返回字符串x的長度,也可返回其餘組合數據類型的元素個數
str(x) 返回任意類型x所對應的字符串形式
chr(x) 返回Unicode編碼x對應的單字符
ord(x) 返回單字符x表示的Unicode編碼
hex(x) 返回整數x對應十六進制數的小寫形式字符串
oct(x) oct(x)

放張圖自行參悟

在學習類型這一塊,type()函數是個好東西,他能幫你獲得你想要知道的東西的類型。好比print(type(123))就會打印出int,其餘的也均可以用。

第四章 程序的控制結構

考綱考點

程序的基本結構

任何程序最多三種基本結構組成:順序結構、分支結 構和循環結構。 一條一條向下進行的翻譯就是順序結構,向下翻譯時遇到須要跳過的部分就是分支(if\swich語句),翻譯到下面某處又返回到上面的就是循環(while\for語句)、

在這種邏輯語句中,縮進要特別注意,與程序邏輯相關很大,冒號也要重視,這是格式要求

分支結構

1
2
3
4
5
6
# 判斷用戶輸入數字的特色
s = eval(input("請輸出一個整數:")) #假如輸入7
if s % 3 == and s % 5 == 0: #這句話就要跳過,由於7不知足這個條件,因此就是分支
print("這個數字既能被3整除,又能被5整除")
else: #若是輸入15,這句話就要跳過
print("輸入數字是:", s)

有時候須要不少條岔路口,那就是else 後面再加一句 if,可是這種寫法有規定,拼寫成elif,而後有幾個if就算幾分支語句

操做符 含義
< 小於
> 大於
<= 小於等於
>= 大於等於
== 等於
!= 不等於

循環結構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for c in "Python": #這種也成爲for的循環遍歷
print(c)
#輸出結果以下:
P
y
t
h
o
n
#一樣的效果還有:
for i in range(6): #for循環常常搭配range函數使用
print("Python"[i])
i = 0 #while的用法
while i < 6:
print("Python"[i])
循環控制

循環的時候若是遇到在一範圍內不想繼續運行的狀況,就須要用到循環控制了——breakcontinuebreak跳出整個循環,continue跳出當此循環

以for循環爲例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i in range(6):
if i == 1:
continue
elif i ==3:
break
print("Python"[i])
#輸出結果以下:
P #從第0號開始
#y 第1號不輸出
t
#如下都不輸出,由於到了第三號
h
o
n

程序的異常處理

Python語言使用保留字try和except進行異常處理,try後面若是遇到錯誤了,就執行except後面的,有點像if分支語句的感受,舉個例子

1
2
3
4
5
try:
for i in range(5):
print(10/i, end=" ")
except:     
print("某種緣由,出錯了!")

上面例子中,當i循環時,會從0開始,這樣就出現除數爲0的狀況,這樣講道理是要報錯的,可是遇到錯誤會執行except後面的代碼,因此最後知識輸出一句「某種緣由,出錯了!」醬紫。

第五章 函數和代碼複用

考點考綱

函數的基本使用

首先是定義函數,以下就定義完了,要注意的只有縮進和冒號

1
2
3
def 函數(一些函數須要用到的參數):
一些代碼
return 一些返回值,固然也能夠沒有

定義了就要用,以下

1
2
3
4
5
6
7
8
9
10
11
12
def multiply(x, y): #定義函數
print(x*y)
multiply(99, 2) #調用函數,輸出198

def multiply(x=10, y): #定義函數
print(x*y)
multiply(2) #調用函數,輸出20

def multiply(x, y=10): #定義函數
print(x*y)
multiply(99) #調用函數,輸出990
multiply(y = 2, x = 99) #調用函數,輸出198

變量的做用域

在誰的冒號下面的縮進下就是做用於誰的變量,除了那個冒號和縮進的範圍就沒用了。

1
2
3
4
5
6
7
8
9
def hanshu():
n=3
print(n) #不報錯
print(n) #報錯

n=2
def hanshu():
print(n) #報錯
print(n) #不報錯

若是想要訪問局部變量,科研在前面加上global用來強調是全局變量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n=2
def hanshu():
n=3
print(n)
def han():
global n
n=3
print(n)
print(n)
hanshu()
han()
print(n)
#輸出:
2
3
3
3

組合數據類型

考綱考點

組合數據類型的基本概念

集合

集合是無序組合,用大括號({})表示,它沒有 索引和位置的概念,集合中元素能夠動態增長或刪除。集合中元素不可重複,元素類型只能是固定數據類型,也就是說只能放你想賦值的東西,賦值過的房子是不能放進集合這種房子的。

1
2
3
4
5
6
7
S = {1010, "1010", 78.9}
type(S)
<class 'set'> #輸出
len(S)
3 #輸出
print(S)
{78.9, 1010, '1010'} #輸出

集合類型有4個操做符,交集(&)、並集(|)、差集 (-)、補集(^),操做邏輯與數學定義相同。好比S-T獲得一個新集合包括在集合S中但不在集合T中的元素 。

函數或方法 描述
S.add(x) 若是數據項x不在集合S中,將x增長到s
S.remove(x) 若是x在集合S中,移除該元素;不在產生 KeyError異常
S.clear() 移除S中全部數據項
len(S) 返回集合S元素個數
x in S 若是x是S的元素,返回True,不然返回False
x not in S 若是x不是S的元素,返回True,不然返回False

集合類型主要用於元素去重,適合於任何組合數據類型。

1
2
3
T = {1010, "1010", 12.3, 1010, 1010}
print(T)
{1010, '1010', 12.3}

序列

理解如下字符串就行,字符串就是一種字符序列

列表

列表也是一種序列,參考一下字符串,這裏寫一下不一樣的地方

方法 描述
ls.append(x) 在列表ls最後增長一個元素x
ls.insert(i, x) 在列表ls第i位置增長元素x
ls.clear() 刪除ls中全部元素
ls.pop(i) 將列表ls中第i項元素取出並刪除該元素
ls.remove(x) 將列表中出現的第一個元素x刪除
ls.reverse() 列表ls中元素反轉
ls.copy() 生成一個新列表,複製ls中全部元素

字典

其實字典也是序列,可是字符串和列表都是把索引默認按[0,len(list)-1]來肯定順序,而字典的區別就是本身把肯定順序的東西寫出來

1
2
3
4
5
6
7
8
9
10
11
12
d = {"201801":"小明", "201802":"小紅", "201803":"小白"}
print(d["201802"])
小紅

d = {"201801":"小明", "201802":"小紅", "201803":"小白"}
len(d)
3

#dict()函數用於生成一個空字典,做用和{}一致。
d = dict()
print(d)
{}

稍微瞭解一點:排序的東西叫作keys,被排序的東西叫作values

操做方法 描述
d.keys() 返回全部的鍵信息
d.values() 返回全部的值信息
d.items() 返回全部的鍵值對
d.get(key, default) 鍵存在則返回相應值,不然返回默認值
d.pop(key, default) 鍵存在則返回相應值,同時刪除鍵值對,不然返回默認值
d.popitem() 隨機從字典中取出一個鍵值對,以元組(key, value)形式返回
d.clear() 刪除全部的鍵值對

第七章 文件和數據格式化

考綱考點

文件的使用

首先,讀文件,分三個步驟,打開文件——讀取文件——關閉文件

1
2
file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 
#第一個參數是文件路徑,這裏知識舉個例子,第二個參數是表示打開時文件的狀態,第三個參數是編碼方式

路徑有絕對路徑和相對路徑,相對當前文件夾的路徑叫作相對路徑,相對於個人電腦的路徑是絕對路徑。

文件打開時的狀態是由「讀read」「寫write」「追加append」,以及與字節組合做用的效果,下圖表示的是以二進制文件打開,把b換成t就算以文本文件方式打開,除了r、w、a還有x,表示若是文件不存在,則自行建立,若是存在就報錯,而w是覆蓋原文件的寫,存在就覆蓋,不存在就新建。

1
2
3
4
5
6
7
8
9
f = open(「a.txt」,「rb」) 		#b表示二進制文件方式 
print(f.readline())
f.close()
b'\xc8\xab\xb9\xfa\xbc\xc6\xcb\xe3\xbb\xfa\xb5\xc8\xbc\xb6 \xbf\xbc\xca\xd4' #輸出內容

f = open("D://b.txt", "r")
for line in f:
print(line) #按行輸出內容
f.close()

用完文件必定要給關掉,要否則會形成內存泄漏、佔用資源啥的。固然也能夠用with open('abc.txt','a') as file1:這樣的句子來打開文件,程序調用結束後文件會自動關閉。

方法 含義
f.read(size=-1) 從文件中讀入整個文件內容。參數可選,若是給出,讀入 前size長度的字符串或字節流
f.readline(size = -1) 從文件中讀入一行內容。參數可選,若是給出,讀入該行 前size長度的字符串或字節流
f.readlines(hint=-1) 從文件中讀入全部行,以每行爲元素造成一個列表。參數 可選,若是給出,讀入hint行
f.seek(offset) 改變當前文件操做指針的位置,offset的值: 0:文件開頭; 2: 文件結尾
f.write(s) 向文件寫入一個字符串或字節流
f.writelines(lines) 將一個元素爲字符串的列表寫入文件

數據組織的維度

一、二、三、4這樣叫一維數據

下表是二維數據:

1 2
小紅 小明

高維數據:

1
2
3
4
"本書" : [
"第1章" : "程序設計基本方法",
"第2章" : "Python語言基本語法元素",
]

那麼這樣的數據怎麼存入文件呢?上面說的寫入都是將列表中的元素原封不動的存入txt文件中,經過向元素中加入換行符等等對寫入進行格式調整,其實咱們也能夠用其餘方法。

其中用逗號分割的存儲格式叫作csv格式(Comma-Separated Values,即逗號分隔值)

1
2
3
4
ls = ['北京', '上海', '天津', '重慶'] 
f = open("city.csv", "w")
f.write(",".join(ls)+ "\n")
f.close()

寫入效果爲北京,上海,天津,重慶這樣的好處是在讀寫數據時調整格式而不改變給出數據的樣式。

對一維數據進行處理首先須要從CSV格式文件讀 入一維數據,並將其表示爲列表對象。

1
2
3
4
5
f = open("city.csv", "r")
#strip("\n")函數用於移除開頭和結尾的換行符,split(",")用「,」分割數據
ls = f.read().strip('\n').split(",")
f.close()
print(ls) #['北京', '上海', '天津', '重慶']

二維數據也挺好理解的,就是若干條一維數據存在一塊兒,以下示例

1
2
3
4
ls = [ 
['指標', '2014年', '2015年', '2016年'],
['居民消費價格指數', '102', '101.4', '102'],
]

二維列表對象寫入爲CSV格式文件方法以下,採 用遍歷循環和字符串的join()方法相結合。 由於join()函數對一維列表用的,直接上二維的話他沒法識別到裏面的內容,寫出來的話可能不盡人意。讀取是一樣道理。

1
2
3
4
5
ls表明二維列表,此處省略 
f = open("cpi.csv", "w")
for row in ls:     
f.write(",".join(row)+ "\n")
f.close()

第八章 Python計算生態

考綱考點

一、基本的Python內置函數 二、瞭解Python計算生態

計算思惟的本質是抽象(Abstraction)和自動化(Automation)

一個解決複雜問題行之有效的方法被稱做自頂而下的設計方法,其基本思想是以一個總問題開始,試圖把它表達爲不少小問題組成的解決方案。再用一樣的技術依次攻破每一個小問題,最終問題變得很是小,以致於能夠很容易解決。而後只需把全部的碎片組合起來,就能夠獲得一個程序。

整個過程能夠歸納爲四個步驟: 步驟1:將算法表達爲一系列小問題; 步驟2:爲每一個小問題設計接口;步驟3:經過將算法表達爲接口關聯的多個小問 題來細化算法;步驟4:爲每一個小問題重複上述過程。

執行中等規模程序的最好方法是從結構圖最底層開始,而不是從頂部開始,而後逐步上升。自頂向下和自底向上貫穿程序設計和執行的整個過程。

第九章 Python標準庫概覽

考綱考點

標準庫: turtle庫(必選) random庫(必選) time庫(可選)

turtle庫

turtle庫就是一隻筆,畫畫用的。導入庫有三種方式:

1
2
3
4
5
6
import turtle 
turtle.circle(200) #畫圓
from turtle import *
circle(200) #畫圓
import turtle as t
t.circle(200) #畫圓

turtle庫包含100多個功能函數,主要包括窗體函 數、畫筆狀態函數、畫筆運動函數等三類。

窗體函數

turtle.setup(width, height, startx, starty)

做用:設置主窗體的大小和位置

參數:

width :窗口寬度,若是值是整數,表示的像素值;若是值 是小數,表示窗口寬度與屏幕的比例;

height: 窗口高度,若是值是整數,表示的像素值;若是 值是小數,表示窗口高度與屏幕的比例;

startx:窗口左側與屏幕左側的像素距離,若是值是None ,窗口位於屏幕水平中央;

starty:窗口頂部與屏幕頂部的像素距離,若是值是None ,窗口位於屏幕垂直中央;

畫筆狀態函數

函數 描述
pendown() 放下畫筆
penup() 提起畫筆,與pendown()配對使用
pensize(width) 設置畫筆線條的粗細爲指定大小
pencolor() 設置畫筆的顏色
begin_fill() 填充圖形前,調用該方法
end_fill() 填充圖形結束
filling() 返回填充的狀態,True爲填充,False爲未填充
clear() 清空當前窗口,但不改變當前畫筆的位置
reset() 清空當前窗口,並重置位置等狀態爲默認值
screensize() 設置畫布的長和寬
hideturtle() 隱藏畫筆的turtle形狀
showturtle() 顯示畫筆的turtle形狀
isvisible() 若是turtle可見,則返回True

畫筆運動函數

函數 描述
forward() / fd() 沿着當前方向前進指定距離
backward() 沿着當前相反方向後退指定距離
right(angle) 向右旋轉angle角度
left(angle) 向左旋轉angle角度
goto(x,y) 移動到絕對座標(x,y)處
setx( ) 將當前x軸移動到指定位置
sety( ) 將當前y軸移動到指定位置
setheading(angle) / seth() 設置當前朝向爲angle角度,整數角度
home() 設置當前畫筆位置爲原點,朝向東
circle(radius,e) 繪製一個指定半徑r和角度e的圓或弧形
dot(r,color) 繪製一個指定半徑r和顏色color的圓點
undo() 撤銷畫筆最後一步動做
speed() 設置畫筆的繪製速度,參數爲0-10之間

random庫

使用random庫主要目的是生成隨機數 ,其中 最基本的函數是random.random(),它生成 一個[0.0, 1.0)之間的隨機小數,其餘隨 機函數都是基於這個函數擴展而來。

函數 描述
seed(a=None) 初始化隨機數種子,默認值爲當前系統時間
random() 生成一個[0.0, 1.0)之間的隨機小數
randint(a, b) 生成一個[a,b]之間的整數
getrandbits(k) 生成一個k比特長度的隨機整數
randrange(start, stop[, step]) 生成一個[start, stop)之間以step爲步數的隨機整數
uniform(a, b) 生成一個[a, b]之間的隨機小數
choice(seq) 從序列類型(例如:列表)中隨機返回一個元素,從列表隨機選一個
shuffle(seq) 將序列類型中元素隨機排列,返回打亂後的序列
sample(pop, k) 從pop類型中隨機選取k個元素,以列表類型返回
1
2
3
4
5
6
7
8
9
10
11
from random import *
seed(10)
random()
0.5714025946899135
random()
0.4288890546751146
seed(10)   #再次設置相同的種子,則後續產生的隨機數相同,因此說計算機獲得的隨機數都不是真正意義上的隨機
random()
0.5714025946899135
random()
0.4288890546751146

time庫

time庫的功能主要分爲3個方面:時間處理、 時間格式化和計時

時間處理主要包括4個函數:time.time()、 time.gmtime()time.localtime() 、time.ctime()

時間格式化主要包括3個函數:time.mktime()、 time.strftime()time.strptime()

計時主要包括3個函數:time.sleep() 、 time.monotonic()time.perf_counter()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from time import *
now=time() #獲取當前時間戳
print(now)
print(gmtime(now)) #獲取當前時間戳對應 的struct_time對象
print(localtime(now)) #獲取當前時間戳對 應的本地時間的struct_time對象
print(ctime(now)) #獲取當前時間戳對應的 易讀字符串表示
print(mktime(localtime(now))) #將struct_time對象t轉換爲時間戳
print(strftime("%Y-%m-%d %H:%M:%S",localtime(now))) #利用一個 格式字符串,對時間格式進行表達。
timeString='2019-01-26 12:55:20'
print(strptime(timeString,"%Y-%m-%d %H:%M:%S")) #提取字符串中時間來生成strut_time對象

#輸出結果:
1563460629.0969484
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=14, tm_min=37, tm_sec=9, tm_wday=3, tm_yday=199, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=22, tm_min=37, tm_sec=9, tm_wday=3, tm_yday=199, tm_isdst=0)
Thu Jul 18 22:37:09 2019
1563460629.0

time.struct_time(tm_year=2019, tm_mon=1, tm_mday=26, tm_hour=12, tm_min=55, tm_sec=20, tm_wday=5, tm_yday=26, tm_isdst=-1)

time庫與程序計時很是重要噢,這裏能夠自行寫一個較屢次數的循環,好比一個10000次的循環,而後每100次輸出如下當前時間來了解。

第十章 第三方庫概覽

考綱考點

第三方庫的獲取和安裝、腳本程序轉變爲可執行程序的第三方庫:PyInstaller庫(必選)、jieba庫(必選)、wordcloud庫(可選)

Python第三方庫的獲取和安裝

三個方法:pip工具安裝、自定義安裝、文件安裝

pip工具安裝

最經常使用且最高效的Python第三方庫安裝方式是 採用pip工具安裝。pip是Python官方提供並維 護的在線第三方庫安裝工具。 能夠安裝超 過90%以上的第三方庫。在Mac OS X和Linux等操 做系統中,pip工具幾乎能夠安裝任何Python第三方庫, 在Windows操做系統中,有一些第三方庫仍然須要用其餘方式嘗試安裝。

安裝方式,打開cmd命令行就能夠,而後pip install <擬安裝庫名>

另外輸入命令pip -h回車還能夠查看pip經常使用的子命令, pip支持安裝(install)、下載(download)、 卸載(uninstall)、列表(list)、查看(list)、 查找(search)等一系列安裝和維護子命令。

自定義安裝

自定義安裝指按照第三方庫提供的步驟和方式安裝。以科學計算 用的numpy爲例,開發者維護的官方主頁是: http://www.numpy.org/ 瀏覽該網頁找到下載連接,以下: http://www.scipy.org/scipylib/download.html 進而根據指示步驟安裝。

文件安裝

爲了解決這類第三方庫安裝問題,美國加州大學爾灣分 校提供了一個頁面,幫助Python用戶得到Windows可直 接安裝的第三方庫文件,連接地址以下: http://www.lfd.uci.edu/~gohlke/pythonlibs/

這裏以scipy爲例說明,首先在上述頁面中找到scipy庫 對應的內容。選擇其中的.whl文件下載,這裏選擇適用 於Python 3.5版本解釋器和32位系統的對應文件:scipy0.17.1-cp35-cp35m-win32.whl,下載該文件到 D:\pycodes目錄。 而後,採用pip install D:\pycodes\scipy-0.17.1-cp35-cp35m-win32.whl 命令安裝該文件。

優先使用pip安裝,沒網的時候提早下載.whl文件,而後使用文件安裝,就ok

第三方庫

PyInstaller庫

PyInstaller是一個十分有用的Python第三方庫,它可以 在Windows、Linux、Mac OS X等操做系統下將Python 源文件打包,變成直接可運行的可執行文件。 經過對源文件打包,Python程序能夠在沒有安裝Python 的環境中運行,也能夠做爲一個獨立文件方便傳遞和管理。能夠試試用pip安裝命令本身安裝試試啊。

而後使用PyInstaller <Python源程序文件名>進行打包,執行完畢後,源文件所在目錄將生成dist和build 兩個文件夾。最終的打包程序在dist內部與源文 件同名的目錄中。PyInstaller -F <Python源程序文件名>將Python文件生成一個獨立可執行的文件。執行後在dist目錄中出現了SnowView.exe文件, 沒有任何依賴庫,便可執行。

參數 功能
-h, –help 查看幫助
–clean 清理打包過程當中的臨時文件
-D, –onedir 默認值,生成dist目錄
-F, –onefile 在dist文件夾中只生成獨立的打包文件
-i < 圖 標 文 件 名 .ico > 指定打包程序使用的圖標(icon)文件

jieba庫

因爲中文文本中的單詞不是經過空格或者標點符號分割,中文及相似語言存在一個重要的「分詞」問題。 jieba(「結巴」)是Python中一個重要的第三 方中文分詞函數庫。pip install jieba

jieba庫支持三種分詞模式:精確模式,將句子最 精確地切開,適合文本分析;全模式,把句子中全部能夠成詞的詞語都掃描出來,速度很是快,可是不能解決歧義;搜索引擎模式,在精確模式基礎上,對長詞再次切分,提升召回率,適合用於搜索引擎分詞。

對中文分詞來講,jieba庫只須要一行代碼便可。

1
2
3
4
5
import jieba 
ls=jieba.lcut("全國計算機等級考試")
print(ls)
#而後就:
['全國', '計算機', '等級', '考試']

jieba.lcut(s)是最經常使用的中文分詞函數,用於精準 模式,即將字符串分割成等量的中文詞組,返回結果是列表類型。

jieba.lcut(s, cut_all = True)用於全模式,即將字 符串的全部分詞可能均列出來,返回結果是列表類型,冗餘性最大。

jieba.lcut_for_search(s)返回搜索引擎模式,該 模式首先執行精確模式,而後再對其中長詞進一步切分得到最終結果。

jieba.add_word()函數,顧名思義,用來向jieba 詞庫增長新的單詞。這樣再將中文分詞的時候就會按照新添加的詞庫來分。

wordcloud庫

wordcloud庫是專門用於根據文本生成詞雲的 Python第三方庫,十分經常使用且有趣。pip按照噢。

wordcloud庫的使用十分簡單,以一個字符串爲 例。其中,產生詞雲只須要一行語句

1
2
3
4
5
6
7
form wordcloud import WordClout
txt="Github is funny,I like github"
wordcloud=WordCloud().generate(txt)
words = jieba.lcut(txt) # 精確分詞
newtxt = ' '.join(words) # 空格拼接
wordcloud123=WordCloud(font_path="msyh.ttc").generate(newtxt)
wordcloud.to_file('testcloud.png') #也能夠存爲圖片

在生成詞雲時,wordcloud默認會以空格或標點 爲分隔符對目標文本進行分詞處理。對於中文文本,分詞處理須要由用戶來完成。通常步驟是先將文本分詞處理,而後以空格拼接,再調用 wordcloud庫函數。

還有wordcloud庫與可視化詞雲的使用,網不行了,無法實戰演示

第十一章 Python第三方庫縱覽

考點考綱

更普遍的Python計算生態,只要求瞭解第三方庫的名稱,不限於如下領域: 網絡爬蟲、數據分析、文本處理、數據可視化、用戶圖形界面、機器學習、Web開發、遊戲開發等

如下內容瞭解一下就好了

網絡爬蟲方向

網絡爬蟲是自動進行HTTP訪問並捕獲HTML頁 面的程序。Python語言提供了多個具有網絡爬 蟲功能的第三方庫。這裏,僅介紹2個經常使用的 Python網絡爬蟲庫:requests和scrapy。

requests庫是一個簡潔且簡單的處理HTTP請求的第三方 庫,它的最大優勢是程序編寫過程更接近正常URL訪問 過程。這個庫創建在Python語言的urllib3庫基礎上。 request庫支持很是豐富的連接訪問功能。

scrapy是Python開發的一個快速的、高層次的Web獲取 框架。不一樣於簡單的網絡爬蟲功能,scrapy框架自己包 含了成熟網絡爬蟲系統所應該具備的部分共用功能,用途普遍,能夠應用於專業爬蟲系統的構建、數 據挖掘、網絡監控和自動化測試等領域。

數據分析方向

數據分析是Python的一個優點方向,具備大批高質量的 第三方庫。這裏僅介紹3個最經常使用的生態庫:numpy、 scipy和pandas

numpy是Python的一種開源數值計算擴展第三方庫,用 於處理數據類型相同的多維數組(ndarray),簡稱「數 組」。 這個庫可用來存儲和處理大型矩陣,比Python語言提供 的列表結構要高效的多。numpy提供了許多高級的數值 編程工具,如:矩陣運算、矢量處理、N維數據變換等。numpy內部是C語言編寫,對外採用Python語言進行封 裝,所以,在進行數據運算時,基於numpy的Python程 序能夠達到接近C語言的處理速度。numpy也成爲 Python數據分析方向各其餘庫的基礎依賴庫,已經成爲 了科學計算事實上的「標準庫」。

scipy是一款方便、易於使用、專爲科學和工程設計的 Python工具包。在numpy庫的基礎上增長了衆多的數學、 科學以及工程計算中經常使用的庫函數。它包括統計、優化、整合、線性代數、傅里葉變換、信號分析、圖像處理、常微分方程求解等衆多模塊。

pandas是基於numpy擴展的一個重要第三方庫,它是爲 瞭解決數據分析任務而建立的。Pandas提供了一批標準 的數據模型和大量快速便捷處理數據的函數和方法,提供了高效地操做大型數據集所需的工具。 pandas提供兩種最基本的數據類型:Series和DataFrame,分別表明一維數組和二維數組類型。

文本處理方向

Python語言很是適合處理文本,所以,在這個 方向也造成了大量有價值的第三方庫。這裏介紹 4個最經常使用的生態庫:pdfminer、openpyxl、 python-docx、beautifulsoup4。

pdfminer是一個能夠從PDF文檔中提取各種信 息的第三方庫。與其餘PDF相關的工具不一樣,它可以徹底獲取並分析 PDF 的文本數據,Pdfminer可以獲取PDF中文本的準確位置、字體、行數等信息,可以將PDF文件轉換爲HTML及文本格式。pdfminer包含兩個重要工具:pdf2txt.py和dumppdf.py。pdf2txt.py可以從PDF文件中提取全部文本內容。 dumppdf.py可以把PDF文件內容變成XML格式,並進一步提取其中的圖片。

openpyxl是一個處理Microsoft Excel文檔的Python第三方庫,它支持讀寫Excel的xls、xlsx、xlsm、xltx、xltm 等格式文件,並進一步能處理Excel文件中excel工做表、 表單和數據單元。

python-docx是一個處理Microsoft Word文檔的Python第三方庫,它支持讀取、查詢以及修改doc、docx等格 式文件,並可以對Word常見樣式進行編程設置,包括: 字符樣式、段落樣式、表格樣式等,進一步可使用這
個庫實現添加和修改文本、圖像、樣式和文檔等功能。

beautifulsoup4庫,也稱爲BeautifulSoup庫或 bs4庫,用於解析和處理HTML和XML。須要注意,它不是BeautifulSoup庫。它的最大優勢是能根據HTML和XML語法創建解析樹,進而高效解析其中的內容,而且能夠將數據從HTML和XML文件中解析出來,它可以提供一種符合習慣的方法去遍歷搜索和修改 解析樹,將專業的Web頁面格式解析部分封裝成函數,提供了若干有用且便捷的處理函數。

數據可視化方向

數據可視化指根據數據特色將其展現爲易於理解 圖形的過程。Python語言在數據可視化方面具 有較強的優點。這裏介紹3個最經常使用的生態庫: matplotlib、TVTK、mayavi。

matplotlib是提供數據繪圖功能的第三方庫,主 要進行二維圖表數據展現,普遍用於科學計算的 數據可視化。使用這個庫能夠利用Python程序 繪製超過100種數據可視化效果。

TVTK庫在標準的VTK庫之上用Traits庫進行封裝的 Python第三方庫。視覺工具函數庫(VTK)是一個開源、 跨平臺、支持平行處理的圖形應用函數庫,它是專業可 編程的三維可視化工具。TVTK在Python生態系統中被 等同於VTK。

mayavi基於VTK開發,徹底用Python編寫,提供了一個 更爲方便實用的可視化軟件,能夠簡潔地嵌入到用戶編 寫的Python程序中,或者直接使用其面向腳本的API快 速繪製三維可視化圖形。值得注意的是,mayavi也被稱 爲mayavi2。 mayavi庫在Windows平臺上暫時不能方便的使用pip命 令安裝,建議使用文件安裝,請下載mayavi對應版本文 件,而後在本地安裝。

用戶圖形界面方向

Python標準庫內置了一個GUI庫——tkinter,這 個庫基於Tck/Tk開發,然而,這個庫十分陳舊, 提供的開發控件也頗有限,編寫出來的GUI風格 與現代程序GUI風格相差甚遠,從用戶體驗角度 說,tkinter庫並不成熟。 這裏介紹3個高質量的用戶圖形界面Python生態 庫:pyqt五、wxpython、pygtk。

pyqt5是Qt5應用框架的Python第三方庫,它有超過620個類和近6000個函數和方法。它是 Python中最爲成熟的商業級GUI第三方庫。這個庫是Python語言當前最好的GUI第三方庫,它能夠在Windows、Linux和Mac OS X等操做系統上跨平臺使用。pyqt5採用「信號-槽」機制將事件和對應的處理 程序進行綁定。pyqt5窗體有不少內置信號,也能夠自定義信號。

wxPython是Python語言的一套優秀的GUI圖形庫,它 是跨平臺GUI庫wxWidgets的Python封裝,可使 Python程序員可以輕鬆地建立健壯可靠、功能強大的圖 形用戶界面的程序。

pygtk是基於GTK+的Python語言封裝,它提供了各式的 可視元素和功能,可以輕鬆建立具備圖形用戶界面的程 序。pygtk具備跨平臺性,利用它編寫的代碼可以不加修 改地穩定運行在各操做系統中,如Windows、MacOS、 Linux等。

機器學習方向

機器學習是人工智能領域的一個重要分支, Python語言也是機器學習和人工智能的重要基 礎語言。這裏介紹3個高質量的機器學習框架: Scikit-learn、TensorFlow、Theano。

Scikit-learn是一個簡單且高效的數據挖掘和數據分析工 具,它基於NumPy、SciPy和matplotlib構建。Scikitlearn的基本功能主要包括6個部分:分類,迴歸,聚類, 數據降維,模型選擇和數據預處理。Scikit-learn也被稱 爲sklearn。

TensorFlow是谷歌公司基於DistBelief進行研發的第二代 人工智能學習系統,也是用來支撐著名的AlphaGo系統 的後臺框架。Tensor(張量)指N維數組,Flow(流) 指基於數據流圖的計算,TensorFlow描述張量從流圖的 一端流動到另外一端的計算過程。

Theano爲執行深度學習中大規模神經網絡算法的運算而 設計,擅長處理多維數組。Theano開發始於2007,能夠 理解它是一個運算數學表達式的編譯器,並能夠高效運 行在GPU或CPU上。Theano是一個偏向底層開發的庫, 更像一個研究平臺而非單純的深度學習庫。

Web開發方向

Web開發是Python語言流行的一個重要方向, 主要用於服務器後端開發。根據Python Web開 發框架的複雜程度,這裏依次介紹3個Python第 三方生態庫:Django、Pyramid、Flask。

Django是Python生態中最流行的開源Web應用框架。 Django採用模型、模板和視圖的編寫模式,稱爲MTV模 式。Django中提供了開發網站常常用到的模塊,Django 的開發理念是DRY(Don’t Repeat Yourself),用於鼓勵快 速開發,進而減小程序員能夠創建一個高性能Web應用 所花費的時間和精力,造成一種一站式解決方案。

Pyramid是一個通用、開源的Python Web應用程序開發 框架。它主要的目的是讓Python開發者更簡單的建立 Web應用,相比Django,Pyramid是一個相對小巧、快 速、靈活的開源Python Web框架。Pyramid仍然面向較 大規模的Web應用,但它更關注靈活性,開發者能夠靈 活選擇所使用的數據庫、模板風格、URL結構等內容。

Flask是輕量級Web應用框架,相比Django和Pyramid, 它也被稱爲微框架。使用Flask開發Web應用十分方便, 甚至幾行代碼便可創建一個小型網站。Flask核心十分簡 單,並不直接包含諸如數據庫訪問等的抽象訪問層,而是經過擴展模塊形式來支持。

遊戲開發方向

遊戲開發是一個有趣的方向,在遊戲邏輯和功能 實現層面,Python已經成爲重要的支撐性語言。 這裏介紹3個Python第三方生態庫:Pygame、 Panda3D、cocos2d。

Pygame是在SDL庫基礎上進行封裝的、面向遊 戲開發入門的Python第三方庫,除了製做遊戲 外,還用於製做多媒體應用程序。其中,SDL (Simple DirectMedia Layer)是開源、跨平臺 的多媒體開發庫,經過OpenGL和Direct3D底層 函數提供對音頻、鍵盤、鼠標和圖形硬件的簡潔
訪問。Pygame是一個遊戲開發框架,提供了大量與遊 戲相關的底層邏輯和功能支持,很是適合做爲入門庫理解並實踐遊戲開發。

Panda3D是一個開源、跨平臺的3D渲染和遊戲開發庫, 簡答說,它是一個3D遊戲引擎,由迪士尼和卡耐基梅隆 大學娛樂技術中心共同進行開發。Panda3D支持Python 和C++兩種語言,但對Python支持更全面。 Panda3D支持不少當代先進遊戲引擎所支持的特性:法 線貼圖、光澤貼圖、HDR、卡通渲染和線框渲染等。

cocos2d是一個構建2D遊戲和圖形界面交互式應用的框 架,它包括C++、JavaScript、Swift、Python等多個版 本。cocos2d基於OpenGL進行圖形渲染,可以利用GPU 進行加速。cocos2d引擎採用樹形結構來管理遊戲對象, 一個遊戲劃分爲不一樣場景,一個場景又分爲不一樣層,每一個層處理並響應用戶事件。

相關文章
相關標籤/搜索