重拾編程樂(lè)趣——我的Python筆記

2018-06-16 18:29 更新

早就想學(xué)學(xué)python了,但是一直沒(méi)有勇氣,一個(gè)偶然的機(jī)會(huì),感謝圖靈教育送了我一本《父與子的編程之旅:與小卡特一起學(xué)Python》,讓我有激情、有動(dòng)力學(xué)下去。

而我也很爭(zhēng)氣,很神奇的讀完了這本書(shū),要知道我現(xiàn)在很少讀web相關(guān)外的技術(shù)書(shū)籍的,我給這本書(shū)的評(píng)價(jià)是5星,很棒的一本入門(mén)書(shū),淺顯易懂,非常適合新手來(lái)閱讀,而且這不是一本講python的書(shū),而是一本講編程的書(shū)。

感謝這本書(shū),感謝python讓我重新找回了編程的樂(lè)趣,終于又有了那種剛剛學(xué)習(xí)C語(yǔ)言時(shí)候的感覺(jué)了,所以我決定寫(xiě)下這篇文章,算是我的讀書(shū)筆記吧,也是給自己做個(gè)備忘,主要是對(duì)這本書(shū)和python的總結(jié)。

正文從這里開(kāi)始,下面的內(nèi)容都會(huì)按照書(shū)的目錄結(jié)構(gòu)來(lái)進(jìn)行記錄。

出發(fā)吧

安裝python

學(xué)習(xí)python的第一步是安裝python,可以到python的官網(wǎng)下載,這里有很多版本,選擇合適的版本和平臺(tái)下載即可

我選擇是2.x,我下載時(shí)最新的版本是2.7.12,windows平臺(tái)的安裝就是一路下一步即可安裝好。

交互模式

在開(kāi)始菜單搜索或找到python安裝目錄,打開(kāi)IDLE(Python GUI),即進(jìn)入了python的交互模式,

交互模式的意思就是,你可以輸入一行代碼,然后按下回車(chē),python會(huì)立馬告訴你執(zhí)行結(jié)果,這個(gè)特別好用。

print "Hello World"

上面代碼的執(zhí)行結(jié)果就是打印出Hellow World,print是python的輸出語(yǔ)句。

第一個(gè)程序

打開(kāi)菜單->File->New File(ctrl + N),就可以進(jìn)入文本編輯模式,這里可以輸入多行代碼,比如鍵入如下代碼:

print "Hello World";
print 22 + 10;

然后保存到某個(gè)目錄,名字為xxx.py,菜單->Run->Run Module(F5),即可執(zhí)行上面的代碼。

記住內(nèi)存和變量

每個(gè)程序都是由下面三個(gè)部分組成:

  • 輸入(input)
  • 處理輸入(process)
  • 輸出(ouput)

名字

在python中聲明變量像下面這樣,python中的變量都類(lèi)似于引用,也是沒(méi)有類(lèi)型的。

num = 123;
str = "123";

基本數(shù)學(xué)運(yùn)算

python可以完成基本的數(shù)學(xué)運(yùn)算,當(dāng)初python設(shè)計(jì)出來(lái)就是為了完成數(shù)學(xué)運(yùn)算。

四大基本運(yùn)算

python可以完成四大基礎(chǔ)運(yùn)算,如下所示:

print 3 + 2 # 4
print 3 - 2 # 1
print 3 * 2 # 6

print 3 / 2 # 1
print 3.0 / 2 # 1.5

在前面的3 + 2中,3 和 2稱(chēng)為操作數(shù),+ 稱(chēng)為操作符。

python的運(yùn)算順序和數(shù)學(xué)中一樣,乘除高于加減,如果要改變運(yùn)算順序,和數(shù)學(xué)中一樣的,需要添加括號(hào)。

print 3 + 1 * 2 # 6
print (3 + 1) * 2 # 8 

指數(shù)和求余數(shù)

在python中指數(shù)可以像下面這樣表示

print 3 ** 5 # 3 * 3 * 3 * 3 * 3 = 243

求余數(shù)使用%,像下面這樣,注意和除法區(qū)分開(kāi)

print 7 % 2 # 1
print 7 / 2 # 3

自增和自減

python中沒(méi)有想c++中的自增和自減(i++),要實(shí)現(xiàn)一個(gè)數(shù)的自增的像下面這樣

num = 2
num += 1 # 3
num -= 1 # 2

上面的代碼和下面的代碼效果是一樣的

num = 2
num = num + 1 # 3
num = num - 1 # 2

數(shù)據(jù)的類(lèi)型

python中的變量雖然沒(méi)有類(lèi)型,但是值是有類(lèi)型的。

改變類(lèi)型

可以通過(guò)下面的函數(shù)來(lái)改變數(shù)據(jù)類(lèi)型

  • float() 從一個(gè)字符串或整數(shù)創(chuàng)建浮點(diǎn)數(shù)
  • int() 從一個(gè)字符串或浮點(diǎn)數(shù)創(chuàng)建一個(gè)新的整數(shù)
  • str() 從一個(gè)書(shū)或其他任何類(lèi)型創(chuàng)建一個(gè)新的字符串

三個(gè)函數(shù)都會(huì)返回一個(gè)新的值,而不會(huì)改變?cè)瓉?lái)的值,因?yàn)橹凳遣豢勺兊?/p>

a = 24
b = float(a) # 24.0

c = 38.0
d = int(c) # 38

類(lèi)型檢查

python中的變量是沒(méi)有類(lèi)型,那么如何檢查一個(gè)變量當(dāng)前的值是什么類(lèi)型的呢?答案就是type函數(shù)。

a = 24
type(a) # <type 'int'>

b = 24.0
type(b) # <type 'float'>

c = 'str'
type(c) # <type 'str'>

輸入

對(duì)一個(gè)程序來(lái)說(shuō)最重要的一點(diǎn)就是輸入了,如果電腦不能響應(yīng)輸入,那么就一點(diǎn)用處都沒(méi)有了。

raw_input

raw_input函數(shù)可以從用戶(hù)哪里得到一個(gè)字符串

print "請(qǐng)輸入:"
some = raw_input();
print "你的輸入是:", some

上面的程序會(huì)輸出你輸入的任何字符

raw_input還可以接受一個(gè)參數(shù),這個(gè)參數(shù)會(huì)被作為輸出,上面的程序可以簡(jiǎn)化為下面這樣

some = raw_input("請(qǐng)輸入:")
print "你的輸入是:", some

print

print用來(lái)給打印輸出,簡(jiǎn)單點(diǎn)說(shuō)就是向控制臺(tái)打印一些東西

print "yan"
print "yan"
print "yan"

上面的三條語(yǔ)句會(huì)得到下面的輸出

yan
yan
yan

如果想在同一行打印的話(huà)可以在結(jié)尾加上逗號(hào)

print "yan",
print "yan",
print "yan"

上面的語(yǔ)句會(huì)得到下面的輸出

yan yan yan

中間會(huì)有一個(gè)空格,print還支持多個(gè)參數(shù),中間用逗號(hào)分隔

print "yan", "yan", "yan"

上面的語(yǔ)句會(huì)得到下面的輸出,中間也有一個(gè)空格

yan yan yan

來(lái)自互聯(lián)網(wǎng)的輸入

可以python的內(nèi)置庫(kù),可以獲得從互聯(lián)網(wǎng)的而輸入,下面的代碼可以輸出我的博客內(nèi)容

import urllib2
file = urllib2.urlopen("http://yanhaijing.com")
msg = file.read()
print msg

判斷在判斷

每次程序執(zhí)行都輸出一樣的東西沒(méi)什么意思,需要有判斷分支才有意思。

測(cè)試,測(cè)試

人之所以有智能是因?yàn)槿四軌蛩伎?,面?duì)選擇是能做出選擇,那么如何讓計(jì)算機(jī)也能夠做出選擇呢?那就是測(cè)試,我們需要做一些測(cè)試,然后決定接下來(lái)做什么。這些測(cè)試可能包括如下問(wèn)題:

  • 這兩個(gè)東西相等嗎?
  • 其中一個(gè)是不是小于另一個(gè)?
  • 其中一個(gè)是不是大于另一個(gè)?

完成測(cè)試并更根據(jù)結(jié)果做出測(cè)試稱(chēng)之為分支,在python中使用if來(lái)進(jìn)行測(cè)試:

if a == 1

python中的代碼塊比較奇葩,不是靠大括號(hào)而是縮進(jìn)來(lái)確定范圍的,聲明一個(gè)代碼塊時(shí)就加一個(gè)冒號(hào),就像下面這樣:

if a == 1:
    print "a等于1"
    print "代碼塊"
print "這里不是代碼塊了"

python中的elseif和else像下面這樣:

if a == 1:
    print "a等于1"
elif a == 2:
    print "a等于2"
else:
    print "a等于其他值"

比較操作符

python中的比較操作符不只有等于還有其他,比如大于小于等,完整的列表如下

  • == (等于)
  • < (小于)
  • (大于)

  • <= (小于等于)
  • = (大于等于)

  • != (不等于)

邏輯運(yùn)算符

python中也可以表達(dá)邏輯演算中的與 或 非,分別用下面的符號(hào)表示

  • and
  • or
  • not

邏輯運(yùn)算符的用例如下

if a != 1 and a != 2:
    print "a不等于1和2"

轉(zhuǎn)圈圈

來(lái)說(shuō)說(shuō)循環(huán),循環(huán)分為兩種,計(jì)數(shù)循環(huán)和條件循環(huán)。

計(jì)數(shù)循環(huán)

python中的計(jì)數(shù)循環(huán)使用for in,語(yǔ)法如下所示,和c語(yǔ)言有很大差別

for looper in [1, 2, 3, 4]:
    print looper

[1, 2, 3, 4]是列表,python中類(lèi)似數(shù)組的東西,如果循環(huán)次數(shù)很多,可以用range來(lái)代替

for looper in range(1, 5):
    print looper

range還可以之傳入一個(gè)參數(shù),比如range(5)等同于 range(0, 5)

如果改變循環(huán)的步長(zhǎng),可以傳入第三個(gè)參數(shù),range(0, 6, 2)等同于 [0, 2, 4],其中2就是步長(zhǎng)

步長(zhǎng)還可以是負(fù)數(shù),range(6, 0, -2),等同于[6, 4, 2]

條件循環(huán)

條件循環(huán)的意思就是判斷某個(gè)條件是否為真,如果為真就一直循環(huán)下去,使用while關(guān)鍵字

while 1 == 1:
    print "永遠(yuǎn)也不會(huì)停下來(lái)"

跳出循環(huán)

跳出循環(huán)可以使用break和continue,分別是退出循環(huán)和退出本次循環(huán)。

全是為了你——注釋

對(duì)于程序而言注釋必不可少,python的注釋和類(lèi)c語(yǔ)言不一樣,是使用#號(hào),#號(hào)后面的都被當(dāng)作注釋?zhuān)裣旅孢@樣

# 我是注釋我是注釋
print 213 # 行末注釋

python中沒(méi)有多行注釋?zhuān)荒苡脝涡凶⒁暷M多行注釋?zhuān)裣旅孢@樣

# ***********
# 多行注釋
# 多行注釋
# ***********

收集起來(lái)——列表和字典

python中存取數(shù)據(jù)有兩種類(lèi)型的東西,一種叫做列表,一種叫做字典。

列表

python中的列表和數(shù)組很像,創(chuàng)建列表的語(yǔ)法如下所示:

list = [1, 2, 3, 4]
print list[0] # 1

可以用append向列表添加一個(gè)元素

list = []
list.append(1)
print list # 1

列表分片

python中想從列表中獲取列表片段,需要用到分片(slicing)

list = ['a', 'b', 'c', 'd']
print list[1:3]

>>> ['b', 'c'] 

分片的語(yǔ)法可以簡(jiǎn)寫(xiě),可以省略冒號(hào)前后的數(shù)字

list = [1, 2, 3, 4, 5]

print list[:]
>>> [1, 2, 3, 4, 5]

print list[3:]
>>> [4, 5]

print list[:3]
>>> [1, 2, 3]

需要注意分片會(huì)返回一個(gè)新的列表,不會(huì)修改原列表。

in關(guān)鍵字

要查找摸個(gè)元素是否在列表中,可以使用in

list = ['a']

print 'a' in list
>>> True

del關(guān)鍵字

del 從列表刪除指定位置元素

list = ['a', 'b', 'c']
del list[0]
print list
>>> ['b', 'c']

列表方法

列表有很多方法,上面的append就是其中之一

  • append
  • extend
  • insert
  • remove
  • pop
  • index
  • sort
  • reverse
  • sorted

append用來(lái)在列表末尾添加一個(gè)元素

list = [1]
list.append(2)
print list
>>> [1, 2]

extend在列表末尾添加多個(gè)元素

list = [1]
list.extend([2, 3])
print list
>>> [1, 2, 3]

insert在指定位置插入元素

list = [1, 2, 3]
list.insert(1, 'a')
print list
>>> [1, 'a', 2, 3]

remove從列表中刪除指定元素,如果刪除的元素不在列表中會(huì)報(bào)錯(cuò),可以和in關(guān)鍵字配合使用

list = [1, 2, 3]
list.remove(2)
print list
>>> [1, 3]

注意:和del區(qū)分,del用來(lái)刪除指定的索引位置元素

pop去除列表中最后一個(gè)元素

list = [1, 2, 3]
a = list.pop()
print a
print list
>>> 3
>>> [1, 2]

index查找指定元素在列表中的索引,如果刪除的元素不在列表中會(huì)報(bào)錯(cuò),可以和in關(guān)鍵字配合使用

list = [1, 2, 3]
print list.index(3)
>>> 2

注意:和in區(qū)分開(kāi),in會(huì)返回布爾值,index會(huì)返回索引

sort用來(lái)給列表排序

list = [4, 2, 1]
list.sort()
print list
>>> [1, 2, 4] 

如果想倒敘排列列表,可以給sort傳一個(gè)參數(shù)

list = [1, 2, 3]
list.sort(reverse = True)
print list
>>> [3, 2, 1]

注意:sort會(huì)修改原來(lái)的列表,而不是創(chuàng)建一個(gè)新的列表,所以下面的操作不正確

print list.sort() # 不正確的做法
>>> None

list.sort() # 需要分兩步
print list

reverse翻轉(zhuǎn)列表,逆序排序數(shù)組還可以用這個(gè)

list = [1, 2, 3]
list.reverse()
print list
>>> [3, 2, 1]

sorted輸一個(gè)系統(tǒng)函數(shù),而不是數(shù)組函數(shù),可以得到一個(gè)列表的有序副本,而不會(huì)影響原來(lái)的列表

list = [3, 2, 1]
nlist = sorted(list)
print list
print nlist
>>> [3, 2, 1]
>>> [1, 2, 3]

循環(huán)列表

列表可用for循環(huán)來(lái)遍歷

for i in [1, 2, 3]:
    print i
>>> 1
>>> 2
>>> 3

不可變的列表

pythton中的列表是可變類(lèi)型,python中有一種不可變的列表——元組,元組的語(yǔ)法如下

tuple = (1, 2, 3) # 不可增刪改

字典

python中的另一個(gè)種集合類(lèi)型就是字典,類(lèi)似其他語(yǔ)言中的關(guān)聯(lián)數(shù)組或哈希表,分為鍵和值,通過(guò)鍵來(lái)存取值。

phoneNumbers = {'yan': 133}
print phoneNumbers['yan']
>>> 133

phoneNumbers['hai'] = 666;
print phoneNumbers['hai']
>>> 666

字典方法

字典也有一些方法

  • keys
  • values
  • clear

keys方法可以列出字典總的全部鍵值

dic = {'yan': 1, 'hai': 2}
print dic.keys()
>>> ['hai', 'yan']

values方法返回字典中的全部值

dic = {'yan': 1, 'hai': 2}
print dic.values()
>>> [2, 1]

如果需要字典返回有序的鍵值,可以對(duì)返回的鍵值列表進(jìn)行排序

clear用來(lái)刪除字典中的而所有條目

dic = {'yan': 1, 'hai': 2}
dic.clear()
print dic
>>> {}

del & in

del用來(lái)刪除字典中的數(shù)據(jù)

dic = {'yan': 1}
del dic['yan']
print dic
>>> {}

檢查某個(gè)關(guān)鍵字是否在字典中使用in

dic = {'yan', 1}
print 'yan' in dic
>>> True

函數(shù)

當(dāng)程序變大以后就需要一些方法來(lái)把程序分解成更小的部分,在python中主要有三種方法:

  • 函數(shù)——就像代碼的積木,可以反復(fù)的使用
  • 對(duì)象——把程序中的各個(gè)部分描述為自包含的單元
  • 模塊——包含程序各部分的獨(dú)立文件

創(chuàng)建一個(gè)函數(shù)需要使用def關(guān)鍵字

def hello():
    print 'hello world'

hello()
>>> 'hello world'

函數(shù)可以有多個(gè)參數(shù),中間用逗號(hào)分隔

def hello(who):
    print 'hello', who
hello()
>>> hello yan

函數(shù)可以有返回值

def add(x, y):
    return x + y

add(1, 2)
>>> 3

函數(shù)內(nèi)部的變量都是局部變量,在函數(shù)外部不能訪(fǎng)問(wèn)

def test():
x = 1
print x

x = 10
print x
test()
>>> 10
>>> 1

在函數(shù)中可以訪(fǎng)問(wèn)全局變量,但不可修改,修改會(huì)創(chuàng)建一個(gè)局部變量

def test2():
    y = 10
    print y

y = 1
test2()
print y
>>> 10
>>> 1

在函數(shù)內(nèi)部想強(qiáng)制訪(fǎng)問(wèn)全局變量,需要使用global

def test3():
    global z
    z = 10
    print z

z = 1
test3()
print z
>>> 1
>>> 10
>>> 10

對(duì)象

對(duì)象可以把函數(shù)和數(shù)據(jù)收集在一起。對(duì)象可以包含屬性和動(dòng)作。

舉個(gè)例子就是球,可以操作一個(gè)球,踢球,撿球,這些操作成為動(dòng)作;球的顏色,大小稱(chēng)為球的屬性。

python中稱(chēng)為對(duì)象的屬性和方法。

創(chuàng)建對(duì)象

python中創(chuàng)建對(duì)象分為兩步,第一步是創(chuàng)建對(duì)象的描述——類(lèi);第二步使用類(lèi)來(lái)創(chuàng)建一個(gè)真正的對(duì)象。

# 定義對(duì)象描述
# __init__ 初始化對(duì)象方法
# setColor 對(duì)象的方法

class Ball:
    def __init__(self, color):
        self.color = color

    def setColor(self, color):
        self.color = color

# 實(shí)例化對(duì)象
ball = Ball('red');
print ball.color

ball.setColor('green')
print ball.color

# python中的對(duì)象可動(dòng)態(tài)添加屬性,這一點(diǎn)和java不一樣
ball.size = 'big'

>>> red
>>> green

“魔法”方法

python中對(duì)象有一些魔法方法,上面的__init__就是,還有一個(gè)魔法方法是__str__,可以自定義對(duì)象的打印文本

class Ball:
    def __str__():
        return 'yanhaijing.com'

ball = Ball()
print ball

>>> yanhaijing.com

self

python的對(duì)象方法調(diào)用時(shí),的第一個(gè)參數(shù)表示調(diào)用的對(duì)象,self是約定俗成的做法,不是必須的。

隱藏?cái)?shù)據(jù)

python也不支持私有的屬性,這一點(diǎn)和js一樣。

繼承

在面向?qū)ο缶幊讨?,?lèi)可以從其他類(lèi)繼承屬性和方法。

class People:
    __init__(self, name):
        self.name = name

    talk():
        # pass作為占位符,可以表示為空函數(shù)
        pass

# 繼承People
class Teacher(People):
    __init__(self, name):
        # 調(diào)用父類(lèi)方法
        People.__init__(self, name)

模塊

如果一個(gè)東西可以由幾部分組成,我們就可以說(shuō)這個(gè)東西是模塊化的。樂(lè)高積木是最直觀的例子了。

python中每個(gè)文件都是一個(gè)模塊,模塊意味著分治,可以把一個(gè)復(fù)雜的系統(tǒng)拆分成由簡(jiǎn)單的部分組成,這在大型程序中是非常有意義的。

模塊是更高維度的抽象,可以把一組功能類(lèi)似的函數(shù),都放到一個(gè)模塊中,一個(gè)復(fù)雜的模塊也可以由更多簡(jiǎn)單的模塊組成。

創(chuàng)建模塊

模塊就是一個(gè)文件,文件中的函數(shù),變量都可以被別的模塊引用,也就是說(shuō)模塊的一切的公開(kāi)的

# module1.py
qiu = 1
def hello():
    return 'hello'

上面定義了一個(gè)模塊,有一個(gè)公開(kāi)的屬性qiu和一個(gè)公開(kāi)的函數(shù)hello。

使用模塊

在其他文件中可以用import關(guān)鍵字引用模塊。

import module1

print module1.qiu
print module1.hello()

>>> 1
>>> hello

還可以換一種寫(xiě)法

from module1 import hello

print hello()

>>> hello

標(biāo)準(zhǔn)模塊

python中內(nèi)置了很多系統(tǒng)函數(shù),要使用這些函數(shù)需要引用相應(yīng)的模塊,比如:

  • time
  • 隨機(jī)數(shù)

time模塊能夠獲取你的計(jì)算機(jī)時(shí)鐘的信息,其中比較常用的就是sleep可以用來(lái)讓程序暫停一會(huì)

import time
time.sleep(1)

random模塊用于生成隨機(jī)數(shù)

import random

print random.randint(0, 100) # 1-100之間隨機(jī)數(shù)
print random.random() # 0-1之間隨機(jī)數(shù)
>>> 4
>>> 0.5456454545

打印格式化與字符串

這一章講了如何打印出格式化的內(nèi)容。

換行

可以在字符串中插入換行

print "hello \nworld"

>>> hello
>>> world

水平間隔——制表符

看了這本書(shū)我才知道制表符還有這個(gè)功能,一個(gè)制表符會(huì)占據(jù)8個(gè)字符的間隔,但是會(huì)和前面的字符串合并

print 'aaa\txyz'
print 'aaaa\txyz'
print 'aaaaa\txyz'

>>> aaa     xyz
>>> aaaa    xyz
>>> aaaaaa  xyz

字符串插入變量

python中在字符串中插入變量稱(chēng)為格式化字符串,使用百分號(hào)(%)。

str = '3'
print '1%s3' % str

>>> 123

%s表示插入字符串,還可以用%i用來(lái)表示整數(shù),%f表示浮點(diǎn)數(shù),都成為格式化字符串,用來(lái)指示如何顯示 變量。

數(shù)字格式化

數(shù)字格式化可能是最復(fù)雜的部分了

%d和%i用來(lái)格式化整數(shù),如果傳入的是小數(shù),則會(huì)進(jìn)行截?cái)?/p>

number = 12.55

print '%i' % numver
print '%d' % numver

>>> 12
>>> 12

%f或%F用來(lái)格式化浮點(diǎn)數(shù)

number = 12.1234

print '%f' % number # 默認(rèn)顯示六位小數(shù)
>>> 12.123400

print '%.2f' # 顯示兩位小數(shù),末尾四舍五入
>>> 12.12

print '%+f' % number #強(qiáng)制顯示證號(hào)
>>> +12.123400

# 如果希望正負(fù)數(shù)的列表對(duì)齊,但是整數(shù)前沒(méi)有正號(hào),可使用空格

number1 = -98.12
number = 98.12
print '% .2f' % number1
print '% .2f' % number2

>>> -98.12
>>>  98.12

%e和%E用來(lái)格式化E記法的數(shù)字

number = 12.1234
print '%e' % number
>>> 1.212340e+01

print '%.2e'
>>>> 1.2e+01

%g和%G用來(lái)自動(dòng)表示為浮點(diǎn)數(shù)或E記法

number1 = 12
number2 = 1234567890

print '%g' % number1
print '%g' % number2

>>> 12
>>> 1.23456e+09

如果有多個(gè)格式化的字符串,需要使用元組

n1 = 1
n2 = 2

print '%i-%i' % (n1, n2)

>>> 1-2

還可以把格式化的字符串賦值給變量

str = '%.2f' % 12.123

print str
>>> 12.12

格式化新方法

python2.6中引入了格式化的新方法,format函數(shù)

print '{0:.1f}-{1:.1f}'.format(12.12, 11.12)

>> 12.1-11.1

格式化的符號(hào)用大括號(hào)括起來(lái),冒號(hào)前面代表參數(shù)的索引。

更多字符串處理

如果想分解字符串使用split

list = '1,2,3,4'.split(',')
print list

>>> ['1', '2', '3', '4'] 

連接字符串使用join方法

list = [1, 2, 3, 4]
str = ''.join(list)

print str
>>> 1 2 3 4

搜索字符串的方法有很多

  • startswith()
  • endswith()
  • in
  • index()

下面來(lái)距離各個(gè)方法的用法

'abc'.startswith('a')
>>> True

'abc'.endswith(c)
>>> True

'b' in 'abc'
>>> True

'abc'.index('b')
>>> 1

刪除字符串的一部分使用strip

str = 'abcdef'

print str.strip('a')

>>> bcdef

str = '  abc  '

print str.strip() # 沒(méi)有參數(shù)刪除空格
>>> abc

改變大小寫(xiě)使用lower和upper

print 'abc'.upper()
>>> 'ABC'

print 'ABC'.lower()
>>> 'abc'

文件輸入與輸出

這一章講了python如何讀寫(xiě)文件。

文件的屬性包括文字,類(lèi)型,位置和大小等。

將一組文件組織在一起得東西稱(chēng)為目錄,目錄還可以組織目錄,稱(chēng)為子目錄。

打開(kāi)文件

對(duì)文件進(jìn)行操作之前需要先打開(kāi)文件

file = open('test.txt', 'r'); # 讀文件
file = open('test.txt', 'w'); # 寫(xiě)文件
file = open('test.txt', 'a'); # 追加文件

讀文件

讀文件之前需要先打開(kāi)文件,然后使用readlines將文件讀到列表中,列表的每一項(xiàng)是文件中的一行

file = open('test.txt', 'r'); # 讀文件
lines = file.readlines()
print lines
file.close() # 一定不要忘記關(guān)閉文件

>>> ['line1\n', 'line2\n', 'line3']

還可以使用readline每次讀取一行文件

file = open('test.txt', 'r'); # 讀文件
line1 = file.readline()
line2 = file.readline()

print line1
print line2

file.close()
>>> line1
>>> line2

如果想改變文件當(dāng)前讀到了第幾行,可以使用seek

file = open('test.txt', 'r'); # 讀文件
line1 = file.readline()
file.seek()
line2 = file.readline()

print line1
print line2

file.close()

>>> line1
>>> line1

文本文件和二進(jìn)制文件

文件分為文本文件和二進(jìn)制文件,打開(kāi)文本文件和二進(jìn)制文件的方式有些區(qū)別

file1 = open('text.txt', 'r') # 打開(kāi)文本文件
file2 = open('music.mp3', 'rb') # 打開(kāi)二進(jìn)制文件

寫(xiě)文件

寫(xiě)文件兩種方式,第一種是覆蓋現(xiàn)有文件,第二種是追加現(xiàn)有文件。

file1 = open('text.txt', 'w') # 打開(kāi)文件,后續(xù)可寫(xiě)
file2 = open('text.txt', 'a') # 打開(kāi)文本,后續(xù)可追加

打開(kāi)文件后可以使用write函數(shù)來(lái)往文件寫(xiě)內(nèi)容

file = open('text.txt', 'w')
file.write('\nline1')
file.write('\nline1')

file.close()

還可以用print函數(shù)進(jìn)行寫(xiě)文件

file = open('text.txt', 'w')
print >> file, "\nline1"

file.close()

上面的>>符號(hào)的意思是重定向輸出,即把輸出重定向到文件,而不是顯示器

在文件中保存內(nèi)容:pickle

python中為在文件中存取對(duì)象提供了一個(gè)方便的模塊——pickle

存儲(chǔ)文件的過(guò)程如下:

import pickle

list = ['12', '12', '12', '12']

file = open('temp.pkl', 'w')

pickle.dump(list, file);

file.close()

還原的過(guò)程如下:

import pickle

file = open('temp.pkl', 'r')

list = pickle.load(file)

file.close()

print list
>>> ['12', '12', '12', '12']

游戲

書(shū)中還提到了很多小游戲,其中也介紹了很多制作游戲和UI的庫(kù),比如easyui,pygame等

舉一個(gè)猜拳游戲的小例子:

import random

secret = random.randint(1, 99)

guess = 0
tries = 0

print "helow, guess"
print "number from 1 to 99, 6 times"

while guess != secret and tries < 6:
    guess = input("guess is:")
    if guess < secret:
        print "too low"
    elif guess > secret:
        print "too high"

    tries = tries + 1

if guess == secret:
    print "success"
else:
    print "fail"
    print "secret is ", secret

總結(jié)

這是我讀《父與子的編程之旅:與小卡特一起學(xué)Python》后記錄總結(jié)的一些筆記,書(shū)中還介紹了很多其他內(nèi)容,如果你沒(méi)看過(guò)我強(qiáng)烈建議你看一看這本書(shū),如果看過(guò)了可以看這篇筆記用來(lái)快速回憶里面的內(nèi)容。

最后感謝你的閱讀。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)