【學習筆記】PYTHON語言程序設計(北理工 嵩天)
1 Python基本語法元素
1.1 程序設計基本方法
計算機發展歷史上最重要的預測法則 摩爾定律:單位面積集成電路上可容納晶體管數量約2年翻倍 cpu/gpu、內存、硬盤、電子產品價格等都遵循此定律
50年來計算機是唯一一個指數發展的領域
源代碼、目標代碼(機器代碼)
編譯、解釋
靜態語言、腳本語言
靜態語言編譯器一次性生成目標代碼,優化更沖份,程序運行速度更快
腳本語言 執行程序時需要源代碼,維護更靈活
程序的基本設計方法IPO
I:input 文件輸入、網絡輸入、控制臺輸入、交互界面輸入、內部參數輸入
P:process 處理
O:output 控制臺輸出、圖形輸出、文件輸出、網絡輸出、操作系統內部輸出
6個步驟:
-分析問題:分析問題的計算部分,想清楚
-劃分邊界:劃分問題的功能邊界,規劃IPO
-設計算法:設計問題的求解算法,關注算法
-編程
-調試測試
-升級維護
3個精簡步驟:確定IPO、編程、調試運行
計算思維(編程體現了一種抽象交互關系、自動化執行的思維模式)、邏輯思維、實證思維
1.2 Python開發環境配置
python 蟒蛇
psf 擁有者,開放、開源精神
Guido van Rossum創立
2002年 2.x
2008年 3.x
python3不兼容python2
交互式、文件式
linux自帶python2和python3,無需安裝,不過沒有pip,要安裝apt install python3-pip
1.3 實例1:溫度轉換
實例1:溫度轉換
需求:攝氏度與華氏度相互轉換
#TempConvert.py
TempStr = input("請輸入帶有符號的溫度值: ")
if TempStr[-1] in ['F', 'f']:
C = (eval(TempStr[0:-1]) - 32)/1.8
print("轉換后的溫度是{:.2f}C".format(C))
elif TempStr[-1] in ['C', 'c']:
F = 1.8*eval(TempStr[0:-1]) + 32
print("轉換后的溫度是{:.2f}F".format(F))
else:
print("輸入格式錯誤")
1.4 Python程序語法元素分析
程序的格式框架:
代碼高亮 是輔助
縮進是語法要求 一般4個空格或者1個tab 表達代碼間包含和層次關系的唯一手段
注釋:單行注釋 # 多行注釋 ”’ ”’
命名:給變量關聯標識符的過程
命名大小寫敏感、首字符不能是數字、不與保留字相同
保留字:被編程語言內部定義并保留使用的標識符 也大小寫敏感 33個

數據類型
字符串
用‘’或“”
正向遞增序號、反向遞減序號 正向0開始編號
索引: 可以使用[M]索引其中單個字符
切片:可以使用[M:N]返回其中一段子串,從第M到第N-1個字符
數字類型:整數、浮點數
列表:表示0到多個數據組成的有序序列,采用,分隔各元素,使用in判斷一個元素是否在列表中
= 賦值主語句
分支語句if elif else構成
eval 評估函數 去除參數最外側引號并執行余下語句的函數
垂直輸出hello world
for i in “Hello World”:
print(i)
輸出
x = input()
print(eval(x)**0,eval(x)**1,eval(x)**2,eval(x)**3,eval(x)**4,eval(x)**5)
2. Python基本圖形繪制
2.1 深入理解Python語言
計算機演進過程:
1946-1981 計算機系統結構時代 計算能力問題 1981年個人pc誕生
1981-2008 網絡和視窗時代 交互問題 2008 Android誕生 標志pc轉向移動
2008-2016 復雜信息系統時代 數據問題 2016年alpha go打敗人類
2017- 人工智能時代 人類的問題
新計算時代 過度到人工智能時代的中間時代
編程語言的初心
不完全統計600多中語言 常用的也就那么20來種
python已經在tiobe排行超過C++躍居第三

Python語言是通用語言、腳本語言、開源語言、跨平臺語言、多模型語言
–強制可讀性
–較少的底層語法元素
–多種編程方式
–支持中文字符
–C代碼量的10% 語法簡潔 *10
–13萬第三方庫 生態高產 *10
–快速增長的計算生態 每年2萬
–避免重復造輪子
–開放共享
–跨操作系統平臺
人生苦短 我學Python
–C/C++:C歸C Python歸Python
–Java:針對特定開發和崗位需求
–HTML/CSS/JS:不可替代的前端技術,全棧能力
-R/GO/Matlab等:特定領域
Python是最高產的程序設計語言
–掌握抽象并求解計算問題綜合能力的語言
-了解產業界解決復雜計算問題方法的語言
-享受利用編程將創新變為實現樂趣的語言
工具決定思維:關注工具變革的力量!
python具有最龐大的生態庫,是唯一的超級語言,前進步伐不可阻擋
2.2 實例2:Python蟒蛇繪制

2.3 模塊1: turtle庫的使用
turtle庫基本介紹
import 保留字 引入turtle繪圖庫 海龜繪圖體系
turtle庫是turtle繪圖體系的Python實現 1969年誕生,主要用于程序設計入門 Python的標準庫之一 入門級的圖形繪制函數庫
Python計算生態=標準庫+第三方庫
庫library,包package,模塊module ,統稱模塊
有一只海龜,其實在窗體正中心,在畫布上游走,走過的軌跡繪制的圖形,海龜由程序控制,可以變換顏色寬度
turtle繪圖窗體布局
turtle的一個畫布空間 最小單位是像素
屏幕坐標系:屏幕左上角為0 0
turtle.setup(width,height,startx,starty)后兩個可選 默認屏幕中央 并不是必須的 用來設置窗體大小和窗體左上角與屏幕左上角的相對位置
turtle空間坐標系:
絕對坐標 海龜在屏幕中央 記為(0,0)坐標原點 turtle.goto(x,y)
海龜坐標 以海歸的視角turtle.fd(d),turtle.bk(d),turtle.circle(r,angle) 左側r為止為中心行走angle角度的弧線
turtle角度坐標體系
絕對角度 改變海龜前進方向 turtle.seth(angle)
海龜角度 turtle.left(angle),turtle.right(angle)
RGB色彩體系 0-255整數或 0-1 的小數
默認采用小數制,可切換為整數制 turtle.colormode(mode) mode為1.0或255
2.4 turtle語法元素分析
庫引用
擴充Python程序功能的方式 使用import保留字完成,采用<a>.<b>()的編碼風格
from turtle import* 缺點 函數重名 適用于短的程序
from turtle import函數名
可以as保留字起別名 import turtle as t –推薦使用
畫筆控制函數
畫筆操作后一直有效,一般成對出現
-turtle.penup() 別名turtle.pu() 抬起畫筆,海龜在飛行
-turtle.pendown() 別名turtle.pd() 落下畫筆,海龜在爬行
畫筆設置后一直有效,直到下次設置
-turtle.pensize(width) 別名turtle.width(width) 畫筆寬度,海龜腰圍
-turtle.pencolor(color) color為顏色字符串或rgb值 畫筆顏色,海龜在涂裝
-顏色字符串 turtle.pencolor(“purple”)
-rgb小數 turtle.pencolor(0.63,0.13,0.94)
-rgb元組值 turtle.pencolor((0.63,0.13,0.94))
運動控制函數
控制海龜行進:走直線&走曲線
-turtle.forward(d) 別名 turtle.fd(d) 向前行進,海龜走直線 d可以為負數
-turtle.circle(r,extent=none) 根據半徑r繪制extent角度的弧線 r默認圓心在海龜左側r距離的位置 -extent繪制角度,默認是360度
方向控制函數
turtle.setheading() 別名turtle.seth() 控制海龜面對方向:絕對角度 海龜角度
turtle.left() turtle.right()
循環語句
for in 保留字
range() 產生循環計算序列 range(N) range(M,N) 0到N-1 M到N-1
turtle.done() 運行結束 不退出 需要手工退出 去掉就自動退出了
3. 基本數據類型
3.1 數字類型及其操作
整數類型:可正可負 取值無限 pow(x,y) x的y次方
4種進制表示:10進制、二進制0b或0B開頭 0b010、8進制0o或0O、16進制0x或0X
浮點型 10的308次方 精度達到:10的-16次方小數 即53位二進制 與數學中實數一致
不確定尾數 (浮點數運算)不是bug 53位二進制表示浮點數的小數部分 約10的-16次方 計算機中的二進制和十進制不完全對等
二進制表示小數,可以無限接近,但不完全相同
0.1+0.2 結果接近0.3
0.1+0.2 == 0.3 false 用round(x,d)處理不確定尾數 不確定位數一般發生在10的-16次方左右
科學計數法 e或E作為冪的符號,10為基數 <a>e<b> 4.3e-3
復數類型 z.real z.imag 獲得實部和虛部
數值運算操作符
x+y x-y x*y x/y x//y +x -y x%y x**y ps:x/y 是浮點數 別的語言中不是這樣
二元操作符有對應的增強賦值操作符
x op =y x+=y x-=y x*=y x/=y x//=y x%=y x**=y
類型間可以混合運算 結果生成為“最寬”的類型 隱式轉換 整數->浮點數->復數 如123+4.0=127.0
數值運算函數
abs(x) 絕對值
divmod(x,y) 商余 divmod(10,3) 結果是二元數(3,1)
pow(x,y[,z]) 冪余
round(x[,d]) 四舍五入
max(x1,x2,..)
min(x1,x2,..)
int(x) 顯示類型轉換, 變為整數,舍棄小數
float(x) 轉浮點數
complex(x) 轉復數
3.2 實例3:天天向上的力量
問題分析:持續的價值 一年365天每天進步1%,累計進步多少?相反,每天退步1%,累計剩下多少?如果三天打漁二天曬網呢?
每天進步或退步0.1%
如果是0.5% 1%呢

如果是工作日的力量?工作日進步1%,休息日退步1%
工作日的努力要達到多少才能和每天努力1%一樣?
3.3 字符串類型及操作
四種字符串表示方法:
由一對單引號或雙引號表示單行字符串
由一對三引號或三雙引號表示多行字符串
三單引號表示字符串,程序啥都不執行,相當于注釋,python實際沒有真正提供多行注釋
[M:N:K]根據步長對字符串切片 M和N均可以缺失,表示至開頭或至結尾
[::-1]倒序
轉義符\ \b 回退 \n 換行 \r 回車光標移動到行首
字符串操作符
x+y 連接兩個字符串
n*x或x*n 復制n次字符串x
x in s
字符串處理函數
len(x) 字符串長度 中英文長度都是1
str(x) 強制類型轉換為字符串 和eval相反操作
hex(x) 整數x轉變為8進制形式
oct(x) 整數x轉變為16進制形式
chr(x) 將unicode編碼返回其字符形式
ord(x) 上面的反操作
unicode編碼 統一字符編碼 從0到1114111(0x10FFFF) Python字符串每個字符都是unicode編碼
字符串處理方法
<a>.<b> 形式 面向對象的術語 表示對象的動作
8個字符串處理方法
.lower() .upper() 大小寫轉換
.split(sep=None) 字符串分割,返回一個列表 例:”a,b,c”.split(‘,’)結果是[‘a’, ‘b’, ‘c’]
.count(sub) 字符串sub在其中出現次數
.replace(old,new) 字符串替換
.center(width[,fillchar]) 字符串格式處理,字符串居中 例: ‘python’.center(30,’=’) 結果’============python============’
.strip(chars) 去除字符換兩邊字符 如:’= python= ‘.strip(‘ =np’)結果’ytho’
.join(iter) 填充字符 如:’,’.join(‘12345′)結果’1,2,3,4,5’
字符串類型的格式化
格式化是對字符串進行格式化表達的方式
.format方法 用法:<模板字符串>.format(<逗號分隔的參數>)
槽 相當于占位信息符,只在字符串中有用
分為2組
前三個參數是一組 默認填充空格左對齊
如: “{:=^20}”.format(“python”) 結果: ‘=======python=======’
如: “{0:,.2f}”.format(12345.6789) 結果 ‘12,345.68’
如:”{0:b} {0:c} {0:d} {0:o} {0:x} {0:X}”.format(425) 結果’110101001 ? 425 651 1a9 1A9′
如: “{0:e} {0:E}{0:f} {0:%}”.format(3.14) 結果 ‘3.140000e+00 3.140000E+003.140000 314.000000%’
3.4 模塊2:time庫的使用
time庫是Python中處理時間的標準庫
時間獲取
time() 獲取當前時間戳,即計算機系統內部時間值,浮點數 1970年1月1日0點0分開始到當前系統以秒為單位的浮點數 如:1537763974.4934046
ctime() 獲取當前時間,返回字符串,人類易讀 如:’Mon Sep 24 12:41:59 2018′
gmtime() 獲取當前時間,struct_time格式,計算機易處理的格式
如:time.struct_time(tm_year=2018, tm_mon=9, tm_mday=24, tm_hour=4, tm_min=42, tm_sec=52, tm_wday=0, tm_yday=267, tm_isdst=0)
時間格式化
strftime()
格式化字符串
striptime()
程序計時
perf_counter()
sleep()
3.5 實例4:文本進度條
問題分析:采用字符串方式打印可以動態變化的文本進度條 能在一行中逐漸變化
刷新的本質:用后打印的字符覆蓋之前的字符
print() 默認加換行 print( ,end=””)不換行 \r退格到行首
idle不是主要的運行環境 所以\r功能在idle屏蔽了 用shell執
文本進度條 簡單的開始

文本進度條 單行動態刷新
文本進度條 實例完整效果
4.程序的控制結構
4.1 分支結構
單分支結構
if <條件>:
<程序1>
二分支結構
if <條件1>:
<程序1>
else:
<程序2>
緊湊形式:適用于簡單表達式的二分支結構
<表達式1> if <條件> else <表達式2>
如:
guess = eval(input())
print(“猜{}了”.format(“對”if guess == 99 else ”錯”))
多分支結構
if <條件1>:
<程序2>
elif <條件2>:
<程序3
…
else:
<程序n>
條件判斷> >= < <= == !=
條件組合x and y x or y not x
異常處理
try:
程序1
except [NameError]:
程序2
try:
程序1
except:
程序2
else:
程序3
finally:
程序4
4.2 實例5:身體質量指數BMI
問題分析:BMI是身體肥胖程度的刻畫(BODY MASS INDEX) BMI=體重(kg)/身高的平方(m),接收用戶信息判斷身體肥胖程度

4.3 循環結構
for 遍歷循環
for <循環變量> in <遍歷結構>:
<語句塊>
記數循環
for I in range(5):
print(i)
for I in range(m:n:k):
print(i)
字符串遍歷循環
for c in s:
<語句塊>
for c in “Python123”:
print(c)
列表遍歷循環ls是列表
for item in ls:
<語句塊>
for item in [123,”py”,456]:
print(item,end=’,’)
文件遍歷循環 fi是文件標識符
for line in fi:
<語句塊>
while 無限循環
while <條件>:
<語句>
循環控制保留字break continue
循環擴展:兩種循環后面都可以加else分支 else為沒有被break退出是執行的,作為正常運行的獎勵
4.4 模塊3:random庫使用
random庫是使用隨機數的python標準庫
計算機沒法產生真正的隨機數,但是可以使用梅森旋轉算法產生偽隨機數
使用 import random
random庫包括2類函數,常用共8個
基本隨機數函數:seed(),random()
括展隨機數函數:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
隨機數種子
seed(a=None) 初始化給定的隨機數種子,默認為系統當前時間,例:random.seed(10) #產生種子10對應的序列 0.5714025946899135 0.4288890546751146 ..
random() 生成一個[0.0,1.0)之間的隨機小數,例:random.random()
為什么要使用隨機數種子呢,因為可以使用相同的隨機數種子復現程序的執行情況
randint(a,b) 生成一個[a,b]之間的整數,例:random.randint(10,100)
randrange(m,n[,k]) 生成一個[m,n)之間以k為步長的隨機整數,例:random.random(10,100,10)
getrandbits(k) 生成一個k比特長的隨機整數
uniform(a,b) 生成一個[a,b]之間的隨機小數
choice(seq) 從序列中隨機選擇一個元素,例:random.choice([1,2,3,4,5,6])
shuffle(seq) 將序列中元素隨機排序,返回打亂后的序列,例:s=[1,2,3,4];random.shuffle(s);print(s)
4.4 實例6:圓周率計算

蒙特卡羅方法 工程方法
數學思維
計算思維
time庫perf_counter來關注程序性能
據統計,程序80%的時間消耗在不到10%的代碼上 有點兒類似28法則
關注循環
5.函數和代碼復用
5.1 函數的定義與使用
函數定義
函數是一段具有特定功能可復用的語句
df <函數名>(參數):
<函數體>
return <返回值>
其中參數可以是0個到多個,是占位符
函數不經過調用是不會執行的
函數就是IPO的實現
函數也是一段完整代碼的封裝
函數的參數傳遞
可選參數傳遞:可以為參數指定默認值,變為可選參數,可選參數要放在非可選參數之后
可變參數傳遞:不確定參數有多少個

參數傳遞的兩個方式
默認是按照位置,可以按照名稱方式傳遞
函數的返回值
return可以返回0個或多個結果
函數可以有返回值也可以沒有
可以有return 也可以沒有
返回多個值的時候是返回元組類型 用() 元素用逗號分隔
局部變量與全局變量
函數外邊的是全局變量,里面是局部變量
局部變量是函數內部的占位符,可能與全局變量重名單不相同
函數運行結束后局部變量被釋放
規則1:局部變量與全局變量是不同變量
可以使用global保留字在函數內部使用全局變量
規則2:局部變量如果是組合數據類型且未被創建,等同于全局變量 組合數據類型實際是指針的原因

lambda函數
lambda函數返回函數名作為結果
lambda函數是一種匿名函數,沒有名字的函數
lambda函數用于定義一種簡單的能夠在一行內表示的函數
是一種函數的緊湊表達形式
<函數名> = lambda <參數>:<表達式>
f = lambda x,y : x + y
f(10,15)
謹慎使用lambda函數
用于特定的方法的參數
一般就算是1行代碼,也建議用def方式定義
5.2 實例7:七段數碼管繪制
問題分析:用turtle繪制數碼管樣式的時間
5.3 代碼復用與函數遞歸
代碼復用
代碼抽象化:使用函數等方法對代碼賦予更高級別的定義
函數和對象是代碼復用的2中主要形式
函數是在代碼層面建立了初步抽象
對象有屬性和方法,是更高級別的抽象
封裝
模塊化設計
分而治之:
通過函數或對象封裝將程序劃分為模塊與模塊間的表達
主程序、子程序與子程序之間的關系
一般將子程序看作模塊,主程序看作模塊與模塊間的關系
是一種分而治之、分層抽象、體系化的設計思想
緊耦合:兩個部分之間交流很多,無法獨立存在
松耦合:兩個部分之間交流很少,可以獨立存在,有各自清晰簡單的接口
模塊化設計基本思路和原則:模塊內部緊耦合,模塊之間松耦合
函數遞歸:函數定義中調用自身的方式
兩個關鍵特征
鏈條:計算過程存在遞歸鏈條
基例:存在一個或者多個不需要再次遞歸的基例 遞歸的最末段
類似數學歸納法,先證明第一個取值命題成立,然后第n個取值命題成立,第n+1取值命題也成立,那么命題成立
遞歸可以理解為數學歸納法思維在編程中的體現
函數遞歸的調用
函數+分支語句 :基例和鏈條分別編寫代碼
3個小栗子


5.4 模塊4:Pyinstaller庫的使用
是第三方庫 需要安裝
pip工具
shell中使用使用 pyinstaller –F <文件名.py>
5.5 實例8:科赫雪花小包裹
分形幾何

6. 組合數據類型
6.1 集合類型及操作
集合是多個元素的無序組合,每個元素唯一,不存在相同元素
集合元素不可更改,不能是可變數據類型,比如列表類型就不能作為元素,整數浮點數復數字符串元組類型等都是不可變數據類型
用{}表示,元素間用逗號分隔
建立集合用{}或者set()
例如:B = set(“pypy123”) 結果{‘1’,’2’,’3’,’p’,’y’}
建立空集合必須用set()
6個集合操作符
S | T 并
S – T 差
S & T 交
S ^ T 補
S <= T、S < T 包含與子集關系
S >= T、S > T
增強操作符
S |= T
S –= T
S &= T
S ^= T
10個集合處理方法
S.add(x) 如果x不在S中,將x元素加入S集合
S.discard(x) 移除S中元素x,如果x不在集合S中,不報錯
S.remove(x) 移除S中元素x,如果x不在S中,產生KeyError異常
S.clear() 移除S中所有元素
S.pop() 隨機返回S的一個元素,更新S,若S為空產生KeyError異常
S.copy() 返回集合S的一個副本
len(S) 返回個數
x in S 判斷S中是否有元素x
x not in S 同上相反
set(x) 將其他類型變量x轉變為集合類型
集合類型應用場景
包含關系的比較
數據去重

6.2 序列類型及操作
序列是有先后順序的一組元素
序列是一維元素向量,元素類型可以不同,類似C語言中的一維數組
元素間由序號引導,通過下標訪問序列的特定元素
序列是一個基類類型
一般不直接用序列類型而是使用其衍生類型,比如字符串、元組、列表
序列處理函數與方法

元組類型
元組是一種序列類型,一旦創建就不能被修改
使用()或者tuple()創建,元素間用逗號分隔
可以使用或不適用小括號,比如函數返回多個返回值就是使用沒有括號的元組類型,python內部認為是一個值,是一個元組
元組類型繼承了序列的所有通用操作
元組類型因為一旦定義不能修改,所以沒有特殊操作
列表類型及操作
列表是序列類型的擴展,十分常用
列表是一種序列類型,創建后可以隨意修改,長度無限制,元素類型可不同
列表本質是指針,如果通過賦值語句給另外一個變量,那么實際并沒有創建一個新列表,可以類似linux的硬鏈接,[]或者函數list()才是真正創建一個列表,賦值僅僅傳遞引用
一些例子
一些例子

序列類型應用場景
包含元組列表
元組用于元素不改變的場景,更多用于固定場景 比如函數返回值
列表則更加靈活,是常用的序列類型
最主要作用:表示一組有序數據并進而操作它們
元素遍歷 for item in lt
數據保護 利用元組不可修改的特性
6.3 實例9:基本統計值計算
問題分析:給出一組數據,給出概要理解,比如 求和、平均值、方差、中位數…
總個數:len()
求和:for … in
平均值:上2個除
方差:各數據與平均值的平方的和的平均數
中位數:排序,取中間的或者中間2個數平均數
6.4 字典類型及操作
字典類型的定義
映射 是一種鍵(索引)和值(數據)的對應
用{}或者dict()創建字典,鍵值對用:表示 {key:value,key2:value2…}
type()可以檢測變量的類型
{}可以用來聲明空字典,這就是集合類型中定義空集合不能用{}的原因
一些例子
6.5 模塊5:jieba庫的使用
優秀的中文分詞第三方庫
由于中文是連續書寫的 需要通過特定手段獲得單個詞語
jieba庫提供3種分詞模式,最簡單只需要掌握一個函數
通過中文詞庫方式識別確定漢字之間關聯概率 概率大的組成詞組,形成分詞效果
除了分詞,用戶也可以添加自定義的詞組
三種模式
精確模式:把文本精確的切分開,不存在冗余單詞 最常用的分詞模式
全模式:把文本中所有可能的詞語都掃描出來,存在冗余
搜索引擎模式:更加智能,在精確模式的基礎上,對長詞再次切分,存在冗余,在某些特定場景下使用
6.6 實例10:文本詞頻統計
問題分析:一篇文章,出現了哪些詞?哪些詞最多?
中英文各一個程序:分別是哈姆雷特和三國演義


7. 文件和數據格式化
7.1 文件的使用
文件的類型
文本文件、二進制文件 只是展示方式,本質上都是二進制數據
文本文件:由單一特定編碼組成的文件,如utf-8編碼 由于存在編碼,文本文件也被看為一個長字符串
二級制文件:數據間沒有統一字符編碼,01組成,比如png avi等文件
文件的打開和關閉
打開->操作->關閉 文件存儲狀態和占用狀態轉換
文件的打開
<變量名> = open(<文件名>,<打開模式>)
文件句柄
文件路徑和名稱,使用相對路徑或者絕對路徑,同一個路徑的話就直接文件名,斜杠\是轉移字符使用反斜杠/替換,或者\\
打開模式
<變量名>.close 關閉文件
當程序退出的時候,python也會自動關閉文件
文件內容的讀取
<f>.read(size=-1) 讀入全部內容,如果給出參數,讀入前size長度
<f>.readline(size=-1) 讀入一行,如果給了size,讀入該行前size長度
<f>.readlines(hint=-1) 讀入文件所有行,以每行為元素形成列表,hint參數可選,讀入前hint行
遍歷全文本
文件的逐行處理
文件寫入
<f>.write(s) 向文件寫入一個字符串或字節流 如:f.write(“abc”)
<f>.writelines(lines) 將一個元素全為字符串的列表寫入文件 如:ls=[‘a’,’b’,’c’],f.writelines(ls)
<f>.seek(offset) 改變當前文件操作指針的位置,offset含義如下:0文件開頭,1-當前位置,2-文件結尾
例子:
7.2 實例11:自動軌跡繪制
問題分析:根據腳本來繪制圖形 不是寫代碼而是寫數據繪制軌跡

自動化思維
將數據和功能分離開來
數據驅動
接口化設計
可以擴展
擴展接口設計,增加更多控制接口
擴展功能設計,增加弧形等更多功能
擴展應用需求,發展自動軌跡繪制到動畫繪制
7.3 一維數據的格式化
一維數據:由對等關系的有序或無序數據構成,采用線性方式組織,對應列表、集合、數組等概念
二維數據:由多個一維數據組成,是一維數據的組合形式
多維數據:是一維或二維數據在新唯獨上擴展形成,比如中國大學排行榜加入時間維度
高維數據:僅利用最基本的二元關系展示數據間的復雜結構,比如字典類型中的key-value形式
操作周期
一維數據的表示
如果數據間有序,使用列表類型
如果數據間無序,使用集合類型
一維數據的存儲
一維數據的處理
類似于一個驅動


7.4 二維數據的格式化和處理
二維列表
兩層for循環遍歷二維列表
csv:comma-separated values 逗號分隔 國際通用 一般.csv為擴展名
每行一個一維數據,無空行
一般的軟件都能生成csv格式文件
如果每個元素缺失,逗號要保留
表頭可以作為數據存儲,也可以令行存儲
如果數據中包含逗號,不同的軟件有不同的約定,比如轉義符或者其他方式
按行存或者按列存都行,一般索引習慣 ls[row][col] 先行后列,按行存
二維數據的處理
讀入處理

7.5 模塊6:wordcloud庫的使用
詞云展示的第三方庫
wordcloud庫把詞云當作一個WordCloud對象
wordcloud.WordCloud()代表一個文本對應的詞云
可以根據文本中詞語出現的頻率等參數繪制詞云
繪制詞云的形狀、尺寸、顏色都可以設定
w = wordcloud.WordCloud()
以WordCloud對象為基礎
配置參數、加載文本、輸出文件
常規方法
w.generate(txt) 向WordCloud對象w中加載文本txt 如:w.generate(“Python and WordCloud”)
w.to_file(filename) 將詞云輸出為圖像文件,.png或.jpg格式 如:w.to_file(“output.png”)
繪制詞云的步驟:
setp1:配置對象參數
setp2:加載詞云文本
step3:輸出詞云文件

生成默認400*200的圖片
wordcloud干啥了:
a.分隔:以空格為分隔單詞
b.統計:單詞出現次數并過濾
c.字體:根據統計配置字號
d.布局:顏色環境尺寸
對象參數
width 默認400
height 默認200
min_font_size 最小字號 默認4號
max_font_size 最大字號 根據高度自動調節
font_step 默認1,字體步進間隔
font_path 字體路徑,默認None,如:w=wordcloud.WordCloud(font_path=”msyh.ttc”)
max_words 指定詞云顯示的最大單詞數量,默認200 比如詞云顯示的不那么有力,可以修改這個
stop_words 指定排除單詞 如:w=wordcloud.WordCloud(stop_words={“Python”})
background_color 指定背景色 默認黑色
默認顯示的矩形效果,使用mask參數可以改變
中文的話需要先用jieba庫分詞,中文不是空格分隔的
7.6 實例12:政府工作報告詞云
常規矩形詞云
不規則詞云
8. 程序設計方法學
8.1 實例13:體育競技分析

自頂向下(設計) 分而治之
將一個總問題表達為若干個小問題組成的形式
使用相同的方法進一步分解小問題
解決復雜問題的有效設計方法
自底向上(執行) 模塊化集成
逐步組建復雜系統的有效測試方法
分單元測試,逐步組裝


8.2 Python程序設計思維
計算思維與程序設計
第三種人類思維特征
邏輯思維:以推理和演繹為特征,以數學為代表,A->B,B->C,A->C
實證思維:以實驗和驗證為特征,以物理為代表,引力波<-實驗
計算思維:以設計和構造為特征,計算機為代表,漢諾塔遞歸
有非常明顯的特征:抽象和自動化,抽象問題的計算過程并利用計算自動化求解(并不是抽象因果關系僅僅是抽象過程)
1+2+..+100 高斯 vs 累計
圓周率 高數求和 vs 蒙特卡洛方法
漢諾塔問題 邏輯推理的2的n次方-1 vs 遞歸
計算思維基于計算機強大的算力和海量的數據
抽象計算過程,關注設計和構造,而非因果
以計算機程序設計為主要實現手段
編程是將計算思維變為現實的手段
計算生態與Python語言
從開源運動說起…
-1983年,Richard Stallman啟動GNU項目
-1989年,GNU通用許可協議誕生,自由軟件時代到來 大教堂模式
-1991年,Linus Torvalds發布了Linux內核 集市模式(成為主流)
-1998年,網景瀏覽器開源,產生了Mozilla,開源生態逐步建立
計算生態以開源項目為組織形式,充分利用“共識原則”和“社會他人”組織人員,在競爭發展、相互依存和迅速更迭中完成信息技術的更新換代,形成了技術的自我演進路徑。
開源思想深入演化和發展,形成了計算生態
計算生態是沒有頂層設計、以功能為單位、具備三個特點:競爭發展、相互依存和迅速更迭
python
-以開源項目為代表的大量第三方庫 Python語言提供 > 13萬個第三方庫 并以兩萬+每年的速度發展
-庫的建設經過野蠻生長和自然選擇 同一個功能,Python語言提供2個以上第三方庫
-庫之間相互關聯使用,依存發展 Python庫間廣泛聯系,逐級封裝
-社區龐大,新技術更迭迅速 Alpha Go深度學習算法采用Python語言開源
API != 生態
創新:跟隨創新、集成創新、原始創新
-計算生態加速科技類應用創新的重要支撐
-發展科技產品商業價值的重要模式
-國家科技體系安全和穩固的基礎
刀耕火種 –> 站在巨人的肩膀上
-編程的起點不是算法而是系統
-變成如同搭積木,利用計算生態為主要模式
-編程的目標是快速解決問題
優質的計算生態 python123 由老師、產業人員共同篩選的優質生態https://python123.io/index/monthly_packages/201808
用戶體驗與軟件產品
實現功能 –> 關注體驗
用戶體驗指用戶對產品建立的主管感受和認識
關心功能實現,更要關心用戶體驗,才能做出好產品
編程只是手段,不是目的,程序最終為人類服務
提高用戶體驗的方法
方法1:進度展示
-如果程序需要計算時間,可能產生等待,請增加進度展示
-如果程序需要若干步驟,需要提示用戶,請增加進度展示
-如果程序可能存在大量次數的循環,請增加進度展示
方法2:異常處理
-當獲得用戶輸入時候,對合規性需要檢查,需要異常處理
-當讀寫文件時,對結果進行判斷,需要異常處理
-當進行輸入輸出時,對運算結果進行判斷,需要異常處理
其他方法:
-打印輸出:特定位置,輸出程序運行的過程信息verbose
-日志文件:對程序異常以及用戶的使用進行定期記錄
-幫助信息:給用戶多種方式提供幫助
軟件程序 到 軟件產品,其核心關鍵就是用戶體驗
基本的程序設計模式
IPO
模塊化設計
自頂向下設計
配置化設計 (自動軌跡繪制實例)
-引擎+配置:程序執行和配置分離,將可選參數配置化
-將程序開放變為配置文件編寫,擴展功能而不修改程序
-關鍵在于接口設計,清晰明了,靈活擴展,這是一種更高級別的設計思路
應用開發的四個步驟:
1.產品定義 對應用需求充分理解和明確定義
-產品定義,而不僅是功能定義,要考慮商業模式
2.系統架構 以系統方式思考產品的技術實現
-系統架構,關注數據流、模塊化、體系架構
3.設計與實現 結合架構完成關鍵設計及系統實現
-結合可擴展性、靈活性、是否適應未來需求變化等進行設計優化
4.用戶體驗 從用戶角度思考應用效果
-用戶至上,體驗優先,以用戶為中心構造軟件產品
8.3 Python第三方庫安裝
看見更大的Python世界
13萬個第三方庫 全區社區 https://pypi.org
PYPI
-Python Package Index
-PSF維護的展示全球Python計算生態的主站
-學會檢索并利用PyPI,找到合適的第三方開發程序
3種安裝方法:
-方法1(主要方法):使用pip命令
-方法2:集成安裝方法
-方法3:文件安裝方法
pip安裝方法(最主要的方法)
pip -h 可以查看幫助
pip install <第三方庫名> 安裝
pip install –U <第三方庫名> 升級
pip uninstall <第三方庫名> 卸載
pip download <第三方庫名> 下載單并不安裝
pip show <第三方庫名> 列出某個第三方庫的詳細信息
pip search 關鍵詞 搜索第三方庫
pip list 列出已安裝的第三方庫
集成安裝方法
結合安裝工具,批量安裝,不過這樣的安裝工具不多,推薦一個叫anaconda
文件安裝方法
為什么有些第三方庫用pip可以下載,單無法安裝?
-某些第三方庫下載后,需要編譯再安裝
-如果操作系統沒有編譯環境,則能下載單不能安裝
-可以找編譯后的版本來安裝嗎 http://www.lfd.uci.edu/~gohlke/pythonlibs UCI頁面 加州大學教授維護的 win系統的直接編譯后的版本
pip install 文件
8.4 模塊7:os庫的使用
os庫提供通用的、基本的操作系統交互功能
是python標準庫,由幾百個函數,包括常用路徑操作、進程管理、環境參數等幾類
-路徑操作:os.path子庫,處理文件路徑及信息
-進程管理:啟動系統中其他程序
-環境參數:獲得系統軟硬件信息等參數
路徑操作
os.path子庫以path為入口,用于操作和處理文件路徑
import os.path
import os.path as op



os庫進程管理
os.system(command) 調用其他程序
os庫之環境參數
獲取或改變系統環境信息
8.5 實例14:第三方庫安裝腳本
第三方庫自動安裝腳本
9 Python計算生態概覽
9.1 從數據處理到人工智能
從數據處理到人工智能的完整鏈條:數據表示->數據清洗->數據統計->數據可視化->數據挖掘->人工智能
Python庫之數據分析
Numpy:表達N維數組的最基礎庫
-Python接口使用,C語言實現,計算速度優異
-Python數據分析及科學計算的基礎庫,支撐Pandas等
-提供直接的矩陣運算、廣播函數、線性代數等功能
Pandas:Python數據分析高層次應用庫
-提供了簡單易用的數據結構和數據分析工具
-理解數據類型與索引的關系,操作索引即操作數據
-Python庫最主要的數據分析功能庫,基于Numpy開發
提供兩個數據結構:
Series = 索引 + 一維數據
DataFrame = 行列索引 + 二維數據
Scipy:數學、科學和工程計算功能庫
-提供了一批數學算法及工程數據運算功能
-類似Matlab,可用于傅里葉變換、信號處理等應用
–Python最主要的科學計算功能庫,基于Numpy開發
Python庫之數據可視化
Matplotlib:高質量的二維數據可視化功能庫,有大量子庫
-提供了超過100種數據可視化展示效果
-通過matplotlib.pyplot子庫調用各可視化效果
-Python最主要的數據可視化功能庫,基于Numpy開發
Seaborn:統計類數據可視化功能庫
-提供了一批高層次的統計類數據可視化展示效果
-主要展示數據間分布、分類和線性關系等內容
-基于Matplotlib開發,支持Numpy和Pandas
Mayavi:三維科學計算可視化功能庫
-提供了一批簡單易用的3D科學計算數據可視化展示效果
-目前是Mayavi2,三維可視化最主要的第三方庫
-支持Numpy、TVTK、Traits、Envisage等第三方庫
Python庫之文本處理
PyPDF2:用來處理pdf文件的工具集
-提供了一批處理PDF文件的計算功能
-支持獲取信息、分隔/整合文件、加密解密等
-完全Python語言實現,不需要額外依賴,功能穩定
NLTK:自然語言文本處理第三方庫
–提供了一批簡單易用的自然語言文本處理功能
-支持語言文本分類、標記、語法句法、語義分析等
-最優秀的Python自然語言處理庫
Python-docx:創建或更新word文檔的第三方庫
-提供創建或更新.doc .docx等文件的計算功能
-增加并配置段落、圖片、表格、文字等,功能全面
Python庫之機器學習
Scikit-learn:機器學習方法工具集
-提供一批統一化的機器學習方法功能接口
-提供聚類、分類、回歸、強化學習等計算功能
-機器學習最基本且最優秀的Python第三方庫
TensorFlow:AlphaGo背后的機器學習計算框架
-谷歌公司推動的開源機器學習框架
-將數據流圖作為基礎,圖節點代表運算,邊代表張量
-應用機器學習方法的一種方式,支撐谷歌人工智能應用
MXNet:基于神經網絡的深度學習計算框架
-提供可擴展的神經網絡及深度學習計算功能
-可用于自動駕駛、機器翻譯、語音識別等眾多領域
-Python最重要的深度學習計算框架
9.2 實例15:霍蘭德人格分析雷達圖
問題分析:
啥是雷達圖
霍蘭德認為:人格興趣和職業之間有內在的對應關系
人格分類:研究型、藝術型、社會型、企業型、傳統型、現實型
職業:工程師、實驗員、藝術家、推銷員、記事員、社會工作者
需求:雷達圖方式驗證霍蘭德人格分析
輸入:各職業人群結合興趣的調研數據
輸出:雷達圖
展示多維數據以及繪制雷達圖的能力
目標+沉浸+熟練
-編程的目標感:尋找感興趣的目標,尋(wa)覓(jue)之
-編程的沉浸感:尋找可實現的方法,思(zuo)考(mo)之
-編程的熟練度:練習、練習、再練習,熟練之
編程不是最主要的,編程的感覺才是最重要的
9.3 從Web解析到網絡空間
Python庫之網絡爬蟲
Requests:最友好的網絡爬蟲庫
-提供了簡單易用的類HTTP協議網絡爬蟲功能
-支持連接池、SSL、Cookies、HTTP(S)代理等
-Python最主要的頁面級網絡爬蟲功能庫
Scrapy:優秀的網絡爬蟲框架
-提供了構建網絡爬蟲系統的框架功能,半成品
-支持批量和定時頁面爬取、提供數據處理流程等
-Python最主要且最專業的網絡爬蟲框架
pyspider:強大的Web頁面爬取系統
-提供了完整的網頁爬取系統構建功能
-支持數據庫后端、消息隊列、優先級、分布式架構等
-Python重要的網絡爬蟲第三方庫
Python庫之Web信息提取
Beautiful Soup:HTML和XML的解析庫
-提供了解析HTML和XML等Web信息的功能
-又名beautifulsoup4或bs4,可以加載多種解析引擎
-常與網絡爬蟲庫搭配使用,如Scrapy、requests等
Re:正則表達式解析和處理功能庫
-提供了定義和解析正則表達式的一批通用功能
-可用于各類場景,包括定點的Web信息提取
-Python最主要的標準庫,無需安裝
Python-Goose:提取文章類型Web頁面的功能庫
-提供了對Web頁面中文章信息/視頻等元數據的提取功能
-針對特定類型Web頁面,應用覆蓋面較廣
相對于bs4庫,抽象層次更加高,更加方便
Python庫之Web網站開發
Django:最流行的Web應用框架
-提供了構建Web系統的基本應用框架
-MTV模式:模型(model)、模式(Template)、視圖(Views)
-Python最重要的Web應用框架,略微復雜的應用框架,比較適合專業的網站構建
Pyramid:規模適中的Web應用框架
-提供了簡單方便構建Web系統的應用框架
-不大不小,規模適中,適合快速構建并適度擴展類應用
-Python產品級Web應用框架,起步簡單可擴展性好
Flask:Web應用開發微框架
-提供了最簡單構建Web系統的應用框架
-特點是:簡單、規模小、快速
-Django > Pyramid > Flask好
Python庫之網絡應用開發
WeRoBot:微信公眾號開發框架
-提供了解析微信服務器消息及反饋消息的功能
-建立微信機器人的重要手段
aip:百度AI開放平臺接口
-提供了訪問百度AI服務的Python接口
-語音、人臉、OCR、NLP、知識圖譜、圖像搜索等領域
-Python百度AI應用的最主要方式
MyQR:二維碼生成第三方庫
-提供了生成二維碼的系列功能
-基本二維碼、藝術二維碼和動態二維碼
9.4 從人機交互到藝術設計
Python庫之圖形用戶界面
PyQT5:QT開放框架的Python接口
-提供了創建QT5程序的Python API接口
-Qt是非常成熟的跨平臺桌面應用開發系統,完備GUI
-推薦的Python GUI開發第三方庫
wxPython:跨平臺GUI開發框架
-提供了專用于Python的跨平臺GUI開發框架
-Python最主要的圖形用戶界面
PyGObject:使用GTK+開發GUI的功能庫
-提供了整合GTK+、WebKitGTK+等庫的功能
-GTK+:跨平臺的一種GUI框架
-實例:Anaconda采用該庫構建GUI
Python庫之游戲開發
PyGame:簡單的游戲開發功能庫
-提供了基于SDL的簡單游戲開發功能及實現引擎
-理解游戲對外部輸入的相應機制及角色構建和交互機制
-Python游戲入門最主要的第三方庫
Panda3D:開源、跨平臺的3D渲染和游戲開發庫
-一個3D游戲引擎,提供Python和C++兩種接口,Python接口更加全面也是該庫推薦使用的語言
-支持很多先進特性:法線貼圖、光澤貼圖、卡通渲染等
-由迪士尼和卡內基梅隆大學共同開發
cocos2d:構建2D游戲和圖形界面交互應用的框架
-提供了基于OpenGL的游戲開發圖形渲染功能
-支持GPU加速,采用樹形結構分層管理游戲對象類型
-適用于2D專業級游戲開發
Python庫之虛擬現實
VR Zero:在樹莓派上開發VR應用的Python庫
-提供大量與vr開發相關的功能
-針對樹莓派的vr開發庫,支持設備小型化,配置簡單化
-非常適合初學者實踐vr開發及應用
pyovr:Oculus Rift的Python接口
-針對Oculus VR設備的python開發庫
-基于成熟的VR設備,提供全套文檔,工業級應用設備
-Python+虛擬現實領域探索的一種思路
Vizard:基于Python的通用VR開發引擎
-專業的企業級虛擬現實開發引擎
-提供詳細的文檔
-支持多種主流的VR硬件設備,具有一定的通用性
Python庫之圖形藝術
Quads:迭代的藝術
-對圖片進行四分迭代,形成像素風
-可以生成動態或者靜態圖片
-簡單易用,具有很高展示度
ascii_art:ASCII藝術庫
-將普通圖片轉為ASCII藝術風格
-輸出可以是純文本或彩色文本
-可采用圖片格式輸出
turtle庫
9.5 實例16:玫瑰花繪制
問題分析:

博客出處:http://www.rzrgm.cn/yongestcat/
歡迎轉載,轉載請標明出處。
如果你覺得本文還不錯,對你的學習帶來了些許幫助,請幫忙點擊右下角的推薦

浙公網安備 33010602011771號