python學習

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

另外附一個廖雪峰筆記,感覺寫的比我簡練,可以用來查詢具體用法:廖雪峰筆記?

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

一、python基礎

(一)數據類型和變量

2.字符串:

如果字符串內部既包含'又包含"怎么辦?可以用轉義字符\來標識。

轉義字符\可以轉義很多字符,比如\n表示換行,\t表示制表符,字符\本身也要轉義,所以\\表示的字符就是\。

為了簡化,Python還允許用r''表示''內部的字符串默認不轉義。

如果字符串內部有很多換行,用\n寫在一行里不好閱讀,為了簡化,Python允許用'''...'''的格式表示多行內容,可以自己試試:

print('''line1

line2

line3''')

3.布林值:

and運算是與運算,只有所有都為True,and運算結果才是True。

or運算是或運算,只要其中有一個為True,or運算結果就是True

not運算是非運算,它是一個單目運算符,把True變成False,False變成True

4.空值

是Python里一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。

5.變量

變量在程序中就是用一個變量名表示了,變量名必須是大小寫英文、數字和_的組合,且不能用數字開頭。python中是區分大小寫的。

6.常量

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

整數和浮點數在計算機內部存儲的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四舍五入的誤差。

還有一種除法是//,稱為地板除,兩個整數的除法仍然是整數

用%取余數。

(二)字符串和編碼

1.編碼:

要注意區分'ABC'和b'ABC',前者是str,后者雖然內容顯示得和前者一樣,但bytes的每個字符都只占用一個字節。

以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,內容是一樣的,純英文既可以用ascii也可以用utf-8.

含有中文的str可以用UTF-8編碼為bytes。含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。

反過來,如果我們從網絡或磁盤上讀取了字節流,那么讀到的數據就是bytes。要把bytes變為str,就需要用decode( )方法。

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

'ABC'

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

'中文'

2.計數:

len()函數計算的是str的字符數,如果換成bytes,len()函數就計算字節數。

3.開始寫代碼的時候要輸入這兩行。

#!/usr/bin/env python3

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

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

4.格式化字符

我們經常會輸出類似'親愛的xxx你好!你xx月的話費是xx,余額是xx'之類的字符串,而xxx的內容都是根據變量變化的,所以,需要一種簡便的格式化字符串的方式。

%d整數

%f浮點數

%s字符串

%x十六進制整數

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

'Hello, world'

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

'Hi, Michael, you have $1000000.'

如果你不太確定應該用什么,%s永遠起作用,它會把任何數據類型轉換為字符串。

有些時候,字符串里面的%是一個普通字符怎么辦?這個時候就需要轉義,用%%來表示一個%

作業:

小明的成績從去年的72分提升到了今年的85分,請計算小明成績提升的百分點,并用字符串格式化顯示出'xx.x%',只保留小數點后1位:

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

s1 = 72

s2 = 85

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

r = (s2 - s1)/s2*100

(1f代表保留小數點后面1位)


(三)使用list和tupe

(1)list

Python內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。

比如,列出班里所有同學的名字,就可以用一個list表示:

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

>>>classmates

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

可以用len(classmates)

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

>>> classmates[0]

'Michael'

當索引超出了范圍時,Python會報一個IndexError錯誤,所以,要確保索引不要越界,記得最后一個元素的索引是len(classmates) - 1。

如果要取最后一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最后一個元素:

>>> classmates[-1]

'Tracy'

>>> classmates[-2]

'Bob'

ist是一個可變的有序表,所以,可以往list中追加元素到末尾:

>>> classmates.append('Adam')

>>> classmates

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

也可以把元素插入到指定的位置,比如索引號為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'

要把某個元素替換成別的元素,可以直接賦值給對應的索引位置

>>> classmates[1] = 'Sarah'

list里面的元素的數據類型也可以不同,list元素也可以是另一個list。

(二)tuple

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

不可變的tuple有什么意義?因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。

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

>>>t = ()

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

>>> t = (1)

>>> t

1

Python規定,這種情況下,按小括號進行計算,計算結果自然是1。

所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:

>>> t = (1,)

>>> t

(1,)

最后來看一個“可變的”tuple:

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

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

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

>>> t

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

解釋:表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。

(四)條件判斷

if <條件判斷1>:

<執行1>

elif <條件判斷2>:

<執行2>

elif <條件判斷3>:

<執行3>

else:

<執行4>

elif=else if

很重要的是:

if語句執行有個特點,它是從上往下判斷,如果在某個判斷上是True,把該判斷對應的語句執行后,就忽略掉剩下的elif和else

if判斷條件還可以簡寫,比如寫

if x:

print('True')

只要x是非零數值、非空字符串、非空list等,就判斷為True,否則為False。


注:

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

很多同學會用input()讀取用戶的輸入,這樣可以自己輸入,程序運行得更有意思

birth = input('birth: ')

if birth < 2000:

print('00前')

else:

print('00后')

但是輸入以后會報錯。這是因為input返回的是str(), str不能直接和整數比較,必須先把str轉換成整數。Python提供了int()函數來完成這件事情。因此代碼要改成:

s = input('birth: ')

birth = int(s)

if birth < 2000:

print('00前')

else:

print('00后'

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

(五)循環

1.? 一種是for...in循環,依次把list或tuple中的每個元素迭代出來,看例子

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

for name in names:

print(name)

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

2.第二種循環是while循環,只要條件滿足,就不斷循環,條件不滿足時退出循環。比如我們要計算100以內所有奇數之和,可以用while循環實現。

sum = 0

n = 99

while n > 0:

sum = sum + n

n = n - 2

print(sum)

(六)使用dict和set

1.dict

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

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

>>> d['Michael']

95

>>> d['Adam'] = 67

>>> d['Adam']

67

由于一個key只能對應一個value,所以,多次對一個key放入value,后面的值會把前面的值沖掉。

如果key不存在,dict就會報錯。字母是key,數字是value.

要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:

>>> 'Thomas' in d

False

要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:

>>> d.pop('Bob')

75

dict是用空間來換取時間的一種方法。

很重要:

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

這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。(因此list是可變的,就不能作為key。)

2.set

set和dict類似,也是一組key的集合,但不存儲value。key不能重復。如果重復了就會被自動過濾掉。因此說明顯示的順序不表示set是有序的。

創建一個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}

兩個set可以做數學意義上的交集、并集等操作:

>>> s1 & s2

{2, 3}

>>> s1 | s2

{1, 2, 3, 4}

set和dict的唯一區別僅在于沒有存儲對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變對象,因為無法判斷兩個可變對象是否相等,也就無法保證set內部“不會有重復元素”。把list放入set,會報錯。


注:

str是不變對象,而list是可變對象

所以,對于不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象并返回,這樣,就保證了不可變對象本身永遠是不可變的。


二.函數

一、調用函數

max函數max()可以接收任意多個參數,并返回最大的那個:

>>> max(1, 2)

2

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

3

二、定義函數

函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,并將結果返回。因此,函數內部通過條件判斷和循環可以實現非常復雜的邏輯。

def my_abs(x):

if x >= 0:

return x

else:

return -x

請注意,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,并將結果返回。因此,函數內部通過條件判斷和循環可以實現非常復雜的邏輯。

如果沒有return語句,函數執行完畢后也會返回結果,只是結果為None。

return None可以簡寫為return。

如果想定義一個什么事也不做的空函數,可以用pass語句:

def nop():

pass

pass可以用來作為占位符,比如現在還沒想好怎么寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。或者刻意略過,否則會有語法錯誤。


注意:

1.當傳入了不恰當的參數時,內置函數abs會檢查出參數錯誤,而我們定義的my_abs沒有參數檢查,會導致if語句出錯,出錯信息和abs不一樣。所以,這個函數定義不夠完善。

因此如果自己寫的函數要能夠檢查參數錯誤的話,就要用函數isinstance()實現:

def my_abs(x):

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

raise TypeError('bad operand type')

if x >= 0:

return x

else:

return -x


返回多個值:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370

推薦閱讀更多精彩內容

  • 最近在慕課網學習廖雪峰老師的Python進階課程,做筆記總結一下重點。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,713評論 0 5
  • Python 是一種相當高級的語言,通過 Python 解釋器把符合語法的程序代碼轉換成 CPU 能夠執行的機器碼...
    Python程序媛閱讀 1,928評論 0 3
  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進階...
    健康哥哥閱讀 2,051評論 1 3
  • Python 基礎 此學習筆記參照廖雪峰老師的網上Python教程,參考鏈接:http://www.liaoxue...
    斷尾壁虎V閱讀 1,612評論 0 1
  • 孩子,你睡得正熟,聽著你輕輕的呼吸聲,,你的小臉頰尤其的可愛。我撫摸著你的臉頰,此時的我,我才能感覺到自己...
    初心_f755閱讀 205評論 0 0