命令模式C:\>(需要進(jìn)入相對(duì)路徑才不會(huì)報(bào)錯(cuò))
交互模式>>>
Python的文件后綴名必須以(file.py)結(jié)尾
? //直接運(yùn)行.py 文件,在Windows上是不行的,但是,在Mac和Linux上是可以的,方法是在.py文件的第一行加上一個(gè)特殊的注釋:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #!/usr/bin/env python3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? print('hello, world')
print()會(huì)依次打印每個(gè)字符串,遇到逗號(hào)“,”會(huì)輸出一個(gè)空格
print('100+200=',100+200)需要,隔開
語句塊一般為4個(gè)空格縮進(jìn)
\\表示的字符就是\
print('I\'m \"OK\"!')#后面有特殊字符,需要轉(zhuǎn)義符\
I'm "OK"!
?' 和"? 輸入字符串
'''多行'''? r對(duì)'''? '''沒有干擾
ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符
str='ABC' #字符串
x =b'ABC' #bytes
如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes。要把bytes變?yōu)閟tr,就需要用decode()方法:
len()#字符數(shù)
如果換成bytes,len()函數(shù)就計(jì)算字節(jié)數(shù):>>> len('中文'.encode('utf-8'))
6中文字符 -3個(gè)? ?英文字符-1個(gè)字節(jié)
Python文件開頭寫,注明編碼格式utf-8
#!/usr/bin/env python3
這行注釋是為了告訴Linux/OS X系統(tǒng),這是一個(gè)Python可執(zhí)行程序,Windows系統(tǒng)會(huì)忽略這個(gè)注釋;
# -*- coding: utf-8 -*-
第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會(huì)有亂碼。
>>> 'growth rate: %d %%' %7
growth rate: 7 %'
'Hello, %s成績提升了%.1f %%' %('小明', 13/75)
list:有序的集合
list是一種有序的集合,可以隨時(shí)添加和刪除其中的元素。
list=['li','liu','wang']
len(list)
list[0];list[-1]? ?indexError索引越界
有序添加list.append("san")集合的末尾
list.insert(2,"jack")#插入到指定位置
list.pop()刪除末尾元素
list.pop(i)刪除指定元素
list[2]="javah"#替換指定值
list=["xiao",123,["小明",12],true]
空的list,長度為0;list[]
tuple:?有序的元組
但是tuple一旦初始化就不能修改,沒有添加,替換,刪除元素操作,它更安全,
空的tuple()
一個(gè)tuple定義 tuple(1,)消除歧義;
tuple指向不變,指向一個(gè)list就不能改編成其他對(duì)象,但是指向的list本身是可以變得
p=("A","B",["x","y"],"C")
p[2][0]="M"
p[2][1]="D"
p=("A","B",["M","D"],"C")
L = [
['Apple','Google','Microsoft'] ,
['Java','Python','Ruby','PHP'] ,
['Adam','Bart','Lisa']
]
# 打印Apple:
print(L[0][0])
# 打印Python:
print(L[1][1])
# 打印Lisa:
print(L[2][2])
if條件判斷語句:elif是else if的縮寫,完全可以有多個(gè)elif,所以if語句的完整形式就是:
if<條件判斷1>:
? ? ? <執(zhí)行1>
elif<條件判斷2>:
? ? ? <執(zhí)行2>
elif<條件判斷3>:
? ? ? <執(zhí)行3>
else:
? ? ? <執(zhí)行4>
s=input('birth:')
birth:1989
>>> birth=int(s)
>>> if birth<2000:
...????print('00前')
... else :
...????print('00后')
空格特別重要,語句塊對(duì)整體規(guī)則
if語句執(zhí)行有個(gè)特點(diǎn),它是從上往下判斷,如果在某個(gè)判斷上是True,把該判斷對(duì)應(yīng)的語句執(zhí)行后,就忽略掉剩下的elif和else
簡寫
if x:
? ? print('True')
只要x是非零數(shù)值、非空字符串、非空list等,就判斷為True,否則為False。
invalid syntax#語法錯(cuò)誤
unexpected indent
1) 縮進(jìn)應(yīng)該是四個(gè)空格。if請(qǐng)頂格寫,if下面的兩行,行首四個(gè)空格。
2) age輸入是字符串類型,需要轉(zhuǎn)成整數(shù)才能比較大小
兩種循環(huán):
for x in range(i):
range(i)函數(shù):從0到i的所有數(shù)
break:
n =1
while n <=100:
? ? if n >10:? ? # 當(dāng)n = 11時(shí),條件滿足,執(zhí)行break語句
? ? ? ? ? break? ? # break語句會(huì)結(jié)束當(dāng)前循環(huán)
? ? ?print(n)?
? ? ? n = n +1
?print('END')
體重肥胖問題代碼:
bmi = weight/(height**2)
if bmi<18.5:
? ? print("過輕: %.1f" %bmi)
elif 18.5<=bmi<25:
? ? print("正常: %.1f" %bmi)
elif 25<=bmi<28:
? ? print("過重: %.1f" %bmi)
elif 28<=bmi<32:
? ? print("肥胖: %.1f" %bmi)
else :
? ? print("嚴(yán)重肥胖%.1f"%bmi)
coutinue
n =0
while n <10:?
? ? ?n = n +1
? ? if n %2==0:? ? # 如果n是偶數(shù),執(zhí)行continue語句
? ? ? ? continue? ? ? ? ?# continue語句會(huì)直接繼續(xù)下一輪循環(huán),后續(xù)的print()語句不會(huì)執(zhí)行
? ? print(n)
dict簡稱字典 相當(dāng)于 Map,是一個(gè)鍵值對(duì)
如果key不存在,dict就會(huì)報(bào)錯(cuò):通過in (key in d)
或者get()判斷 (d.get(key))可以返回None,交互界面不顯示或者? ?d.get(key,-1)不存在時(shí)反回-1。
pop(key)key和value同時(shí)刪除
和list比較,dict有以下幾個(gè)特點(diǎn):
查找和插入的速度極快,不會(huì)隨著key的增加而變慢;
需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多。
而list相反:
查找和插入的時(shí)間隨著元素的增加而增加;
占用空間小,浪費(fèi)內(nèi)存很少。
所以,dict是用空間來換取時(shí)間的一種方法。
dict的key必須是不可變對(duì)象。
Set:無序且不重復(fù)的;
s = set([1,2,3])#里面是一個(gè)list集合[1,2,3];但輸出為{1,2,3}表示有這幾個(gè)元素
add(key)添加key
remove(key)刪除key
a.sort()#原地排序
>>> a ='abc'
>>> b = a.replace('a','A')
>>> b
'Abc'
>>> a
'abc'
a是變量,而'abc'才是字符串對(duì)象!有些時(shí)候,我們經(jīng)常說,對(duì)象a的內(nèi)容是'abc',但其實(shí)是指,a本身是一個(gè)變量,它指向的對(duì)象的內(nèi)容才是'abc':
當(dāng)我們調(diào)用a.replace('a', 'A')時(shí),實(shí)際上調(diào)用方法replace是作用在字符串對(duì)象'abc'上的,而這個(gè)方法雖然名字叫replace,但卻沒有改變字符串'abc'的內(nèi)容。相反,replace方法創(chuàng)建了一個(gè)新字符串'Abc'并返回,如果我們用變量b指向該新字符串,就容易理解了,變量a仍指向原有的字符串'abc',但變量b卻指向新字符串'Abc'了:
│ a ───────────────>│ 'abc' │
│ b │─────────────────>│ 'Abc' │
所以,對(duì)于不變對(duì)象來說,調(diào)用對(duì)象自身的任意方法,也不會(huì)改變?cè)搶?duì)象自身的內(nèi)容。相反,這些方法會(huì)創(chuàng)建新的對(duì)象并返回,這樣,就保證了不可變對(duì)象本身永遠(yuǎn)是不可變的。
調(diào)用函數(shù)
定義函數(shù) def
def my-hanshu(x):
? ? if x>0 :
? ? ? ? return x
? ? else x<0:
? ? ? ? return -x
defnop():? ? #空函數(shù)
pass
參數(shù)個(gè)數(shù)不對(duì),并拋出TypeError錯(cuò)誤;
參數(shù)類型不對(duì),python無法檢查
數(shù)據(jù)類型檢查,用isinstance()實(shí)現(xiàn)
def my_bat(x):
if not isinstance(x(int,float)):
raise TypeError("bad? operand type")? ?#拋出異常
if x>=0:
? ? return x
else :
? ? return -x
調(diào)用my_bat('A')
打印Bad?operand type
>>> x, y = move(100,100,60, math.pi /6)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>>> print(x, y)151.9615242270663270.0
>>> r = move(100,100,60, math.pi /6)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >>> print(r)(151.96152422706632,70.0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?python 返回多值就是返回一個(gè)(r)tuple,將變量按位置賦給相對(duì)應(yīng)的值(x=r[1];y=r[2]);
import math? ? #求方程的解
def my_jie(a,b,c):
? ? m=b*b-4*a*c
? ? if m>=0:
? ? ? ? x=(-b+math.sqrt(m))/(2*a)
? ? ? ? y=(-b-math.sqrt(m))/(2*a)
return x,y
? ? else :
? ? ? ? print("無解")
位置參數(shù) power(x)
默認(rèn)參數(shù)power(x,n=2)? #而對(duì)于n > 2的其他情況,就必須明確地傳入n,比如power(5, 3)。
?定義默認(rèn)參數(shù)要牢記一點(diǎn):默認(rèn)參數(shù)必須指向不變對(duì)象!(str、None)
def add_end(L=None):
if L is None:?
?L = []?
?L.append('END')
return L
可變參數(shù):可變參數(shù)允許你傳入0個(gè)或任意個(gè)參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè)tuple
def? kebian(*numbers): #在參數(shù)前加*,在函數(shù)內(nèi)部,接收到的是一個(gè)Tuple
? ? sum=0
? ? for n in numbers:
? ? ? ? ?sum=sum+n*n
? ? return sum
kebian(1,2,3)
#如果已經(jīng)有一個(gè)Tuple或list,可以用’
num=[1,2,3]
kebian(*num)
關(guān)鍵字參數(shù):允許你傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict
def person(name,age,**kw):
? ? print(name,age,kw)
>>>dirc={'city':'beijing','gender':'女'}
person(name,age,**dirc)
#**extra表示把extra這個(gè)dict的所有key-value用關(guān)鍵字參數(shù)傳入到函數(shù)的**kw參數(shù),kw將獲得一個(gè)dict,注意kw獲得的dict是extra的一份拷貝,對(duì)kw的改動(dòng)不會(huì)影響到函數(shù)外的extra。
命名關(guān)鍵字參數(shù):
定義:defperson(name, age, *, city, job):
? ? ? print(name, age, city, job)
默認(rèn)值:
def person(name,age,*,city='beijing',job):
? ? ? print(name,age,city,job)
調(diào)用及打?。?/b>
>>> person('Jack',24, job='Engineer')
Jack 24 Beijing? Engineer
參數(shù)組合:必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。