天天看點

Python學習筆記

一、資料類型

1、整數 2、浮點數 3、字元串 4、布爾值 5、空值

二、print語句

連結 >>> print 'The quick brown fox', 'jumps over', 'the lazy dog'

The quick brown fox jumps over the lazy dog

三、raw字元串與多行字元串

print '\"To be, or not to be\": that is the question.\nWhether it\'s nobler in the mind to suffer.'

print r'''"To be, or not to be": that is the question.Whether it's nobler in the mind to suffer.'''

四、Unicode字元串

# -*- coding: utf-8 -*-      print u'中文'

五、List(清單)的操作

定義:>>> classmates = ['Michael', 'Bob', 'Tracy']    print classmates

順序通路:L = [95.5,85,59,59]      print L[0]   95.5

倒序通路:L = [95.5,85,59]      print L[-1]   59

添加:1、append()方法,追加到list的末尾    

>>> L = ['Adam', 'Lisa', 'Bart']

>>> L.append('Paul')

>>> print L

['Adam', 'Lisa', 'Bart', 'Paul']

  2、insert()方法,可以最近到指定地點

>>> L.insert(0, 'Paul')

['Paul', 'Adam', 'Lisa', 'Bart']

删除:1、pop()方法預設從list尾部删除一個元素

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']

>>> L.pop()

'Paul'

['Adam', 'Lisa', 'Bart']

  2、>>> L = ['Adam', 'Lisa', 'Paul', 'Bart']

>>> L.pop(2)

替換:>>> L = ['Adam', 'Lisa', 'Bart']

>>> L[2] = 'Paul'

L = ['Adam', 'Lisa', 'Paul']

六、建立tuple(元組)

tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。

建立tuple和建立list唯一不同之處是用( )替代了[ ],其他操作基本都一緻。

單元素tuple為了避免歧義,規定定義 >>> t = (1,)    >>> print  t     (1,)

可變tuple  >>> t = ('a', 'b', ['A', 'B'])    注意到 t 有 3 個元素:'a','b'和一個

list:['A', 'B']。list作為一個整體是tuple的第3個元素。list對象可以通過 t[2] 拿到:>>> L = t[2]

七、if語句

Python代碼的縮進非常嚴格,具有相同縮進的代碼被視為代碼塊,

縮進請嚴格按照Python的習慣寫法:4個空格,不要使用Tab,更不要混合Tab和空格,否則很容易造成因為縮進引起的文法錯誤。

if 語句後接表達式,然後用:表示代碼塊開始。

如果你在Python互動環境下敲代碼,還要特别留意縮進,并且退出縮進需要多敲一行回車:

age = 20

if age >= 18:

    print 'your age is', age

    print 'adult'

print 'END'

If-else語句

else:

    print 'teenager'

If-elif-else語句

score = 85

if score>=90:

    print 'excellent'

elif score>=80:

    print 'good'

elif score>=60:

    print 'passed'

    print 'failed'

八、for循環

L = [75, 92, 59, 68]

sum = 0.0

for score in L:

    sum = sum + score

print sum / 4

九、while循環

和 for 循環不同的另一種循環是 while 循環,while 循環不會疊代 list 或 tuple 的元素,而是根據表達式判斷循環是否結束。

利用while循環計算100以内奇數的和

sum = 0

x = 1

while x < 100:

   sum = sum + x

   x = x + 2

print sum

十、break退出循環

用 for 循環或者 while 循環時,如果要在循環體内直接退出循環,可以使用 break 語句。

利用 while True 無限循環配合 break 語句,計算 1 + 2 + 4 + 8 + 16 + ... 的前20項的和。

n = 1

while True:

    sum = sum + x

    x = x * 2

    n = n + 1

    if n > 20:

        break

十一、Continue

對已有的計算 0 - 100 的while循環進行改造,通過增加 continue 語句,使得隻計算奇數的和:

x = 0

    x = x + 1

    if x > 100:

    if x % 2 == 0:

        continue

    sum = sum + x

十二、多重循環

對100以内的兩位數,請使用一個兩重循環列印出所有十位數數字比個位數數字小的數,例如,23(2 < 3)

for x in [1, 2, 3, 4, 5, 6, 7, 8, 9]:

    for y in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:

        if x < y:

            print x * 10 + y

十三、Dict

我們把名字稱為key,對應的成績稱為value,dict就是通過 key 來查找 value。

花括号 {} 表示這是一個dict,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗号可以省略。

由于dict也是集合,len() 函數可以計算任意集合的大小:

d = {

    'Adam': 95,

    'Lisa': 85,

    'Bart': 59

}

十四、通路dict

1、if 'Paul' in d:

    print d['Paul']  通過key通路,傳回value值

2、通過dict本身提供的get方法

>>> print d.get('Bart')

59

>>> print d.get('Paul')

None          沒有key值時,傳回None

十五、dict的特點

1、查找速度快

無論dict有10個元素還是10萬個元素,查找速度都一樣。而list的查找速度随着元素增加而逐漸下降。

不過dict的查找速度快不是沒有代價的,dict的缺點是占用記憶體大,還會浪費很多内容,list正好相反,占用記憶體小,但是查找速度慢。

由于dict是按 key 查找,是以,在一個dict中,key不能重複。

2、存儲的key-value序對是沒有順序的

當我們試圖列印這個dict時:

>>> print d

{'Lisa': 85, 'Adam': 95, 'Bart': 59}

列印的順序不一定是我們建立時的順序,而且,不同的機器列印的順序都可能不同,這說明dict内部是無序的,不能用dict存儲有序的集合。

3、作為 key 的元素必須不可變

Python的基本類型如字元串、整數、浮點數都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key。

十六、更新dict

1、key值不同,新添加,用指派語句:>>> d['Paul'] = 72

2、如果key值已有,則更新,覆寫原有

十七、周遊dict

for key in d:

    print key + ':', d.get(key)

十八、Set

dict的作用是建立一組 key 和一組 value 的映射關系,dict的key是不能重複的。

有的時候,我們隻想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set就派上用場了。

set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。

建立 set 的方式是調用 set() 并傳入一個 list,list的元素将作為set的元素:

列印的順序和原始 list 的順序有可能是不同的,因為set内部存儲的元素是無序的。

因為set不能包含重複的元素,是以,當我們傳入包含重複元素的 list 會怎麼樣呢?

十九、通路set

由于set存儲的是無序集合,是以我們沒法通過索引來通路。

通路 set中的某個元素實際上就是判斷一個元素是否在set中。

>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])

>>> 'Bart' in s

True

>>> 'Bill' in s   大小寫敏感

False   

二十、set的特點

set的内部結構和dict很像,唯一差別是不存儲value,是以,判斷一個元素是否在set中速度很快。

set存儲的元素和dict的key類似,必須是不變對象,是以,任何可變對象是不能放入set中的。

最後,set存儲的元素也是沒有順序的。

months = set(['Jan','Feb','Mar','Apr','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])

x1 = 'Feb'

x2 = 'Sun'

if x1 in months:

    print 'x1: ok'

    print 'x1: error'

if x2 in months:

    print 'x2: ok'

    print 'x2: error'

二十一、周遊set

s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])

for x in s:

    print x[0] + ':', x[1]

Lisa: 85

Adam: 95

Bart: 59

二十二、更新set

1、添加新的元素

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

>>> s.add(4)

>>> print s

set([1, 2, 3, 4])

2、删除set中的元素      如果删除的元素不存在set中,remove()會報錯:

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

>>> s.remove(4)

set([1, 2, 3])

二十三、函數

寫一次,多次調用

調用函數  絕對值的函數 abs

比較函數 cmp(x, y) 就需要兩個參數,如果 x<y,傳回 -1,如果 x==y,傳回 0,如果 x>y,傳回 1

int()函數可以把其他資料類型轉換為整數

str()函數把其他類型轉換成 str

sum()函數接受一個list作為參數,并傳回list所有元素之和。請計算 1*1 + 2*2 + 3*3 + ... + 100*100。

L = []

while x <= 100:

    L.append(x * x)

print sum(L)

二十四、編寫函數

在Python中,定義一個函數要使用 def 語句,依次寫出函數名、括号、括号中的參數和冒号:,然後,在縮進塊中編寫函數體,函數的傳回值用 return 語句傳回。

請定義一個 square_of_sum 函數,它接受一個list,傳回list中每個元素平方的和

def square_of_sum(L):

    sum = 0

    for x in L:

        sum = sum + x * x

    return sum

print square_of_sum([1, 2, 3, 4, 5])

print square_of_sum([-5, 0, 5, 15, 25])

傳回多值

用print列印傳回結果,原來傳回值是一個tuple!

但是,在文法上,傳回一個tuple可以省略括号,而多個變量可以同時接收一個tuple,按位置賦給對應的值,是以,Python的函數傳回多值其實就是傳回一個tuple,但寫起

來更友善。一進制二次方程的定義是:ax2 + bx + c = 0

請編寫一個函數,傳回一進制二次方程的兩個解。

注意:Python的math包提供了sqrt()函數用于計算平方根。

import math

def quadratic_equation(a, b, c):

    t = math.sqrt(b * b - 4 * a * c)

    return (-b + t) / (2 * a),( -b - t )/ (2 * a)

print quadratic_equation(2, 3, 0)

print quadratic_equation(1, -6, 5)

二十五、遞歸函數

漢諾塔 (http://baike.baidu.com/view/191666.htm) 的移動也可以看做是遞歸函數。

我們對柱子編号為a, b, c,将所有圓盤從a移到c可以描述為:

如果a隻有一個圓盤,可以直接移動到c;

如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤,首先需要把 (N-1) 個圓盤移動到 b,然後,将 a的最後一個圓盤移動到c,再将b的(N-1)個圓盤移動到c。

請編寫一個函數,給定輸入 n, a, b, c,列印出移動的步驟:

move(n, a, b, c)

例如,輸入 move(2, 'A', 'B', 'C'),列印出:

A --> B

A --> C

def move(n, a, b, c):

    if n == 1:

        print a,'-->',c

        return

    move(n-1,a,c,b)

    print a,'-->',c

    move(n-1,b,a,c)

move(4, 'A', 'B', 'C')

B --> C

定義預設參數

int()函數的第二個參數是轉換進制,如果不傳,預設是十進制 (base=10),如果傳了,就用傳入的參數。

由于函數的參數按從左到右的順序比對,是以預設參數隻能定義在必需參數的後面:

# OK:

def fn1(a, b=1, c=2):

    pass

# Error:

def fn2(a=1, b):

    Pass

def greet(name='world'):

    print 'Hello,' + name + '.'

greet()

greet('Bart')

Hello,world.

Hello,Bart.

定義可變參數

可變參數也不是很神秘,Python解釋器會把傳入的一組參數組裝成一個tuple傳遞給可變參數,是以,在函數内部,直接把變量 args 看成一個 tuple 就好了。

可變參數 args 是一個tuple,當0個參數傳入時,args是一個空tuple。

參考代碼:

def average(*args):

    sum = 0.0

    if len(args) == 0:

        return sum

    for x in args:

        sum = sum + x

    return sum / len(args)

print average()

print average(1, 2)

print average(1, 2, 2, 3, 4)

二十六、對list進行切片Slice

取前3個元素,用一行代碼就可以完成切片:

>>> L[0:3]

隻用一個 : ,表示從頭到尾:

>>> L[:]

請利用切片,取出:

1. 前10個數;

2. 3的倍數;

3. 不大于50的5的倍數。

L = range(1, 101)

print L[:10]

print L[2::3]

print L[4:50:5]

倒序切片

5的倍數可以用 ::5 取出,要确定起始索引。

print L[-10:]

print L[-46::5]

二十七、對字元串切片

但它會把所有字母都變成大寫。請設計一個函數,它接受一個字元串,然後傳回一個僅首字母變成大寫的字元串。

def firstCharUpper(s):

    return s[0].upper() + s[1:]

print firstCharUpper('hello')

print firstCharUpper('sunday')

print firstCharUpper('september')

Hello

Sunday

September

二十八、疊代

因為 Python 的 for循環不僅可以用在list或tuple上,還可以作用在其他任何可疊代對象上。

是以,疊代操作就是對于一個集合,無論該集合是有序還是無序,我們用 for 循環總是可以依次取出集合的每一個元素。

注意: 集合是指包含一組元素的資料結構,我們已經介紹的包括:

1. 有序集合:list,tuple,str和unicode;

2. 無序集合:set

3. 無序集合并且具有 key-value 對:dict

而疊代是一個動詞,它指的是一種操作,在Python中,就是 for 循環。

疊代與按下标通路數組最大的不同是,後者是一種具體的疊代實作方式,而前者隻關心疊代結果,根本不關心疊代内部是如何實作的。

請用for循環疊代數列 1-100 并列印出7的倍數。

for i in range(1,101):

    if i % 7 == 0:

        print i

本文轉自 KaliArch 51CTO部落格,原文連結:http://blog.51cto.com/kaliarch/1897001,如需轉載請自行聯系原作者

上一篇: OOA OOD OOP
下一篇: OOP設計原則