中国大学moocpython笔记_中国大学MOOC_高级语言程序设计(Python)笔记
一、程序設(shè)計(jì)基礎(chǔ)
1、Python歷史
2、Python特點(diǎn)
Python的偽代碼(形式語言)更接近于自然語言(自然語言)
膠水語言
3、Python的應(yīng)用:Google、Youtube等
4、IDE
1)Python是解釋性語言(“同聲傳譯”),支持有兩種方法使用解釋器:交互式模式(interactive
mode)和腳本模式(script mode)。
(1)交互模式:退出exit()
(2)腳本模式:
三種代碼格式:源代碼py 字節(jié)代碼pyc 優(yōu)化代碼pyo
代碼注釋行用#符號開始(用法同C++的//)
注釋塊:兩個三雙引號(""")內(nèi)的代碼
2)Spyder集成編程環(huán)境
5、基本輸入輸出語句
①屏幕行輸出函數(shù):
(,,...),Python2不需要括號。輸出占一行。
print后面參數(shù)以逗號結(jié)尾,則輸出變量值后不換行
print后面無參數(shù),則輸出一空行。
②鍵盤輸入函數(shù):
Python2和3中input(['']),接收鍵盤輸入,并返回表達(dá)式;
Python2中raw_input
(['']),返回值是鍵盤輸入的字符串(若用為數(shù)字則需強(qiáng)制類型轉(zhuǎn)換);
input()等價于eval_r(raw_input())。
Python可以一邊輸入一邊賦值。如
num1=int(raw_input())
二、常量變量
1、和C語言相似的轉(zhuǎn)義字符
\n換行newline?\'單引號
2、變量名是大小寫敏感的,變量名的命名原則也符合一般的標(biāo)示符規(guī)則;變量在使用前必須已經(jīng)定義(先定義再使用)
Python的變量賦值(變量綁定對象),實(shí)際上是將值指向址,同一個值指向同一個址,而址可以映射不同的變量名。這是與其他語言區(qū)別的地方
三、數(shù)據(jù)類型
1、數(shù)據(jù)類型函數(shù):type()
整數(shù)(integer):十進(jìn)制21 八進(jìn)制025
十六進(jìn)制0x15
浮點(diǎn)數(shù)(float):1.65?2.?.21?2.1E2
布爾數(shù)(boolean):布爾值(True False),注意大小寫
復(fù)數(shù)(complex):1+2i
字符串(string):使用單引號、雙引號或三引號括起來。三引號(''')括起來時,保留了字符串中的全部信息,包括回車。
2、Python并不需要使用變量前先要類型聲明,但在使用前還是需要先初始化賦值
3、類型轉(zhuǎn)換
和C一樣,計(jì)算中也有自動類型轉(zhuǎn)換:bool→int→float→complex
Python也支持強(qiáng)制類型轉(zhuǎn)換: (),如int
('32'),int(3.9)等(類型轉(zhuǎn)化的類型名不用加小括號,這與C不同)
四、運(yùn)算符(按運(yùn)算符優(yōu)先級排列;除特別聲明多為左結(jié)合性)
1、算術(shù)運(yùn)算符:
**(乘方,即指數(shù)運(yùn)算,右結(jié)合性,如2**2**3==256,而不是64)
*
/(除,除不盡結(jié)果用double型輸出)
%取余?#(3.0以上版本,除,結(jié)果向下取整floor division)
+ -
加減乘除甚至可以用于字符串運(yùn)算(級聯(lián)),例如:'very'+'good'、'repeap'*3等
2、關(guān)系運(yùn)算符
①>大于 =大于等于 <=小于等于
==等于 !=(或<>)不等于
②Python與C不一樣的是,它可以這樣寫一個關(guān)系表達(dá)式1 < a
< 2
3、邏輯運(yùn)算符
①not邏輯否 and邏輯與 or邏輯或
②邏輯運(yùn)算的結(jié)果是邏輯常量True、False,但在表達(dá)式中所有非0數(shù)都被運(yùn)算為True。有些與C不同的:
123 and 456 --> 456
123 or 456 -->123
4、賦值運(yùn)算符(右結(jié)合性)
①=?*=?/=?+= -=?%=?//=
注意Python不支持C語言的自增自減
②Python支持這樣的賦值寫法:
a,b=1,2
a,b,c=eval_r(raw_input("輸入三個數(shù)"))?#eval用于轉(zhuǎn)換字符為表達(dá)式
五、表達(dá)式
Python表達(dá)式和語句不同,表達(dá)式具有一個值,語句沒有。
a+1是表達(dá)式
a=1是語句
六、控制結(jié)構(gòu)流程圖
一)順序
二)分支
1、if :
elif :
else:
(和C語言不同的是)if、elif、else后面的表達(dá)式不用小括號括起來,表達(dá)式后面的語句組也不需要用大括號{}括起來(用強(qiáng)制縮進(jìn)表示程序塊),這意味著Python是以一行表示一個語句的(一行上語句過長,可用_續(xù)行);若if體中暫沒有語句,可用pass占位;語句體只有一句,則可以喝if、elif或else合并為一行
if、elif、else按序檢查,若滿足其中一個條件,就執(zhí)行,之后的就跳出if體。
2、條件賦值
=a,if else b
條件成立時,變量值為a,否則為b
三)循環(huán)
循環(huán),一般由循環(huán)初始值、循環(huán)條件、循環(huán)動作、更新循環(huán)條件等組成
1、while循環(huán)和for循環(huán)(和C不同)
①while :
else:
②for in
range([,][,]):
else:
for用于已知次數(shù)的循環(huán)
2、for和while的轉(zhuǎn)換
for和while還是有一些區(qū)別的,for是遍歷數(shù)組值,while則是邏輯值
錯在哪里?
右邊的while循環(huán),i的終值被多加了1個步長
3、循環(huán)控制(和C相同)
break跳出當(dāng)前循環(huán)
continue跳出當(dāng)次循環(huán)
七、函數(shù)
一)內(nèi)置函數(shù)——模塊
import
math這樣的語句用于導(dǎo)入模塊(類似C中的頭文件、庫文件)
●模塊中有哪些對象方法屬性,可用dir函數(shù),dir
()
●模塊的使用,類似于對象的屬性、方法的調(diào)用(即“點(diǎn)記法”),如math.pi、math.sin()、math.log10()
●此外,還可以用from import
*,來導(dǎo)入模塊中所有的對象,在使用時就可以直接使用,不需加和點(diǎn)
import math.tan [as
tg]則引入math中的tan,[并重命名為tg]
二)自定義函數(shù)
def ( )
返回值return 。
函數(shù)可以有1個或更多個形參,也可以無形參(但括號不能省);形參的作用域?yàn)閘ocal,可以用global來聲明全局變量。
與C不同的一些地方:
①函數(shù)在使用前必須已經(jīng)定義,但在使用前無需像有些高級語言那樣聲明
②參數(shù)指定
關(guān)鍵字賦值:在調(diào)用時指出,這樣引用時就不受形參位置的影響
函數(shù)體內(nèi)定義另一個函數(shù),并調(diào)用。例如定義了一個函數(shù)f(big,small),調(diào)用時可以這樣引用f(small=1,big=3)
缺省參數(shù):
三)遞歸
一個函數(shù)使用時可以調(diào)用另一個函數(shù),同樣一個函數(shù)也可以調(diào)用它自己,這就是“遞歸”。
生活中的遞歸如老和尚講故事、德羅斯特效應(yīng)、兩面相對的鏡子等;數(shù)學(xué)上可以用遞歸編程的有階乘、斐波那契數(shù)列、漢諾塔等。
一個遞歸函數(shù)一般由遞歸條件(“遞”)和遞歸出口(“歸”)構(gòu)成;遞歸編程的口訣“掐頭去尾留中間”
八、算法
九、數(shù)據(jù)結(jié)構(gòu)
I、字符串String
一)字符串函數(shù)
長度:len()
拼接: +
重復(fù): *n
成員運(yùn)算符(是否包含,返回True、False): in
遍歷: for c in :
二)字符數(shù)組的概念和使用
1、
[]
方括號[ ]就是索引運(yùn)算符
索引號從0開始(整數(shù)第一個字符),負(fù)索引號從-1開始,即從字符串倒數(shù)第一個
2、切片:使用冒號可以引用索引號前后之間的字符串
[start:finish],start:子序列開始位置的索引值?finish:子序列結(jié)束位置的下一個字符的索引值
[start:finish:countBy]?間隔切片,countBy缺省為1
my_str='hello world'
my_str[0:11:2]
-->'hlowrd'
countBy為-1時可獲得逆字符串
my_str='world'
my_str[::-1]
-->'dlrow'?#my_str==my_str[::-1]用于判斷單詞是否回文
3、不能用字符串索引來改變字符串的值
my_str='hello world'
my_str[1]='l'?#錯誤
但可以使用切片、拼接等方式,如
my_str=my_str[:1]+'a'+str[2:]
三)字符串方法
替換:replace(old,new)
my_str='hello'
my_str.replace('e','a')
-->'hallo'
注意replace方法并沒有改變字符串的值,只是輸出一個替換的字符串,原字符串還是'hello'
可以用dir(str)查看字符串的更多屬性方法
四)字符串比較
可以對兩個字符串關(guān)系運(yùn)算,比較ASCII順序
五)字符串格式化與正則表達(dá)式
II、文件File
一)文件打開和關(guān)閉
f=open('')
f.close
二)遍歷文件行
f=open('names.txt')
for line in f:
f.close
III、列表List
一)=[,,...]?,列表有點(diǎn)像數(shù)組,但列表中的元素可以是不同類型的。
和字符串一樣,可以通過下標(biāo)、索引、切片等來引用列表元素,用法也相似,同樣支持長度、拼接、重復(fù)、成員運(yùn)算等。但和字符串不同的,列表及其元素是可以改變的。
二)列表內(nèi)建方法
.append?#在列表末尾追加一個元素,相當(dāng)于列表做加法(+)
.expend([])?#在列表末尾追加一個列表
.insert(,)
.pop()?#從后刪除一個元素
.remove()?#刪除指定元素值
.sort()?#元素排序
.reverse(()?#元素逆序
.swap(,,)?#交換元素
三)遍歷算平均
for num in :
s+=num
avg=s/len()
四)列表內(nèi)建函數(shù)
sum()?#求數(shù)值列表的和
max
min
五)查找和排序
1、線性查找
.index()?#線性查找元素第一次在列表中出現(xiàn)的位置,若找到返回該值的索引號,反之返回出錯信息
線性查找的時間復(fù)雜度為O(n)
.find()?#類似index,但不同的是找不到子字串時返回-1
2、二分查找
二分查找要先排序
二分查找的時間復(fù)雜度為O(log2n)
3、選擇排序
即每次遍歷將最小值剪切到前面(或?qū)⒆钚≈蹬c初始最前面元素交換)
選擇排序時間復(fù)雜度為O(n2)
4、冒泡排序
每一次遍歷都將小值排前,大值排后,循環(huán)一次以后,最大的元素被“沉底”;
這樣的循環(huán)遍歷直到遍歷時找不到小值在后的元素(即lst(i)>lst(i+1)始終不成立。
冒泡排序的時間復(fù)雜度也是O(n2)?,但實(shí)際運(yùn)行時冒泡法往往比選擇排序時間少,因?yàn)槊芭菖判蚍ㄍǔ?zhí)行的比較操作更少
5、使用內(nèi)建的排序函數(shù)和方法
sorted()?和?.sort()?#返回一個拍好序(默認(rèn)升序)的列表(源列表不變)。它使用了快速排序算法(quicksort),其時間復(fù)雜度O(nlogn)
內(nèi)建排序后面省略了兩個參數(shù)(key=,reverse=),reverse的缺省值即False
六)嵌套列表(二維列表)
列表 lst = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
這是一個三行四列的嵌套列表
若訪問第三行、第二列l(wèi)st [2][1]
len(lst)的結(jié)果是3(“行數(shù)”),不是12(總元素個數(shù))
那么如何知道列表的列數(shù)呢?len(lst[0])、len(lst[1])、len(lst[2])均可
七)列表推導(dǎo)
lst=[x**2 for x in range(1,10)]
IV、元組Tuple
相當(dāng)于不可變的列表,用小括號來建立元祖
可以使用索引、切片、len、print、index等方法;不可以使用append、extend、del等
V、字典Dict
1、用大括號來建立字典,字典元素由不可重復(fù)的鍵和值構(gòu)成;鍵必須是不可變的且不重復(fù)(如整型、浮點(diǎn)型、元祖等不可變類型),值可以是任意類型(如列表等也可以)
my_dict{'Tom':78,'Jim':89,'Mary':80}
2、字典元素存儲時并不按輸入先后順序排列,也不按字母順序排列,所以字典不支持排序。因此,引用字典時應(yīng)使用鍵名引用:?my_dict['Jerry']=99
3、字典也支持長度函數(shù)len、成員運(yùn)算符in(判斷一個“鍵”是否在字典中,它的時間復(fù)雜度為O(1),相比較字符串和列表的O(n),速度更快)等,此外字典還支持以下方法
.items()?#獲取全部的鍵-值對
.keys()?#獲取全部的鍵
.values() #獲取全部的值
.clear()?#清空字典
VI、集合Set
1、無序不重復(fù)元素(鍵)值。相當(dāng)于沒有值只有鍵的字典(所以也可以用{
}建立集合,集合的元素類似于字典的鍵,其類型應(yīng)是不可變不重復(fù)的,如整型、浮點(diǎn)型、元祖等);和字典一樣,集合也沒有順序,不支持排序。
2、集合的創(chuàng)建,使用set函數(shù)
x=set()
集合的添加add方法和刪除remove方法
x.add('body')
x.remove('body')
3、集合的運(yùn)算符
&?交集
|?并集
-?差集
== 等于
!= 不等于
in 成員
for key
in set 枚舉
VII、類和對象
十、GUI簡介
GUI的第三方API庫:TKinter、wxPython、PyQt、PyGtk等
from Tkinter import
*?#導(dǎo)入GUI庫
def changeRelief( )
root=Tk( )?#建立控件
label1=Label(root,text="Hello")
button1=Button(root,text="OK",command=changeRelief)?#command=changeRelief事件處理綁定
label.pack( )
button1.pack( )
root.mainloop( )
十二、數(shù)據(jù)庫
數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System,DBMS)
商業(yè)系統(tǒng):Oracle、Microsoft SQL Server、IBM DB2等
開源(Open Source)系統(tǒng):MySQL、PostgreSQL、SQLite等
其中,SQLite3版本的基本用法:
1、安裝:將zip解壓即可
2、創(chuàng)建或打開數(shù)據(jù)庫
sqlite3
test.db
3、創(chuàng)建一個表creat
sqlite > creat table
(name,num,phone)
4、插入一行(記錄)
sqlite > insert into
values('Zhang',1,'13150201234');
5、查詢
select from
select from where
id=
select from where id
like
6、刪除delete
delete from
7、修改update
update set Attribue=NEW
8、在Python中使用SQLite3
import sqlite3
con=sqlite3.connect('test.db')
cur=con.cursor() #創(chuàng)建一個游標(biāo)
cur.execute('select * from student')
rows=cur.fetchall()
for row in rows:
print row
十三、Web編程基礎(chǔ)
Django
1、安裝
python setup.py install
>djang-admin.py startproject mysite
2、運(yùn)行
>python manage.py runserver
3、創(chuàng)建應(yīng)用
python manage.py startapp addr_book
編輯addr_book
4、模板
HTML語言
模板不是必須的,可以將HTML代碼寫在視圖中,但是這樣不便于改動和分工(可以由專門的美工負(fù)責(zé)設(shè)計(jì)網(wǎng)頁)。
5、模型
數(shù)據(jù)庫
HTML表單
模型不是必須的,可以將數(shù)據(jù)庫操作代碼寫在視圖中,但是這樣不便于切換到新的數(shù)據(jù)庫,需要針對新的數(shù)據(jù)庫修改代碼。有了模型,切換數(shù)據(jù)庫僅需要修改
settings.py 即可。
【相關(guān)網(wǎng)站】
總結(jié)
以上是生活随笔為你收集整理的中国大学moocpython笔记_中国大学MOOC_高级语言程序设计(Python)笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux卸载openjdk_Linux
- 下一篇: list ajax封装,util-pag