參考鏈接: Python程式設計語言
文章目錄
?第一部分 Python快速入門第1周 Python基本語法元素第2周 Python基本圖形繪制
? 第二部分 Python基礎語法第3周 基本數據類型3.1 數字類型及操作3.3 字符串類型及操作3.4 模塊2: time庫的使用
? ?第4周 程序的控制結構4.1 程序的分支結構4.3 程序的循環結構4.4 模塊3: random庫的使用
? ?第5周 函數和代碼復用5.1 函數的定義與使用5.2 實例7: 七段數碼管繪制5.3 代碼復用與函數遞歸5.4 模塊4: PyInstaller庫的使用5.5 實例8: 科赫雪花小包裹
? ?第6周 組合數據類型6.1 集合類型及操作6.2 序列類型及操作6.3 實例9: 基本統計值計算6.4 字典類型及操作6.5 模塊5: jieba庫的使用6.6 實例10: 文本詞頻統計
? ?第7周 文件和數據格式化7.1 文件的使用7.2 實例11: 自動軌跡繪制7.3 一維數據的格式化和處理7.4 二維數據的格式化和處理7.5 模塊6: wordcloud庫的使用7.6 實例12: 政府工作報告詞云
??
? 第三部分 Python編程思維第8周 程序設計方法學8.1 實例13: 體育競技分析
? ?第9周 Python計算生態縱覽
?
?
?
第一部分 Python快速入門?
第1周 Python基本語法元素?
編譯:將源代碼一次性轉換成目標代碼的過程(使用編譯執行的編程語言叫靜態語言,如C/C++,Java) 解釋:將源代碼逐條轉換成目標代碼同時逐條運行的過程(使用解釋執行的編程語言叫腳本語言,如Python,JavaScript,PHP ) 程序的基本編寫方法:IPO 編程步驟:分析問題、劃分邊界(確定IPO)、設計算法、編寫程序、調試測試、升級維護 編程體現了一種抽象交互關系、自動化執行的思維模式——計算思維(區別于邏輯思維、實證思維) 掌握語法、熟悉基本概念和邏輯 > 思考程序結構、使用編程套路 > 練習實踐、舉一反三 33個保留字:? 數據類型:整數、浮點數、字符串、列表 賦值語句右側的數據類型同時作用于變量 評估函數eval()去掉參數最外側引號并執行余下語句:如eval("1+2")輸出3,eval('“1+2”')輸出'1+2'?
第2周 Python基本圖形繪制?
?
C/C++:Python歸Python,C歸CJava:針對特定開發和崗位需求HTML/CSS/JS:不可替代的前端技術,全棧能力其他語言:R/Go/Matlab等,特定領域 Python計算生態 = 標準庫 + 第三方庫標準庫:隨解釋器直接安裝到操作系統中的功能模塊第三方庫:需要經過安裝才能使用的功能模塊庫Library、包Package、模塊Module,統稱模塊? ?turtle庫一些常用函數: turtle.penup() 別名 turtle.pu():抬起畫筆,海龜在飛行 turtle.pendown() 別名 turtle.pd():落下畫筆,海龜在爬行 turtle.pensize(width) 別名 turtle.width(width):畫筆寬度,海龜的腰圍 turtle.pencolor(color):color為顏色字符串或r,g,b值,畫筆顏色,海龜在涂裝 pencolor(color)的color參與可以有三種形式顏色字符串 :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):向前行進,海龜走直線 turtle.circle(r, extent=None):根據半徑r繪制extent角度的弧形 turtle.setheading(angle) 別名 turtle.seth(angle):改變行進方向,海龜走的角度,angle: 行進方向的絕對角度 turtle.left(angle) 海龜向左轉,turtle.right(angle) 海龜向右轉, angle: 在海龜當前行進方向上旋轉的角度?
第二部分 Python基礎語法?
第3周 基本數據類型?
整數、浮點數、復數字符串?
3.1 數字類型及操作?
浮點數間運算存在不確定尾數,不是bug:?
round(x, d):對x四舍五入,d是小數截取位數浮點數間運算及比較用round()函數輔助不確定尾數一般發生在1e-16 左右,round()十分有效 數學思維 > 計算思維 數值運算操作符: x // y 整數除,x與y之整數商 10//3結果是3 x % y 余數,模運算 10%3結果是1 x ** y冪運算,x的y次冪 數值運算函數: divmod(x,y):商余,(x//y, x%y),同時輸出商和余數 round(x[, d]):四舍五入,d是保留小數位數,默認值為0,round(-10.123, 2) 結果為 -10.12 int(x):將x變成整數,舍棄小數部分,int(123.45) 結果為123; int(“123”) 結果為123 float(x):將x變成浮點數,增加小數部分,float(12) 結果為12.0; float(“1.23”) 結果為1.23?
3.3 字符串類型及操作?
轉義符形成一些組合,表達一些不可打印的含義:"\b"回退 "\n"換行(光標移動到下行首) "\r" 回車(光標移動到本行首) 字符串操作符: x + y 連接兩個字符串x和y n * x 或 x * n 復制n次字符串x x in s 如果x是s的子串,返回True,否則返回False str(x)返回任意類型x所對應的字符串形式,與eval()對應 hex(x) 或 oct(x)整數x的十六進制或八進制小寫形式字符串 字符串處理方法:? <a>.<b>()是面向對象的一種使用風格,<a>是對象,<b>是對象能提供的功能,稱為方法。方法必須要用.的形式來執行。? 字符串類型的格式化:<模板字符串>.format(<逗號分隔的參數>) 槽內部對格式化的配置方式:{ <參數序號> : <格式控制標記>}? ?
3.4 模塊2: time庫的使用?
?time()獲取當前時間戳,即計算機內部時間值,浮點數,>>>time.time() 1516939876.6022282 ctime()獲取當前時間并以易讀方式表示,返回字符串, >>>time.ctime() ‘Fri Jan 26 12:11:16 2018’ gmtime()獲取當前時間,表示為計算機可處理的時間格式, >>>time.gmtime() time.struct_time(tm_year=2018, tm_mon=1,tm_mday=26, tm_hour=4, tm_min=11, tm_sec=16,tm_wday=4, tm_yday=26, tm_isdst=0) strftime(tpl, ts)tpl是格式化模板字符串,用來定義輸出效果,ts是計算機內部時間類型變量,>>>t = time.gmtime() >>>time.strftime("%Y-%m-%d %H:%M:%S",t) ‘2018-01-26 12:55:20’? ?strptime(str, tpl)str是字符串形式的時間值,tpl是格式化模板字符串,用來定義輸入效果,>>>timeStr = ‘2018-01-26 12:55:20’ >>>time.strptime(timeStr, “%Y-%m-%d %H:%M:%S”) time.struct_time(tm_year=2018, tm_mon=1,tm_mday=26, tm_hour=4, tm_min=11, tm_sec=16,tm_wday=4, tm_yday=26, tm_isdst=0) perf_counter()返回一個CPU級別的精確時間計數值,單位為秒,由于這個計數值起點不確定,連續調用差值才有意義 >>>start = time.perf_counter() 318.66599499718114 sleep(s)s擬休眠的時間,單位是秒,可以是浮點數?
第4周 程序的控制結構?
分支結構與異常處理遍歷循環、無限循環?
4.1 程序的分支結構?
?異常處理:??
4.3 程序的循環結構?
for <循環變量> in <遍歷結構> :從遍歷結構中逐一提取元素,放在循環變量中,遍歷循環:計數、字符串、列表、文件…?
for i in range(N) :? #計數循環(N次)
for i in range(M,N,K) :? #計數循環(特定次)
for c in s :? ? ? ?#字符串遍歷循環
for item in ls :? ?#列表遍歷循環
for line in fi :? ?#文件遍歷循環, fi是一個文件標識符,遍歷其每行,產生循環
?
while <條件> :無限循環 循環控制保留字:continue退出當次循環,break退出當前循環?
4.4 模塊3: random庫的使用?
random庫包括兩類函數,常用共8個?
基本隨機數函數: seed(), random()擴展隨機數函數: randint(), getrandbits(), uniform(), randrange(), choice(), shuffle() seed(a=None)初始化給定的隨機數種子,默認為當前系統時間 random()生成一個[0.0, 1.0)之間的隨機小數 choice(seq)從序列seq中隨機選擇一個元素 shuffle(seq)將序列seq中元素隨機排列,返回打亂后的序列?
第5周 函數和代碼復用?
函數的定義和使用函數遞歸?
5.1 函數的定義與使用?
可選參數要賦初值 可變參數傳遞:函數定義時可以設計可變數量參數,即不確定參數的總數量?
def <函數名>(<參數>, *b ) :? ?#*b為可變參數
? ? <函數體>
? ? return <返回值>
?
局部變量和全局變量: 規則1: 局部變量和全局變量是不同變量?
局部變量是函數內部的占位符,與全局變量可能重名但不同函數運算結束后,局部變量被釋放可以使用global保留字在函數內部使用全局變量 規則2: 局部變量為組合數據類型且未創建,等同于全局變量 lambda函數:<函數名> = lambda <參數>: <表達式>,表達式相當于函數體,如f = lambda x, y : x + y?
5.2 實例7: 七段數碼管繪制?
理解方法思維?
模塊化思維:確定模塊接口,封裝功能規則化思維:抽象過程為規則,計算機自動執行化繁為簡:將大功能變為小功能組合,分而治之?
5.3 代碼復用與函數遞歸?
把代碼當成資源進行抽象?
代碼資源化:程序代碼是一種用來表達計算的"資源"代碼抽象化:使用函數等方法對代碼賦予更高級別的定義代碼復用:同一份代碼在需要時可以被重復使用 函數 和 對象 是代碼復用的兩種主要形式 函數:將代碼命名,在代碼層面建立了初步抽象 對象:屬性和方法,<a>.<b> 和 <a>.<b>(),在函數之上再次組織進行抽象 函數遞歸:函數 + 分支結構遞歸鏈條遞歸基例?
#漢諾塔
count = 0
def hanoi(n, src, dst, mid):
? ? global count
? ? if n == 1 :
? ? ? ? print("{}:{}->{}".format(1,src,dst))
? ? ? ? count += 1
? ? else :
? ? ? ? hanoi(n-1, src, mid, dst)
? ? ? ? print("{}:{}->{}".format(n,src,dst))
? ? ? ? count += 1
? ? ? ? hanoi(n-1, mid, dst, src)
?
5.4 模塊4: PyInstaller庫的使用?
PyInstaller庫:將.py源代碼轉換成無需源代碼的可執行文件 使用:(cmd命令行) pyinstaller -F <文件名.py> 常用參數:? pyinstaller –i curve.ico –F SevenDigitsDrawV2.py?
5.5 實例8: 科赫雪花小包裹?
#KochDrawV2.py
import turtle
def koch(size, n):? ? ? ? ? # n階科赫曲線的繪制函數
? ? if n == 0:
? ? ? ? turtle.fd(size)
? ? else:
? ? ? ? for angle in [0, 60, -120, 60]:
? ? ? ? ? ? turtle.left(angle)
? ? ? ? ? ? koch(size/3, n-1)
def main():? ? ? ? ? ? ? ? ?# n階科赫雪花的繪制函數
? ? turtle.setup(600,600)
? ? turtle.penup()
? ? turtle.goto(-200, 100)
? ? turtle.pendown()
? ? turtle.pensize(2)
? ? level = 3? ? ? ? ? ? ? ?# 3階科赫雪花,階數
? ? koch(400, level)
? ? turtle.right(120)
? ? koch(400, level)
? ? turtle.right(120)
? ? koch(400, level)
? ? turtle.hideturtle()
main()
# 在cmd中執行以下代碼,打包繪制程序
pyinstaller –i curve.ico –F KochDrawV2.py? ? ?# 使用圖標curve.ico包裝
?
第6周 組合數據類型?
集合類型序列類型:列表和元組字典類型?
6.1 集合類型及操作?
可變數據類型:列表、字典 非可變數據類型:整數、浮點數、復數、字符串、集合、元組 建立集合類型用 {} 或 set() ,建立空集合類型,必須使用set() 集合操作符:6個操作符和4個增強操作符? ?集合處理方法:? ?
# while也可以遍歷組合數據類型
try:
? ? while True:
? ? ? ? print(A.pop(), end=""))
except:
? ? pass
?
數據去重:集合類型所有元素無重復?
>>> ls = ["p", "p", "y", "y", 123]
>>> s = set(ls) # 利用了集合無重復元素的特點
{'p', 'y', 123}
>>> lt = list(s) # 還可以將集合轉換為列表
['p', 'y', 123]
?
6.2 序列類型及操作?
序列類型通用操作符:? 序列類型通用函數和方法:? 元組是序列類型的一種擴展?
使用小括號 () 或 tuple() 創建,元素間用逗號 , 分隔可以使用或不使用小括號 列表是序列類型的一種擴展,十分常用使用方括號 [] 或list() 創建,元素間用逗號 , 分隔列表中各元素類型可以不同,無長度限制 方括號 [] 真正創建一個列表,賦值僅傳遞引用 列表類型操作函數和方法:? ?
6.3 實例9: 基本統計值計算?
# 獲取多數據輸入:從控制臺獲取多個不確定數據的方法
def getNum():? ? ? ? ? ? #獲取用戶不定長度的輸入
? ? nums = []? ? ? ? ? ? #創建空列表用以保存數據
? ? iNumStr = input("請輸入數字(回車退出): ")
? ? while iNumStr != "":
? ? ? ? nums.append(eval(iNumStr))
? ? ? ? iNumStr = input("請輸入數字(回車退出): ")
? ? return nums
# 通過函數分隔功能
?
6.4 字典類型及操作?
字典類型是“映射”的體現?
字典是鍵值對的集合,鍵值對之間無序采用大括號{}和dict()創建,鍵值對用冒號: 表示 字典類型操作函數和方法:? d.keys()和d.values()返回的不是列表類型,而是一種dict_keys類型和dict_values類型,可以用for...in...遍歷,不能當做列表操作 d.items()返回一種dict_items類型,包括字典d中所有鍵值對??
6.5 模塊5: jieba庫的使用?
jieba是優秀的中文分詞第三方庫?
jieba庫提供三種分詞模式,最簡單只需掌握一個函數 jieba分詞的三種模式:精確模式:把文本精確的切分開,不存在冗余單詞全模式:把文本中所有可能的詞語都掃描出來,有冗余搜索引擎模式:在精確模式基礎上,對長詞再次切分 jieba庫常用函數: jieba.lcut(s):精確模式,返回一個列表類型的分詞結果 jieba.lcut(s,cut_all=True):全模式,返回一個列表類型的分詞結果,存在冗余 jieba.lcut_for_search(s):搜索引擎模式,返回一個列表類型的分詞結果,存在冗余?
6.6 實例10: 文本詞頻統計?
#CalHamletV1.py Hamlet英文詞頻統計
def getText():? ? ? ? # 文本去噪及歸一化
? ? txt = open("hamlet.txt", "r").read()
? ? txt = txt.lower()
? ? for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
? ? ? ? txt = txt.replace(ch, " ")
? ? return txt
?
hamletTxt = getText()
words = hamletTxt.split()
counts = {}
for word in words:
? ? counts[word] = counts.get(word,0) + 1? ?#使用.get()方法統計詞頻
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)? ? #按value從大到小排列
for i in range(10):
? ? word, count = items[i]
? ? print("{0:<10}{1:>5}".format(word, count))
?
#CalThreeKingdomsV2.py 《三國演義》人物出場統計
import jieba
txt = open("threekingdoms.txt", "r", encoding="utf-8").read()
excludes = {"將軍","卻說","荊州","二人","不可","不能","如此"}? #定義排除詞集合
words = jieba.lcut(txt)? ? ?#使用jieba庫分詞
counts = {}
for word in words:? ? ? ? ? ?#需要根據結果進一步優化
? ? if len(word) == 1:
? ? ? ? continue
? ? elif word == "諸葛亮" or word == "孔明曰":
? ? ? ? rword = "孔明"
? ? elif word == "關公" or word == "云長":
? ? ? ? rword = "關羽"
? ? elif word == "玄德" or word == "玄德曰":
? ? ? ? rword = "劉備"
? ? elif word == "孟德" or word == "丞相":
? ? ? ? rword = "曹操"
? ? else:
? ? ? ? rword = word
? ? counts[rword] = counts.get(rword,0) + 1
for word in excludes:
? ? del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):
? ? word, count = items[i]
? ? print("{0:<10}{1:>5}".format(word, count))
#《三國演義》人物出場順序前20:曹操、孔明、劉備、關羽、張飛、呂布、趙云、孫權、司馬懿、周瑜、袁紹、馬超、魏延、黃忠、姜維、馬岱、龐德、孟獲、劉表、夏侯惇
?
詞頻統計進階:詞云?
第7周 文件和數據格式化?
文件的使用一二維數據的表示、存儲和處理?
7.1 文件的使用?
文件是數據的抽象和集合?
文件是存儲在輔助存儲器上的數據序列,是數據存儲的一種形式文件展現形態:文本文件和二進制文件。文件文件和二進制文件只是文件的展示方式,本質上,所有文件都是二進制形式存儲 文本文件由單一特定編碼組成,如:.txt文件、.py文件等 二進制文件直接由比特0和1組成,沒有統一字符編碼,如:.png文件、.avi文件等 文件處理的步驟: 打開-操作-關閉 文件的打開:? ?打開模式:? 文件的關閉:? 文件內容的讀取:??
#遍歷全文本:方法二
fname = input("請輸入要打開的文件名稱:")
fo = open(fname,"r")
txt = fo.read(2)
while txt != "":? ? ? ? ? ? # 按數量讀入,逐步處理
? ? #對txt進行處理? ? ? ?
? ? txt = fo.read(2)
fo.close()
?
#逐行遍歷文件:方法二
fname = input("請輸入要打開的文件名稱:")
fo = open(fname,"r")
for line in fo:? ? ? ? ? ? ?#分行讀入,逐行處理
? ? print(line)
fo.close()
?
數據的文件寫入:??
fo = open("output.txt","w+")
ls = ["中國", "法國", "美國"]
fo.writelines(ls)? ? ? ? # 寫入一個字符串列表
fo.seek(0)? ? ? ? ? ? ? #使指針回到文件開頭
for line in fo:
? ? print(line)? ? ? ? ?#>>>中國法國美國
fo.close()
?
7.2 實例11: 自動軌跡繪制?
步驟1:定義數據文件格式(接口)步驟2:編寫程序,根據文件接口解析參數繪制圖形步驟3:編制數據文件 數據接口定義??
#AutoTraceDraw.py
import turtle as t
t.title('自動軌跡繪制')
t.setup(800, 600, 0, 0)
t.pencolor("red")
t.pensize(5)
#數據讀取
datals = []
f = open("data.txt")
for line in f:
? ? line = line.replace("\n","")
? ? datals.append(list(map(eval, line.split(","))))
f.close()
#自動繪制
for i in range(len(datals)):
? ? t.pencolor(datals[i][3],datals[i][4],datals[i][5])
? ? t.fd(datals[i][0])
? ? if datals[i][1]:
? ? ? ? t.right(datals[i][2])
? ? else:
? ? ? ? t.left(datals[i][2])
?
7.3 一維數據的格式化和處理?
數據的操作周期:? 一維數據的表示: 如果數據間有序:使用列表類型 如果數據間無序:使用集合類型?
#一維數據的讀入處理:從空格分隔的文件中讀入數據
txt = open(fname).read()
ls = txt.split()? ? ? #返回列表格式
f.close()
#一維數據的寫入處理:采用空格分隔方式將數據寫入文件
ls = ['中國', '美國', '日本']
f = open(fname, 'w')
f.write(' '.join(ls))? ? ?#
f.close()
?
7.4 二維數據的格式化和處理?
二維數據的表示: 使用列表類型:二維列表 CSV數據存儲格式:CSV: Comma-Separated Values 數據中含有逗號時,可以使用轉義符\或引號‘’ 二維數據的處理:?
#從CSV格式的文件中讀入數據
fo = open(fname)
ls = []
for line in fo:
? ? line = line.replace("\n","")
? ? ls.append(line.split(","))
fo.close()
#將數據寫入CSV格式的文件
ls = [[], [], []] #二維列表
f = open(fname, 'w')
for item in ls:
? ? f.write(','.join(item) + '\n')
f.close()
?
7.5 模塊6: wordcloud庫的使用?
wordcloud庫把詞云當作一個WordCloud對象,以WordCloud對象為基礎,配置對象參數、加載詞云文本、輸出詞云文件 wordcloud.WordCloud()代表一個文本對應的詞云 w = wordcloud.WordCloud():配置對象參數 w.generate(txt):向WordCloud對象w中加載文本txt,>>>w.generate( “Python and WordCloud” ) w.to_file(filename):將詞云輸出為圖像文件,.png或.jpg格式,>>>w.to_file( “outfile.png” ) wordcloud庫所做的事情:? 配置對象參數w = wordcloud.WordCloud(<參數>) width:指定詞云對象生成圖片的寬度,默認400像素 height:指定詞云對象生成圖片的高度,默認200像素 min_font_size:指定詞云中字體的最小字號,默認4號 max_font_size:指定詞云中字體的最大字號,根據高度自動調節 font_step:指定詞云中字體字號的步進間隔,默認為1 font_path:指定字體文件的路徑,默認None,如:font_path=“msyh.ttc” max_words:指定詞云顯示的最大單詞數量,默認200 stop_words:指定詞云的排除詞列表,即不顯示的單詞列表,如stop_words={“Python”} mask:指定詞云形狀,默認為長方形,需要引用imread()函數,格式如下:?
>>>from scipy.misc import imread
>>>mk=imread("pic.png")
>>>w=wordcloud.WordCloud(mask=mk)
?
background_color:指定詞云圖片的背景顏色,默認為黑色,如:background_color=“white” wordcloud應用實例:?
import jieba
import wordcloud
txt = "程序設計語言是計算機能夠理解和識別用戶操作意圖的一種交互體系,它按照特定規則組織計算機指令,使計算機能夠自動進行各種運算處理。"
w = wordcloud.WordCloud( width=1000,font_path = "msyh.ttc",height=700)
w.generate(" ".join(jieba.lcut(txt)))? #中文需要先分詞并組成空格分隔字符串
w.to_file("pywcloud.png")
?
7.6 實例12: 政府工作報告詞云?
#GovRptWordCloudv1.py
import jieba
import wordcloud
#from scipy.misc import imread
#mask = imread("fivestart.png")
f = open("新時代中國特色社會主義.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud( font_path = "msyh.ttc",mask = mask,width = 1000, height = 700, background_color = "white")
w.generate(txt)
w.to_file("grwordcloud.png")
?
第三部分 Python編程思維?
第8周 程序設計方法學?
8.1 實例13: 體育競技分析?
第9周 Python計算生態縱覽?
注:原課程為北京理工大學嵩天老師在中國大學慕課開設的《Python語言程序設計》課程