計算機二級Python


概述

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

第一章 程序設計語言概述

考綱考點:

1

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

程序設計語言——計算機與人類之間的翻譯官,所以稱為交互體系,翻譯官用的語言稱為計算機程序,就像人類的語言有語法等等規則一樣。

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

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

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) 將一個元素為字符串的列表寫入文件

數據組織的維度

1、2、3、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計算生態

考綱考點

1、基本的Python內置函數 2、了解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生態 庫:pyqt5、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引擎采用樹形結構來管理游戲對象, 一個游戲划分為不同場景,一個場景又分為不同層,每個層處理並響應用戶事件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM