python學(xué)習(xí)

使用的教材:廖雪峰教材?

另外附一個(gè)廖雪峰筆記茬底,感覺寫的比我簡(jiǎn)練,可以用來查詢具體用法:廖雪峰筆記?

更多的可以查詢:官方文檔?

一、python基礎(chǔ)

(一)數(shù)據(jù)類型和變量

2.字符串:

如果字符串內(nèi)部既包含'又包含"怎么辦?可以用轉(zhuǎn)義字符\來標(biāo)識(shí)蓬戚。

轉(zhuǎn)義字符\可以轉(zhuǎn)義很多字符,比如\n表示換行宾抓,\t表示制表符子漩,字符\本身也要轉(zhuǎn)義,所以\\表示的字符就是\石洗。

為了簡(jiǎn)化幢泼,Python還允許用r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義。

如果字符串內(nèi)部有很多換行讲衫,用\n寫在一行里不好閱讀旭绒,為了簡(jiǎn)化,Python允許用'''...'''的格式表示多行內(nèi)容焦人,可以自己試試:

print('''line1

line2

line3''')

3.布林值:

and運(yùn)算是與運(yùn)算挥吵,只有所有都為True,and運(yùn)算結(jié)果才是True花椭。

or運(yùn)算是或運(yùn)算忽匈,只要其中有一個(gè)為True,or運(yùn)算結(jié)果就是True

not運(yùn)算是非運(yùn)算矿辽,它是一個(gè)單目運(yùn)算符丹允,把True變成False,F(xiàn)alse變成True

4.空值

是Python里一個(gè)特殊的值袋倔,用None表示雕蔽。None不能理解為0,因?yàn)?是有意義的宾娜,而None是一個(gè)特殊的空值批狐。

5.變量

變量在程序中就是用一個(gè)變量名表示了,變量名必須是大小寫英文、數(shù)字和_的組合嚣艇,且不能用數(shù)字開頭承冰。python中是區(qū)分大小寫的。

6.常量

在Python中食零,通常用全部大寫的變量名表示常量困乒。

整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式是不同的,整數(shù)運(yùn)算永遠(yuǎn)是精確的(除法難道也是精確的贰谣?是的D嚷А),而浮點(diǎn)數(shù)運(yùn)算則可能會(huì)有四舍五入的誤差吱抚。

還有一種除法是//涌攻,稱為地板除,兩個(gè)整數(shù)的除法仍然是整數(shù)

用%取余數(shù)频伤。

(二)字符串和編碼

1.編碼:

要注意區(qū)分'ABC'和b'ABC',前者是str芝此,后者雖然內(nèi)容顯示得和前者一樣憋肖,但bytes的每個(gè)字符都只占用一個(gè)字節(jié)。

以Unicode表示的str通過encode()方法可以編碼為指定的bytes婚苹。

>>> 'ABC'.encode('ascii')

b'ABC'

>>> '中文'.encode('utf-8')

b'\xe4\xb8\xad\xe6\x96\x87'

>>> '中文'.encode('ascii')

Traceback (most recent call last):

File "", line 1, in

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

純英文的str可以用ASCII編碼為bytes岸更,內(nèi)容是一樣的,純英文既可以用ascii也可以用utf-8.

含有中文的str可以用UTF-8編碼為bytes膊升。含有中文的str無法用ASCII編碼怎炊,因?yàn)橹形木幋a的范圍超過了ASCII編碼的范圍,Python會(huì)報(bào)錯(cuò)廓译。

反過來评肆,如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes非区。要把bytes變?yōu)閟tr瓜挽,就需要用decode( )方法。

>>> b'ABC'.decode('ascii')

'ABC'

>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

'中文'

2.計(jì)數(shù):

len()函數(shù)計(jì)算的是str的字符數(shù)征绸,如果換成bytes久橙,len()函數(shù)就計(jì)算字節(jié)數(shù)。

3.開始寫代碼的時(shí)候要輸入這兩行管怠。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

在編輯器里面的encoding里面選中encoding in UTF-8 without BOM

4.格式化字符

我們經(jīng)常會(huì)輸出類似'親愛的xxx你好淆衷!你xx月的話費(fèi)是xx,余額是xx'之類的字符串渤弛,而xxx的內(nèi)容都是根據(jù)變量變化的祝拯,所以,需要一種簡(jiǎn)便的格式化字符串的方式她肯。

%d整數(shù)

%f浮點(diǎn)數(shù)

%s字符串

%x十六進(jìn)制整數(shù)

>>> 'Hello, %s' % 'world'

'Hello, world'

>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)

'Hi, Michael, you have $1000000.'

如果你不太確定應(yīng)該用什么鹿驼,%s永遠(yuǎn)起作用欲低,它會(huì)把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串。

有些時(shí)候畜晰,字符串里面的%是一個(gè)普通字符怎么辦砾莱?這個(gè)時(shí)候就需要轉(zhuǎn)義,用%%來表示一個(gè)%

作業(yè):

小明的成績(jī)從去年的72分提升到了今年的85分凄鼻,請(qǐng)計(jì)算小明成績(jī)提升的百分點(diǎn)腊瑟,并用字符串格式化顯示出'xx.x%',只保留小數(shù)點(diǎn)后1位:

# -*- coding: utf-8 -*-

s1 = 72

s2 = 85

print('%.1f %%'% r)

r = (s2 - s1)/s2*100

(1f代表保留小數(shù)點(diǎn)后面1位)


(三)使用list和tupe

(1)list

Python內(nèi)置的一種數(shù)據(jù)類型是列表:list块蚌。list是一種有序的集合闰非,可以隨時(shí)添加和刪除其中的元素。

比如峭范,列出班里所有同學(xué)的名字财松,就可以用一個(gè)list表示:

>>>classmates = ['Michael','Bob','Tracy']

>>>classmates

['Michael','Bob','Tracy']

可以用len(classmates)

索引來訪問list中每一個(gè)位置的元素,記得索引是從0開始的纱控。

>>> classmates[0]

'Michael'

當(dāng)索引超出了范圍時(shí)辆毡,Python會(huì)報(bào)一個(gè)IndexError錯(cuò)誤,所以甜害,要確保索引不要越界舶掖,記得最后一個(gè)元素的索引是len(classmates) - 1。

如果要取最后一個(gè)元素尔店,除了計(jì)算索引位置外眨攘,還可以用-1做索引,直接獲取最后一個(gè)元素:

>>> classmates[-1]

'Tracy'

>>> classmates[-2]

'Bob'

ist是一個(gè)可變的有序表嚣州,所以鲫售,可以往list中追加元素到末尾:

>>> classmates.append('Adam')

>>> classmates

['Michael', 'Bob', 'Tracy', 'Adam']

也可以把元素插入到指定的位置,比如索引號(hào)為1的位置:

>>> classmates.insert(1, 'Jack')

>>> classmates

['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

刪除list末尾的元素该肴,用pop()方法:

>>> classmates.pop()

'Adam'

>>> classmates

['Michael', 'Jack', 'Bob', 'Tracy']

刪除指定位置的元素龟虎,用pop(i)方法,其中i是索引位置沙庐。

>>> classmates.pop(1)

'Jack'

要把某個(gè)元素替換成別的元素鲤妥,可以直接賦值給對(duì)應(yīng)的索引位置

>>> classmates[1] = 'Sarah'

list里面的元素的數(shù)據(jù)類型也可以不同,list元素也可以是另一個(gè)list拱雏。

(二)tuple

tuple和list非常類似棉安,但是tuple一旦初始化就不能修改。

不可變的tuple有什么意義铸抑?因?yàn)閠uple不可變贡耽,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple蒲赂。

如果要定義一個(gè)空的tuple阱冶,可以寫成():

>>>t = ()

要定義一個(gè)只有1個(gè)元素的tuple,如果你這么定義:

>>> t = (1)

>>> t

1

Python規(guī)定滥嘴,這種情況下木蹬,按小括號(hào)進(jìn)行計(jì)算,計(jì)算結(jié)果自然是1若皱。

所以镊叁,只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào),,來消除歧義:

>>> t = (1,)

>>> t

(1,)

最后來看一個(gè)“可變的”tuple:

>>> t = ('a', 'b', ['A', 'B'])

>>> t[2][0] = 'X'

>>> t[2][1] = 'Y'

>>> t

('a', 'b', ['X', 'Y'])

解釋:表面上看走触,tuple的元素確實(shí)變了晦譬,但其實(shí)變的不是tuple的元素,而是list的元素互广。

(四)條件判斷

if <條件判斷1>:

<執(zhí)行1>

elif <條件判斷2>:

<執(zhí)行2>

elif <條件判斷3>:

<執(zhí)行3>

else:

<執(zhí)行4>

elif=else if

很重要的是:

if語句執(zhí)行有個(gè)特點(diǎn)敛腌,它是從上往下判斷,如果在某個(gè)判斷上是True惫皱,把該判斷對(duì)應(yīng)的語句執(zhí)行后像樊,就忽略掉剩下的elif和else

if判斷條件還可以簡(jiǎn)寫,比如寫

if x:

print('True')

只要x是非零數(shù)值逸吵、非空字符串、非空list等缝裁,就判斷為True扫皱,否則為False。


注:

【1】善用input函數(shù)捷绑,讀取用戶輸入的數(shù)字要把數(shù)字從str()變成int()

很多同學(xué)會(huì)用input()讀取用戶的輸入韩脑,這樣可以自己輸入,程序運(yùn)行得更有意思

birth = input('birth: ')

if birth < 2000:

print('00前')

else:

print('00后')

但是輸入以后會(huì)報(bào)錯(cuò)粹污。這是因?yàn)閕nput返回的是str(), str不能直接和整數(shù)比較段多,必須先把str轉(zhuǎn)換成整數(shù)。Python提供了int()函數(shù)來完成這件事情壮吩。因此代碼要改成:

s = input('birth: ')

birth = int(s)

if birth < 2000:

print('00前')

else:

print('00后'

很重要:print('%.1f %%'% r)

(五)循環(huán)

1.? 一種是for...in循環(huán)进苍,依次把list或tuple中的每個(gè)元素迭代出來,看例子

names = ['Michael', 'Bob', 'Tracy']

for name in names:

print(name)

range(101)就可以生成0-100的整數(shù)序列

2.第二種循環(huán)是while循環(huán)鸭叙,只要條件滿足觉啊,就不斷循環(huán),條件不滿足時(shí)退出循環(huán)沈贝。比如我們要計(jì)算100以內(nèi)所有奇數(shù)之和杠人,可以用while循環(huán)實(shí)現(xiàn)。

sum = 0

n = 99

while n > 0:

sum = sum + n

n = n - 2

print(sum)

(六)使用dict和set

1.dict

dict全稱dictionary,在其他語言中也稱為map嗡善,使用鍵-值(key-value)存儲(chǔ)辑莫,具有極快的查找速度。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

>>> d['Michael']

95

>>> d['Adam'] = 67

>>> d['Adam']

67

由于一個(gè)key只能對(duì)應(yīng)一個(gè)value罩引,所以各吨,多次對(duì)一個(gè)key放入value,后面的值會(huì)把前面的值沖掉蜒程。

如果key不存在绅你,dict就會(huì)報(bào)錯(cuò)。字母是key,數(shù)字是value.

要避免key不存在的錯(cuò)誤昭躺,有兩種辦法忌锯,一是通過in判斷key是否存在:

>>> 'Thomas' in d

False

要?jiǎng)h除一個(gè)key,用pop(key)方法领炫,對(duì)應(yīng)的value也會(huì)從dict中刪除:

>>> d.pop('Bob')

75

dict是用空間來換取時(shí)間的一種方法偶垮。

很重要:

需要牢記的第一條就是dict的key必須是不可變對(duì)象

這是因?yàn)閐ict根據(jù)key來計(jì)算value的存儲(chǔ)位置帝洪,如果每次計(jì)算相同的key得出的結(jié)果不同似舵,那dict內(nèi)部就完全混亂了。這個(gè)通過key計(jì)算位置的算法稱為哈希算法(Hash)葱峡。(因此list是可變的砚哗,就不能作為key。)

2.set

set和dict類似砰奕,也是一組key的集合蛛芥,但不存儲(chǔ)value。key不能重復(fù)军援。如果重復(fù)了就會(huì)被自動(dòng)過濾掉仅淑。因此說明顯示的順序不表示set是有序的。

創(chuàng)建一個(gè)set:

>>> s = set([1, 2, 3])

>>> s

{1, 2, 3}

通過add(key)方法可以添加元素到set中

>>> s.add(4)

>>> s

{1, 2, 3, 4}

通過remove(key)方法可以刪除元素

>>> s.remove(4)

>>> s

{1, 2, 3}

兩個(gè)set可以做數(shù)學(xué)意義上的交集胸哥、并集等操作:

>>> s1 & s2

{2, 3}

>>> s1 | s2

{1, 2, 3, 4}

set和dict的唯一區(qū)別僅在于沒有存儲(chǔ)對(duì)應(yīng)的value涯竟,但是汰聋,set的原理和dict一樣丹弱,所以,同樣不可以放入可變對(duì)象榄棵,因?yàn)闊o法判斷兩個(gè)可變對(duì)象是否相等嘲更,也就無法保證set內(nèi)部“不會(huì)有重復(fù)元素”醉鳖。把list放入set,會(huì)報(bào)錯(cuò)哮内。


注:

str是不變對(duì)象盗棵,而list是可變對(duì)象

所以壮韭,對(duì)于不變對(duì)象來說,調(diào)用對(duì)象自身的任意方法纹因,也不會(huì)改變?cè)搶?duì)象自身的內(nèi)容喷屋。相反,這些方法會(huì)創(chuàng)建新的對(duì)象并返回瞭恰,這樣屯曹,就保證了不可變對(duì)象本身永遠(yuǎn)是不可變的。


二.函數(shù)

一惊畏、調(diào)用函數(shù)

max函數(shù)max()可以接收任意多個(gè)參數(shù)恶耽,并返回最大的那個(gè):

>>> max(1, 2)

2

>>> max(2, 3, 1, -5)

3

二、定義函數(shù)

函數(shù)體內(nèi)部的語句在執(zhí)行時(shí)颜启,一旦執(zhí)行到return時(shí)偷俭,函數(shù)就執(zhí)行完畢,并將結(jié)果返回缰盏。因此涌萤,函數(shù)內(nèi)部通過條件判斷和循環(huán)可以實(shí)現(xiàn)非常復(fù)雜的邏輯。

def my_abs(x):

if x >= 0:

return x

else:

return -x

請(qǐng)注意口猜,函數(shù)體內(nèi)部的語句在執(zhí)行時(shí)负溪,一旦執(zhí)行到return時(shí),函數(shù)就執(zhí)行完畢济炎,并將結(jié)果返回川抡。因此,函數(shù)內(nèi)部通過條件判斷和循環(huán)可以實(shí)現(xiàn)非常復(fù)雜的邏輯须尚。

如果沒有return語句崖堤,函數(shù)執(zhí)行完畢后也會(huì)返回結(jié)果,只是結(jié)果為None恨闪。

return None可以簡(jiǎn)寫為return倘感。

如果想定義一個(gè)什么事也不做的空函數(shù)放坏,可以用pass語句:

def nop():

pass

pass可以用來作為占位符咙咽,比如現(xiàn)在還沒想好怎么寫函數(shù)的代碼,就可以先放一個(gè)pass淤年,讓代碼能運(yùn)行起來钧敞。或者刻意略過麸粮,否則會(huì)有語法錯(cuò)誤溉苛。


注意:

1.當(dāng)傳入了不恰當(dāng)?shù)膮?shù)時(shí),內(nèi)置函數(shù)abs會(huì)檢查出參數(shù)錯(cuò)誤弄诲,而我們定義的my_abs沒有參數(shù)檢查愚战,會(huì)導(dǎo)致if語句出錯(cuò)娇唯,出錯(cuò)信息和abs不一樣。所以寂玲,這個(gè)函數(shù)定義不夠完善塔插。

因此如果自己寫的函數(shù)要能夠檢查參數(shù)錯(cuò)誤的話,就要用函數(shù)isinstance()實(shí)現(xiàn):

def my_abs(x):

if not isinstance(x, (int, float)):

raise TypeError('bad operand type')

if x >= 0:

return x

else:

return -x


返回多個(gè)值:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拓哟,一起剝皮案震驚了整個(gè)濱河市想许,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌断序,老刑警劉巖流纹,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異违诗,居然都是意外死亡漱凝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門较雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉哑,“玉大人,你說我怎么就攤上這事亮蒋】鄣洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵慎玖,是天一觀的道長(zhǎng)贮尖。 經(jīng)常有香客問我,道長(zhǎng)趁怔,這世上最難降的妖魔是什么湿硝? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮润努,結(jié)果婚禮上关斜,老公的妹妹穿的比我還像新娘。我一直安慰自己铺浇,他們只是感情好痢畜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳍侣,像睡著了一般丁稀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倚聚,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天线衫,我揣著相機(jī)與錄音,去河邊找鬼惑折。 笑死授账,一個(gè)胖子當(dāng)著我的面吹牛枯跑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播白热,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼全肮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了棘捣?” 一聲冷哼從身側(cè)響起辜腺,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乍恐,沒想到半個(gè)月后评疗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茵烈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年百匆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呜投。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡加匈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仑荐,到底是詐尸還是另有隱情雕拼,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布粘招,位于F島的核電站啥寇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洒扎。R本人自食惡果不足惜辑甜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袍冷。 院中可真熱鬧磷醋,春花似錦、人聲如沸胡诗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乃戈。三九已至褂痰,卻和暖如春亩进,著一層夾襖步出監(jiān)牢的瞬間症虑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工归薛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谍憔,地道東北人匪蝙。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像习贫,于是被迫代替她去往敵國(guó)和親逛球。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程苫昌,做筆記總結(jié)一下重點(diǎn)颤绕。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,681評(píng)論 0 5
  • Python 是一種相當(dāng)高級(jí)的語言祟身,通過 Python 解釋器把符合語法的程序代碼轉(zhuǎn)換成 CPU 能夠執(zhí)行的機(jī)器碼...
    Python程序媛閱讀 1,904評(píng)論 0 3
  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進(jìn)階...
    健康哥哥閱讀 2,029評(píng)論 1 3
  • Python 基礎(chǔ) 此學(xué)習(xí)筆記參照廖雪峰老師的網(wǎng)上Python教程奥务,參考鏈接:http://www.liaoxue...
    斷尾壁虎V閱讀 1,607評(píng)論 0 1
  • 孩子,你睡得正熟袜硫,聽著你輕輕的呼吸聲氯葬,,你的小臉頰尤其的可愛婉陷。我撫摸著你的臉頰帚称,此時(shí)的我,我才能感覺到自己...
    初心_f755閱讀 196評(píng)論 0 0