【學習筆記】PYTHON語言程序設計(北理工 嵩天)

1 Python基本語法元素

1.1 程序設計基本方法

計算機發展歷史上最重要的預測法則     摩爾定律:單位面積集成電路上可容納晶體管數量約2年翻倍 cpu/gpu、內存、硬盤、電子產品價格等都遵循此定律前端

50年來計算機是惟一一個指數發展的領域python

源代碼、目標代碼(機器代碼)linux

編譯、解釋正則表達式

靜態語言、腳本語言算法

靜態語言編譯器一次性生成目標代碼,優化更衝份,程序運行速度更快shell

腳本語言 執行程序時須要源代碼,維護更靈活數據庫


程序的基本設計方法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個

image

數據類型

字符串

用‘’或「」

正向遞增序號、反向遞減序號  正向0開始編號

索引: 可使用[M]索引其中單個字符

切片:可使用[M:N]返回其中一段子串,從第M到第N-1個字符image

數字類型:整數、浮點數

列表:表示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++躍居第三

image

Python語言是通用語言、腳本語言、開源語言、跨平臺語言、多模型語言

–強制可讀性

–較少的底層語法元素

–多種編程方式

–支持中文字符

–C代碼量的10%                  語法簡潔    *10

–13萬第三方庫                  生態高產    *10

–快速增加的計算生態 每一年2萬

–避免重複造輪子

–開放共享

–跨操做系統平臺

人生苦短 我學Python

    –C/C++:C歸C  Python歸Python

    –Java:針對特定開發和崗位需求

    –HTML/CSS/JS:不可替代的前端技術,全棧能力

    -R/GO/Matlab等:特定領域

Python是最高產的程序設計語言

    –掌握抽象並求解計算問題綜合能力的語言

    -瞭解產業界解決複雜計算問題方法的語言

    -享受利用編程將創新變爲實現樂趣的語言

工具決定思惟:關注工具變革的力量!

imagepython具備最龐大的生態庫,是惟一的超級語言,前進步伐不可阻擋

2.2 實例2:Python蟒蛇繪製

image

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)image海龜角度 turtle.left(angle),turtle.right(angle)

imageRGB色彩體系 0-255整數或 0-1 的小數

image默認採用小數制,可切換爲整數制  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開頭 0b0十、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%

image若是是0.5% 1%呢

image

若是是工做日的力量?工做日進步1%,休息日退步1%image工做日的努力要達到多少才能和天天努力1%同樣?image

3.3 字符串類型及操做

四種字符串表示方法:

由一對單引號或雙引號表示單行字符串

由一對三引號或三雙引號表示多行字符串         

三單引號表示字符串,程序啥都不執行,至關於註釋,python實際沒有真正提供多行註釋


[M:N:K]根據步長對字符串切片 M和N都可以缺失,表示至開頭或至結尾

[::-1]倒序image轉義符\  \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編碼image

字符串處理方法

<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(<逗號分隔的參數>)

至關於佔位信息符,只在字符串中有用image

分爲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()image格式化字符串imagestriptime()image

程序計時

perf_counter()imagesleep()image

3.5 實例4:文本進度條

問題分析:採用字符串方式打印能夠動態變化的文本進度條  能在一行中逐漸變化

刷新的本質:用後打印的字符覆蓋以前的字符

print() 默認加換行  print( ,end=」」)不換行   \r退格到行首

idle不是主要的運行環境 因此\r功能在idle屏蔽了 用shell執image

文本進度條 簡單的開始

image

文本進度條 單行動態刷新image文本進度條 實例完整效果image

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),接收用戶信息判斷身體肥胖程度imageimage

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:圓周率計算

image

蒙特卡羅方法     工程方法

數學思惟

計算思惟

time庫perf_counter來關注程序性能

據統計,程序80%的時間消耗在不到10%的代碼上   有點兒相似28法則

關注循環

5.函數和代碼複用

5.1 函數的定義與使用

函數定義

函數是一段具備特定功能可複用的語句

df <函數名>(參數):

    <函數體>

    return <返回值>

其中參數能夠是0個到多個,是佔位符

函數不通過調用是不會執行的

函數就是IPO的實現

函數也是一段完整代碼的封裝


函數的參數傳遞

可選參數傳遞:能夠爲參數指定默認值,變爲可選參數,可選參數要放在非可選參數以後image可變參數傳遞:不肯定參數有多少個imageimage

參數傳遞的兩個方式

默認是按照位置,能夠按照名稱方式傳遞image

函數的返回值

return能夠返回0個或多個結果

函數能夠有返回值也能夠沒有

能夠有return 也能夠沒有

返回多個值的時候是返回元組類型 用() 元素用逗號分隔


局部變量與全局變量

函數外邊的是全局變量,裏面是局部變量

局部變量是函數內部的佔位符,可能與全局變量重名單不相同

函數運行結束後局部變量被釋放

規則1:局部變量與全局變量是不一樣變量

可使用global保留字在函數內部使用全局變量

image規則2:局部變量若是是組合數據類型且未被建立,等同於全局變量    組合數據類型實際是指針的緣由imageimage

lambda函數

lambda函數返回函數名做爲結果

lambda函數是一種匿名函數,沒有名字的函數

lambda函數用於定義一種簡單的可以在一行內表示的函數

是一種函數的緊湊表達形式

<函數名> = lambda <參數>:<表達式>

f = lambda x,y : x + y

f(10,15)

謹慎使用lambda函數

用於特定的方法的參數

通常就算是1行代碼,也建議用def方式定義

5.2 實例7:七段數碼管繪製

問題分析:用turtle繪製數碼管樣式的時間image

5.3 代碼複用與函數遞歸

代碼複用

代碼抽象化:使用函數等方法對代碼賦予更高級別的定義

函數對象是代碼複用的2中主要形式

函數是在代碼層面創建了初步抽象

對象有屬性和方法,是更高級別的抽象

封裝


模塊化設計

分而治之:

經過函數或對象封裝將程序劃分爲模塊與模塊間的表達

主程序、子程序與子程序之間的關係

通常將子程序看做模塊,主程序看做模塊與模塊間的關係

是一種分而治之、分層抽象、體系化的設計思想

緊耦合:兩個部分之間交流不少,沒法獨立存在

鬆耦合:兩個部分之間交流不多,能夠獨立存在,有各自清晰簡單的接口

模塊化設計基本思路和原則:模塊內部緊耦合,模塊之間鬆耦合


函數遞歸:函數定義中調用自身的方式

兩個關鍵特徵

鏈條:計算過程存在遞歸鏈條

基例:存在一個或者多個不須要再次遞歸的基例  遞歸的最末段

相似數學概括法,先證實第一個取值命題成立,而後第n個取值命題成立,第n+1取值命題也成立,那麼命題成立

遞歸能夠理解爲數學概括法思惟在編程中的體現


函數遞歸的調用image

函數+分支語句   :基例和鏈條分別編寫代碼

3個小栗子imageimageimage

5.4 模塊4:Pyinstaller庫的使用

是第三方庫 須要安裝

pip工具

shell中使用使用             pyinstaller –F <文件名.py>image

5.5 實例8:科赫雪花小包裹

image分形幾何

image

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轉變爲集合類型


集合類型應用場景

包含關係的比較

數據去重

image

6.2 序列類型及操做

序列是有前後順序的一組元素

序列是一維元素向量,元素類型能夠不一樣,相似C語言中的一維數組

元素間由序號引導,經過下標訪問序列的特定元素

序列是一個基類類型

通常不直接用序列類型而是使用其衍生類型,好比字符串、元組、列表image序列處理函數與方法imageimage

元組類型

元組是一種序列類型,一旦建立就不能被修改

使用()或者tuple()建立,元素間用逗號分隔

可使用或不適用小括號,好比函數返回多個返回值就是使用沒有括號的元組類型,python內部認爲是一個值,是一個元組image

元組類型繼承了序列的全部通用操做

元組類型由於一旦定義不能修改,因此沒有特殊操做


列表類型及操做

列表是序列類型的擴展,十分經常使用

列表是一種序列類型,建立後能夠隨意修改,長度無限制,元素類型可不一樣image列表本質是指針,若是經過賦值語句給另一個變量,那麼實際並無建立一個新列表,能夠相似linux的硬連接,[]或者函數list()纔是真正建立一個列表,賦值僅僅傳遞引用image一些例子imageimage一些例子imageimage

序列類型應用場景

包含元組列表

元組用於元素不改變的場景,更多用於固定場景 好比函數返回值

列表則更加靈活,是經常使用的序列類型

最主要做用:表示一組有序數據並進而操做它們

元素遍歷 for item in lt

數據保護 利用元組不可修改的特性image

6.3 實例9:基本統計值計算

問題分析:給出一組數據,給出概要理解,好比 求和、平均值、方差、中位數…

總個數:len()

求和:for … in

平均值:上2個除

方差:各數據與平均值的平方的和的平均數

中位數:排序,取中間的或者中間2個數平均數image

6.4 字典類型及操做

字典類型的定義

映射 是一種鍵(索引)和值(數據)的對應

用{}或者dict()建立字典,鍵值對用:表示     {key:value,key2:value2…}

type()能夠檢測變量的類型

{}能夠用來聲明空字典,這就是集合類型中定義空集合不能用{}的緣由image一些例子image

6.5 模塊5:jieba庫的使用

優秀的中文分詞第三方庫

因爲中文是連續書寫的 須要經過特定手段得到單個詞語

jieba庫提供3種分詞模式,最簡單隻須要掌握一個函數

經過中文詞庫方式識別肯定漢字之間關聯機率 機率大的組成詞組,造成分詞效果

除了分詞,用戶也能夠添加自定義的詞組


三種模式

精確模式:把文本精確的切分開,不存在冗餘單詞  最經常使用的分詞模式

全模式:把文本中全部可能的詞語都掃描出來,存在冗餘

搜索引擎模式:更加智能,在精確模式的基礎上,對長詞再次切分,存在冗餘,在某些特定場景下使用image

6.6 實例10:文本詞頻統計

問題分析:一篇文章,出現了哪些詞?哪些詞最多?

中英文各一個程序:分別是哈姆雷特和三國演義

imageimage

7. 文件和數據格式化

7.1 文件的使用

文件的類型

文本文件、二進制文件     只是展現方式,本質上都是二進制數據

文本文件:由單一特定編碼組成的文件,如utf-8編碼   因爲存在編碼,文本文件也被看爲一個長字符串

二級制文件:數據間沒有統一字符編碼,01組成,好比png avi等文件


文件的打開和關閉

打開->操做->關閉                    文件存儲狀態和佔用狀態轉換image

文件的打開

<變量名> = open(<文件名>,<打開模式>)

文件句柄

文件路徑和名稱,使用相對路徑或者絕對路徑,同一個路徑的話就直接文件名,斜槓\是轉移字符使用反斜槓/替換,或者\\

打開模式image

<變量名>.close   關閉文件

當程序退出的時候,python也會自動關閉文件


文件內容的讀取

<f>.read(size=-1)   讀入所有內容,若是給出參數,讀入前size長度

<f>.readline(size=-1) 讀入一行,若是給了size,讀入該行前size長度

<f>.readlines(hint=-1)   讀入文件全部行,以每行爲元素造成列表,hint參數可選,讀入前hint行

遍歷全文本image文件的逐行處理image

文件寫入

<f>.write(s)   向文件寫入一個字符串或字節流   如:f.write(「abc」)

<f>.writelines(lines)   將一個元素全爲字符串的列表寫入文件   如:ls=[‘a’,’b’,’c’],f.writelines(ls)

<f>.seek(offset) 改變當前文件操做指針的位置,offset含義以下:0文件開頭,1-當前位置,2-文件結尾

例子:image

7.2 實例11:自動軌跡繪製

問題分析:根據腳原本繪製圖形  不是寫代碼而是寫數據繪製軌跡imageimage

自動化思惟

將數據和功能分離開來

數據驅動

接口化設計

能夠擴展

擴展接口設計,增長更多控制接口

  擴展功能設計,增長弧形等更多功能

  擴展應用需求,發展自動軌跡繪製到動畫繪製

7.3 一維數據的格式化

一維數據:由對等關係的有序或無序數據構成,採用線性方式組織,對應列表、集合、數組等概念

二維數據:由多個一維數據組成,是一維數據的組合形式

多維數據:是一維或二維數據在新惟獨上擴展造成,好比中國大學排行榜加入時間維度

高維數據:僅利用最基本的二元關係展現數據間的複雜結構,好比字典類型中的key-value形式


操做週期image

一維數據的表示

若是數據間有序,使用列表類型

若是數據間無序,使用集合類型


一維數據的存儲imageimage一維數據的處理image相似於一個驅動imageimageimage

7.4 二維數據的格式化和處理

二維列表

兩層for循環遍歷二維列表

csv:comma-separated values  逗號分隔  國際通用   通常.csv爲擴展名

每行一個一維數據,無空行

通常的軟件都能生成csv格式文件image

若是每一個元素缺失,逗號要保留

表頭能夠做爲數據存儲,也能夠令行存儲

若是數據中包含逗號,不一樣的軟件有不一樣的約定,好比轉義符或者其餘方式

按行存或者按列存都行,通常索引習慣 ls[row][col] 先行後列,按行存


二維數據的處理

讀入處理imageimage

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:輸出詞雲文件imageimage

生成默認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參數能夠改變image

中文的話須要先用jieba庫分詞,中文不是空格分隔的

7.6 實例12:政府工做報告詞雲

常規矩形詞雲image不規則詞雲image

8. 程序設計方法學

8.1 實例13:體育競技分析imageimage

自頂向下(設計)        分而治之

將一個總問題表達爲若干個小問題組成的形式

使用相同的方法進一步分解小問題

解決複雜問題的有效設計方法

自底向上(執行)     模塊化集成

逐步組建複雜系統的有效測試方法

分單元測試,逐步組裝imageimageimage

8.2 Python程序設計思惟

計算思惟與程序設計

第三種人類思惟特徵

邏輯思惟:以推理和演繹爲特徵,以數學爲表明,A->B,B->C,A->C

實證思惟:以實驗和驗證爲特徵,以物理爲表明,引力波<-實驗

計算思惟:以設計和構造爲特徵,計算機爲表明,漢諾塔遞歸

有很是明顯的特徵:抽象和自動化,抽象問題的計算過程並利用計算自動化求解(並非抽象因果關係僅僅是抽象過程)

1+2+..+100  高斯     vs  累計

圓周率        高數求和   vs     蒙特卡洛方法

漢諾塔問題   邏輯推理的2的n次方-1        vs      遞歸image

計算思惟基於計算機強大的算力和海量的數據

抽象計算過程,關注設計和構造,而非因果

以計算機程序設計爲主要實現手段

編程是將計算思惟變爲現實的手段


計算生態與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

模塊化設計

自頂向下設計

配置化設計   (自動軌跡繪製實例)image

-引擎+配置:程序執行和配置分離,將可選參數配置化

  -將程序開放變爲配置文件編寫,擴展功能而不修改程序

  -關鍵在於接口設計,清晰明瞭,靈活擴展,這是一種更高級別的設計思路

應用開發的四個步驟:

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                                                                  列出已安裝的第三方庫


集成安裝方法

結合安裝工具,批量安裝,不過這樣的安裝工具很少,推薦一個叫anacondaimage

文件安裝方法

爲何有些第三方庫用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 opimageimageimageimage

os庫進程管理

os.system(command)   調用其餘程序


os庫之環境參數

獲取或改變系統環境信息image

8.5 實例14:第三方庫安裝腳本

第三方庫自動安裝腳本image

9 Python計算生態概覽

9.1 從數據處理到人工智能

從數據處理到人工智能的完整鏈條:數據表示->數據清洗->數據統計->數據可視化->數據挖掘->人工智能image

Python庫之數據分析

Numpy:表達N維數組的最基礎庫

  -Python接口使用,C語言實現,計算速度優異

  -Python數據分析及科學計算的基礎庫,支撐Pandas等

  -提供直接的矩陣運算、廣播函數、線性代數等功能image

Pandas:Python數據分析高層次應用庫

  -提供了簡單易用的數據結構和數據分析工具

  -理解數據類型與索引的關係,操做索引即操做數據

  -Python庫最主要的數據分析功能庫,基於Numpy開發

提供兩個數據結構:

Series = 索引 + 一維數據

DataFrame = 行列索引 + 二維數據image

Scipy:數學、科學和工程計算功能庫

  -提供了一批數學算法及工程數據運算功能

  -相似Matlab,可用於傅里葉變換、信號處理等應用

  –Python最主要的科學計算功能庫,基於Numpy開發image

Python庫之數據可視化

Matplotlib:高質量的二維數據可視化功能庫,有大量子庫

  -提供了超過100種數據可視化展現效果

  -經過matplotlib.pyplot子庫調用各可視化效果

  -Python最主要的數據可視化功能庫,基於Numpy開發image

Seaborn:統計類數據可視化功能庫

  -提供了一批高層次的統計類數據可視化展現效果

  -主要展現數據間分佈、分類和線性關係等內容

  -基於Matplotlib開發,支持Numpy和Pandasimage

Mayavi:三維科學計算可視化功能庫

  -提供了一批簡單易用的3D科學計算數據可視化展現效果

  -目前是Mayavi2,三維可視化最主要的第三方庫

  -支持Numpy、TVTK、Traits、Envisage等第三方庫image

Python庫之文本處理

PyPDF2:用來處理pdf文件的工具集

  -提供了一批處理PDF文件的計算功能

  -支持獲取信息、分隔/整合文件、加密解密等

  -徹底Python語言實現,不須要額外依賴,功能穩定image

NLTK:天然語言文本處理第三方庫

  –提供了一批簡單易用的天然語言文本處理功能

  -支持語言文本分類、標記、語法句法、語義分析等

  -最優秀的Python天然語言處理庫image

Python-docx:建立或更新word文檔的第三方庫

  -提供建立或更新.doc .docx等文件的計算功能

  -增長並配置段落、圖片、表格、文字等,功能全面image

Python庫之機器學習

Scikit-learn:機器學習方法工具集

  -提供一批統一化的機器學習方法功能接口

  -提供聚類、分類、迴歸、強化學習等計算功能

  -機器學習最基本且最優秀的Python第三方庫image

TensorFlow:AlphaGo背後的機器學習計算框架

  -谷歌公司推進的開源機器學習框架

  -將數據流圖做爲基礎,圖節點表明運算,邊表明張量

  -應用機器學習方法的一種方式,支撐谷歌人工智能應用image

MXNet:基於神經網絡的深度學習計算框架

  -提供可擴展的神經網絡及深度學習計算功能

  -可用於自動駕駛、機器翻譯、語音識別等衆多領域

  -Python最重要的深度學習計算框架image

9.2 實例15:霍蘭德人格分析雷達圖

問題分析:

啥是雷達圖image

霍蘭德認爲:人格興趣和職業之間有內在的對應關係

人格分類:研究型、藝術型、社會型、企業型、傳統型、現實型

職業:工程師、實驗員、藝術家、推銷員、記事員、社會工做者

需求:雷達圖方式驗證霍蘭德人格分析

輸入:各職業人羣結合興趣的調研數據

輸出:雷達圖

展現多維數據以及繪製雷達圖的能力imageimage目標+沉浸+熟練

  -編程的目標感:尋找感興趣的目標,尋(wa)覓(jue)之

  -編程的沉浸感:尋找可實現的方法,思(zuo)考(mo)之

  -編程的熟練度:練習、練習、再練習,熟練之

編程不是最主要的,編程的感受纔是最重要的

9.3 從Web解析到網絡空間

Python庫之網絡爬蟲

Requests:最友好的網絡爬蟲庫

  -提供了簡單易用的類HTTP協議網絡爬蟲功能

  -支持鏈接池、SSL、Cookies、HTTP(S)代理等

  -Python最主要的頁面級網絡爬蟲功能庫image

Scrapy:優秀的網絡爬蟲框架

  -提供了構建網絡爬蟲系統的框架功能,半成品

  -支持批量和定時頁面爬取、提供數據處理流程等

  -Python最主要且最專業的網絡爬蟲框架image

pyspider:強大的Web頁面爬取系統

  -提供了完整的網頁爬取系統構建功能

  -支持數據庫後端、消息隊列、優先級、分佈式架構等

  -Python重要的網絡爬蟲第三方庫image

Python庫之Web信息提取

Beautiful Soup:HTML和XML的解析庫

  -提供瞭解析HTML和XML等Web信息的功能

  -又名beautifulsoup4或bs4,能夠加載多種解析引擎

  -常與網絡爬蟲庫搭配使用,如Scrapy、requests等image

Re:正則表達式解析和處理功能庫

  -提供了定義和解析正則表達式的一批通用功能

  -可用於各種場景,包括定點的Web信息提取

  -Python最主要的標準庫,無需安裝image

Python-Goose:提取文章類型Web頁面的功能庫

  -提供了對Web頁面中文章信息/視頻等元數據的提取功能

  -針對特定類型Web頁面,應用覆蓋面較廣image

相對於bs4庫,抽象層次更加高,更加方便


Python庫之Web網站開發

Django:最流行的Web應用框架

  -提供了構建Web系統的基本應用框架

  -MTV模式:模型(model)、模式(Template)、視圖(Views)

  -Python最重要的Web應用框架,略微複雜的應用框架,比較適合專業的網站構建image

Pyramid:規模適中的Web應用框架

  -提供了簡單方便構建Web系統的應用框架

  -不大不小,規模適中,適合快速構建並適度擴展類應用

  -Python產品級Web應用框架,起步簡單可擴展性好image

Flask:Web應用開發微框架

  -提供了最簡單構建Web系統的應用框架

  -特色是:簡單、規模小、快速

-Django > Pyramid > Flask好image

Python庫之網絡應用開發

WeRoBot:微信公衆號開發框架

  -提供瞭解析微信服務器消息及反饋消息的功能

  -創建微信機器人的重要手段image

aip:百度AI開放平臺接口

  -提供了訪問百度AI服務的Python接口

  -語音、人臉、OCR、NLP、知識圖譜、圖像搜索等領域

  -Python百度AI應用的最主要方式image

MyQR:二維碼生成第三方庫

  -提供了生成二維碼的系列功能

  -基本二維碼、藝術二維碼和動態二維碼image

9.4 從人機交互到藝術設計

Python庫之圖形用戶界面

PyQT5:QT開放框架的Python接口

  -提供了建立QT5程序的Python API接口

  -Qt是很是成熟的跨平臺桌面應用開發系統,完備GUI

  -推薦的Python GUI開發第三方庫image

wxPython:跨平臺GUI開發框架

  -提供了專用於Python的跨平臺GUI開發框架

  -Python最主要的圖形用戶界面image

PyGObject:使用GTK+開發GUI的功能庫

  -提供了整合GTK+、WebKitGTK+等庫的功能

  -GTK+:跨平臺的一種GUI框架

  -實例:Anaconda採用該庫構建GUIimage

Python庫之遊戲開發

PyGame:簡單的遊戲開發功能庫

  -提供了基於SDL的簡單遊戲開發功能及實現引擎

  -理解遊戲對外部輸入的相應機制及角色構建和交互機制

  -Python遊戲入門最主要的第三方庫image

Panda3D:開源、跨平臺的3D渲染和遊戲開發庫

  -一個3D遊戲引擎,提供Python和C++兩種接口,Python接口更加全面也是該庫推薦使用的語言

  -支持不少先進特性:法線貼圖、光澤貼圖、卡通渲染等

  -由迪士尼和卡內基梅隆大學共同開發image

cocos2d:構建2D遊戲和圖形界面交互應用的框架

  -提供了基於OpenGL的遊戲開發圖形渲染功能

  -支持GPU加速,採用樹形結構分層管理遊戲對象類型

  -適用於2D專業級遊戲開發image

Python庫之虛擬現實

VR Zero:在樹莓派上開發VR應用的Python庫

  -提供大量與vr開發相關的功能

  -針對樹莓派的vr開發庫,支持設備小型化,配置簡單化

  -很是適合初學者實踐vr開發及應用image

pyovr:Oculus Rift的Python接口

  -針對Oculus VR設備的python開發庫

  -基於成熟的VR設備,提供全套文檔,工業級應用設備

  -Python+虛擬現實領域探索的一種思路image

Vizard:基於Python的通用VR開發引擎

  -專業的企業級虛擬現實開發引擎

  -提供詳細的文檔

  -支持多種主流的VR硬件設備,具備必定的通用性image

Python庫之圖形藝術

Quads:迭代的藝術

  -對圖片進行四分迭代,造成像素風

  -能夠生成動態或者靜態圖片

  -簡單易用,具備很高展現度image

ascii_art:ASCII藝術庫

  -將普通圖片轉爲ASCII藝術風格

  -輸出能夠是純文本或彩色文本

  -可採用圖片格式輸出imageturtleimage

9.5 實例16:玫瑰花繪製

問題分析:imageimage

相關文章
相關標籤/搜索