Python完全新手教程
更新時間:2007年02月08日 00:00:00 作者:
Python入門教程FROM:http://www.cnblogs.com/taowen/articles/11239.aspx作者:taowen, billrice
Lesson 1 準(zhǔn)備好學(xué)習(xí)Python的環(huán)境
下載的地址是:
www.python.org
linux版本的我就不說了,因為如果你能夠使用linux并安裝好說明你可以一切自己搞定的。
運(yùn)行環(huán)境可以是linux或者是windows:
1、linux
redhat的linux安裝上去之后一定會有python的(必須的組件),在命令行中輸入python回車。這樣就可以進(jìn)入一個
>>>的提示符
2、windows
安裝好了python之后,在開始菜單里面找到Python2.3->IDLE,運(yùn)行也會進(jìn)入一個有
>>>提示符的窗口
開始嘗試Python
1、輸入:
welcome = "Hello!"
回車
然后又回到了>>>
2、輸入:
print welcome
回車
然后就可以看到你自己輸入的問候了。
Lesson 2 搞定環(huán)境之后的前行
Python有一個交互式的命令行,大家已經(jīng)看到了吧。所以可以比較方便的學(xué)習(xí)和嘗試,不用“新建-存檔-編譯-調(diào)試”,非常適合快速的嘗試。
一開始從變量開始(其實說變量,更準(zhǔn)確的是對象,Python中什么都可以理解為對象)。
變量
welcome = "hello!"
welcome就是變量名,字符串就是變量的類型,hello!就是變量的內(nèi)容,""表示這個變量是字符串,""中間的是字符串的內(nèi)容。
熟悉其他語言的人,特別是編譯類型的語言,覺得沒有變量的聲明很奇怪。在python中用賦值來表示我要這么一個變量,即使你不知道要放什么內(nèi)容,只是要先弄一個地方來放你的東西,也要這么寫:
store = ""
不過這個還是說明了store是字符串,因為""的緣故。
have a try
tmp_storage = ""
welcome = "hello!"
tmp_storage = welcome
print tmp_storage
你會發(fā)現(xiàn)同樣的問候出現(xiàn)了。
字符串
字符串是用""標(biāo)記的,但是用''也可以(不要說你看不出一個是雙引號,一個是單引號),兩者之間是有一丁點區(qū)別,不過你可以不用理會。其實是差不多的。字符串有很多自己的操作,最常用的是這樣的:
welcome = "hello"
you = "world!"
print welcome+you
運(yùn)行之后就會發(fā)現(xiàn)她輸出了helloworld!。
更多變量
變量還有幾種類型。
數(shù)
字符串
列表
字典
文件
勿庸置疑,這些都是非常非常常用的。對于數(shù)字就不用講了那就是:
radius = 10
pi = 3.14
area = pi*radius**2
print "the area is", area
下次講列表和字典
Lesson 3 Python中的數(shù)學(xué)結(jié)構(gòu)
數(shù)學(xué)中你學(xué)什么東西最多遍?我想根據(jù)我的一點淺薄經(jīng)驗(雖然我是數(shù)學(xué)系的),學(xué)得最多的是集合,無論什么數(shù)學(xué)書都從集合開始講起。然后講函數(shù)呢,又必然把映射再講一遍。可以說,集合和映射是數(shù)學(xué)中最基本的結(jié)構(gòu)了。
Python對于數(shù)據(jù)結(jié)構(gòu)非常明智的內(nèi)置了兩個,回想我寫C的程序,往往是一開始就是用struct拼一個鏈表出來(重復(fù)勞動)。Python中提供了列表(list)和字典(dict)兩種數(shù)據(jù)結(jié)構(gòu)。他們分別對應(yīng)的原型是集合和映射。這個你應(yīng)該明白了,只是表示方法有一點不一樣而已。
列表
列表的英文名是list嘛,所以我取一個名字叫
my_list = []
這個就產(chǎn)生了一個空的列表。然后給它賦值
my_list = [1,2]
print my_list
my_list.append(3)
print my_list
非常容易明白的。append前面加了一個點,這個表示append是my_list方法。我實在不想又去給你解釋什么是對象,什么是成員方法,然后扯出一大段出來。
list是可以索引的:
print my_list[1]
不過你或許會不明白為什么是2,而不是顯示的是1。因為索引從0開始,要輸出第一個元素:
print my_list[0]
字典
contact = {}
這個產(chǎn)生了一個空字典,contact。然后往里面填充內(nèi)容:
contact={}
contact["name"]="taowen"
contact["phone"]=68942443
name就是你查字典的時候要查找的單詞,taowen就是查到的內(nèi)容。不過你現(xiàn)在不是查,而是在寫這個字典。同理添加了phone這個詞條。
現(xiàn)在添加好了,看看contact的內(nèi)容,怎么查看?自己想辦法吧。。。
如果你悟性夠,就會發(fā)現(xiàn)python很多操作是通用的,既然能夠print 1, print "", print my_list,那么其他數(shù)據(jù)類型的變量就沒有理由不能用了。
結(jié)合列表和字典
contact_list=[]
contact1={}
contact1['name']='taowen'
contact1['phone']=68942443
contact_list.append(contact1)
contact2={}
contact2['name']='god'
contact2['phone']=44448888
contact_list.append(contact2)
呵呵,夠復(fù)雜的吧。你可以想出我為什么要用兩個contact字典呢?。。。
Lesson 4 用不同的方式來操作Python
到現(xiàn)在為止,我們用的都是交互式的命令行來操作的,的卻是很方便,是吧?不過,復(fù)雜一些的情況就不那么好使了,來換一種方式來操作Python
在 IDLE中點擊File->New Window,出現(xiàn)一個新窗口(對于linux下,你要用vim或者emacs或者pico把文本的源文件寫好了)。為了方便,先點擊File-> Save,填入my_try.py。這樣能夠讓編輯器知道在編輯python的源文件,會把你輸入的代碼進(jìn)行一點上色的處理。
填入下面的代碼:
i = 5
n = 0
while i>0:
n = n + i
i = i - 1
print n
你 會發(fā)現(xiàn)輸入:之后,自動會給縮進(jìn)。而且也沒有在python中發(fā)現(xiàn)和C/C++中類似的{}標(biāo)記也沒有pascal中的begin end;,其實縮進(jìn)就是python中表示一段代碼的從屬關(guān)系的標(biāo)記方法。表示n=n+1和i=i-1這兩句都是while的。程序的運(yùn)行邏輯應(yīng)該不用解 釋了吧。就是運(yùn)行5+4+3+2+1的結(jié)果。
運(yùn)行代碼
按F5,可能提示你沒有存盤,照著辦就是了。
發(fā)揮你的能力,計算從1到10的所有偶數(shù)的和(提示,可能沒有你想象的那么智能)。
Lesson 5 Python中的輸入與判斷
健全的程序大凡都需要輸入的功能,所以要學(xué)習(xí)一下簡單的輸入:
輸 入要使用的是raw_input或者input函數(shù),區(qū)別是raw_input直接把你的輸入作為字符串返回,而input則在raw_input的基礎(chǔ) 上把字符串轉(zhuǎn)換為數(shù)字返回(如果你輸入$@#$$怎么辦?自己試試看)。我們就利用這兩個輸入函數(shù)來作一些有趣的事情。
your_name = raw_input("please input your name:")
hint = "welcome! %s" % your_name
print hint
不簡單吧,還有%呢。%s表示在這個位置插入一個字符串,%表示把后面提供的參數(shù)“推”入前面的字符串中,所以推的結(jié)果是把%s推出去了,把your_name給填入那個地方了。printf知道吧,C中的printf就是一樣的嘛。
inputed_num = 0
while 1:
inputed_num = input("input a number between 1 and 10 ")
if inputed_num >= 10:
pass
elif inputed_num < 1:
pass
else:
break
print "hehe, don't follow, won't out"
pass就是pass了,過了嘛,什么都不干了。break就是跳出這個while 1(無窮循環(huán),1總是真的,while總是執(zhí)行)。是換行,不會全部忘光了吧。
Lesson 6 Python余興節(jié)目
代碼: [復(fù)制到剪貼板]
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
呵呵,一次太超前了一點,不過也不是解釋不清楚。我干脆也不解釋了吧。給大家增進(jìn)一點興趣。
---------
還是解釋一下
fromt Tkinter import *
是引入一個模塊,這個模塊用來創(chuàng)建GUI(Graphic User Interface)窗口
Tk()創(chuàng)建了一個主窗口
Label()創(chuàng)建一個標(biāo)簽
Label的第一個參數(shù)是root表明Label是在這個主窗口中的。
w.pack()是指用缺省的方式把Label放置在主窗口中
root.mainloop()開始了一個循環(huán),是等待你的輸入的循環(huán)。
Lesson 7 Python基本語法要素齊動員
現(xiàn)在的目的是盡量想出一個用的東西僅限于內(nèi)置的變量類型和語句的一個綜合的例子,我想還是那個聯(lián)系人表的例子吧
################
#呵呵,還忘記了講注釋
#第一個算是完整的程序
################
contact = {}
contact_list = []
while 1:
contact['name'] = raw_input("please input name: ")
contact['phone'] = raw_input("please input phone number: ")
contact_list.append(contact.copy())
go_on = raw_input("continue? ")
if go_on == "yes":
pass
elif go_on == "no":
break
else:
print "you didn't say no "
i = 1
for contact in contact_list:
print "%d: name=%s" % (i, contact['name'])
print "%d: phone=%s" % (i, contact['phone'])
i = i + 1
首先是回憶一下字符串
字符串既能夠用""也能夠用''。然后是很有特色的%操作,起到格式化字符串的作用,前面僅僅在字符串中有一個%s,現(xiàn)在有%d和%s兩個,分別代表插入十進(jìn)制數(shù)值和字符串于%x標(biāo)記的位置處。
然后是列表
列 表是順序的序列,用append在后面附加,也能構(gòu)用索引值索引。所以我們完全可以用一個變量保存len(contact_list)得到的長度,然后一 個個的遍歷,不過這里展示了另外一種非常方便的方法。而且值得注意的是append()中的參數(shù),我使用了contact.copy(),你可以嘗試著把 copy()給去掉,觀察結(jié)果你就知道了所謂的append是怎么干的了,特別是你對指針之類的東西很有感覺的話(但是在Python中是沒有指針這個概 念的)
再來看看字典
字典是鍵(key)和值(value)的對應(yīng)組合成的無序的序列。所以你存的時候要指明鍵(name或者phone),而且取的時候也是一樣的。
接下來是判斷
if 是很好用的,==表示判斷兩個是否相等,=表示把右邊的賦給左邊的。而且可以直接判斷字符串是否相等,這個太方便了,如果你曾經(jīng)用過strcpy()的 話,就知道了。elif是表示else if的意思,如果if不滿足就判斷elif的條件是否滿足,最后是到else中去。
循環(huán)是個主體
while 和for都是循環(huán)。不過這里while就沒什么說的了,又是很經(jīng)典的while 1,死循環(huán),然后必須在里面用break來跳出。for和C中的for是不一樣的,for in才是一個完整的語句,指的是從一個能夠逐一取值的序列中(比如list),一個一個的取出值賦給for后面指定的變量中,直到取空,循環(huán)結(jié)束。其實回 想一般用C中的for的經(jīng)歷,也大體如此。而且你還可以用for i in range(1,100)來指定一個范圍從多少到多少??梢哉ffor in充分體現(xiàn)了python的體貼周到,用起來很直觀,不會繞彎。
接下來就是運(yùn)行了,大家慢慢調(diào)試吧。下次可能是講異常處理,因為我覺得在深入到使用各種高級的要素之前,先要學(xué)會怎么去處理異常。最常見的異常應(yīng)該是input(),然后你給出的輸入是一個無法轉(zhuǎn)換為數(shù)字的字符串了,那么我們就要來處理它。
Lesson 8 Python中的錯誤檢測
寫 程序什么最重要?完成功能最重要。但是程序中難免要有用戶的輸入,對于這些寫的時候未可預(yù)知的因素中間可能出現(xiàn)的錯誤,一般稱作異常。對于異常情況的處 理,不同語言有不同的做法,比如檢查函數(shù)的返回值之類的,但是那種辦法會把代碼弄成一團(tuán)漿糊。Python在這個方面是比較先進(jìn)的,我們從一個例子來看 看:
print input()
呵呵,看不同吧。其實input是輸入,print是輸出。也就是把輸入的東西立即輸出。但是這個和
print raw_input()
有什么不同呢?
不同的地方是,input()會在raw_input()接收了“字符串”的輸入之后進(jìn)行一些處理,比如你是輸入1+2,然后輸出的就是3了,而raw_input就是原原本本的1+2的輸出了。用代碼表示就是
eval(raw_input())
eval是求表達(dá)式的值,任何一個簡單的python表達(dá)式,就像1+2這樣的作為字符串送入,就能把值從eval處理之后取出來。
現(xiàn)在你實驗一下"sdfsdf”之后,你會發(fā)現(xiàn)提示你
引用:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in -toplevel-
input()
File "<string>", line 0, in -toplevel-
NameError: name 'sdfsdf' is not defined
如果輸入其他稀奇古怪的字符串還可能有其他的出錯提示,我們現(xiàn)在要做的就是捕捉這種由用戶輸入引起的錯誤。這么來作:
try:
print input()
except:
print 'there is an error in your input'
這下你無論怎么輸入都不會有什么其他的提示了,就是自己設(shè)定的print語句作為提示?,F(xiàn)在把try except的組合去掉,回到print input()你再嘗試一下:
1/0
這個顯然是一個錯誤,被零除的錯誤。那么專門來捕捉一下這個錯誤:
try:
print input()
except ZeroDivisionError:
print 'can not be divided by zero'
這下你能夠捕捉到被零除的錯誤了。然后你再嘗試其他的輸入,可能錯誤就沒有被捕捉了。所以再補(bǔ)上:
try:
print input()
except ZeroDivisionError:
print 'can not be divided by zero'
except:
print 'there is an error in your input'
注意,捕捉所有錯誤的except必須放在所有的except的最后一位。明白了?OK
還有更多的能夠捕捉的錯誤,自己查手冊吧(暫時看不了手冊沒關(guān)系,慢慢來嘛)。以后還能夠自己raise(引發(fā))異常呢。不過那都是比較高級的應(yīng)用了,對于出錯處理從一開始就有這個印象,并牢記在心中對于以后寫大一些的軟件很有好處。
Lesson 1 準(zhǔn)備好學(xué)習(xí)Python的環(huán)境
下載的地址是:
www.python.org
linux版本的我就不說了,因為如果你能夠使用linux并安裝好說明你可以一切自己搞定的。
運(yùn)行環(huán)境可以是linux或者是windows:
1、linux
redhat的linux安裝上去之后一定會有python的(必須的組件),在命令行中輸入python回車。這樣就可以進(jìn)入一個
>>>的提示符
2、windows
安裝好了python之后,在開始菜單里面找到Python2.3->IDLE,運(yùn)行也會進(jìn)入一個有
>>>提示符的窗口
開始嘗試Python
1、輸入:
welcome = "Hello!"
回車
然后又回到了>>>
2、輸入:
print welcome
回車
然后就可以看到你自己輸入的問候了。
Lesson 2 搞定環(huán)境之后的前行
Python有一個交互式的命令行,大家已經(jīng)看到了吧。所以可以比較方便的學(xué)習(xí)和嘗試,不用“新建-存檔-編譯-調(diào)試”,非常適合快速的嘗試。
一開始從變量開始(其實說變量,更準(zhǔn)確的是對象,Python中什么都可以理解為對象)。
變量
welcome = "hello!"
welcome就是變量名,字符串就是變量的類型,hello!就是變量的內(nèi)容,""表示這個變量是字符串,""中間的是字符串的內(nèi)容。
熟悉其他語言的人,特別是編譯類型的語言,覺得沒有變量的聲明很奇怪。在python中用賦值來表示我要這么一個變量,即使你不知道要放什么內(nèi)容,只是要先弄一個地方來放你的東西,也要這么寫:
store = ""
不過這個還是說明了store是字符串,因為""的緣故。
have a try
tmp_storage = ""
welcome = "hello!"
tmp_storage = welcome
print tmp_storage
你會發(fā)現(xiàn)同樣的問候出現(xiàn)了。
字符串
字符串是用""標(biāo)記的,但是用''也可以(不要說你看不出一個是雙引號,一個是單引號),兩者之間是有一丁點區(qū)別,不過你可以不用理會。其實是差不多的。字符串有很多自己的操作,最常用的是這樣的:
welcome = "hello"
you = "world!"
print welcome+you
運(yùn)行之后就會發(fā)現(xiàn)她輸出了helloworld!。
更多變量
變量還有幾種類型。
數(shù)
字符串
列表
字典
文件
勿庸置疑,這些都是非常非常常用的。對于數(shù)字就不用講了那就是:
radius = 10
pi = 3.14
area = pi*radius**2
print "the area is", area
下次講列表和字典
Lesson 3 Python中的數(shù)學(xué)結(jié)構(gòu)
數(shù)學(xué)中你學(xué)什么東西最多遍?我想根據(jù)我的一點淺薄經(jīng)驗(雖然我是數(shù)學(xué)系的),學(xué)得最多的是集合,無論什么數(shù)學(xué)書都從集合開始講起。然后講函數(shù)呢,又必然把映射再講一遍。可以說,集合和映射是數(shù)學(xué)中最基本的結(jié)構(gòu)了。
Python對于數(shù)據(jù)結(jié)構(gòu)非常明智的內(nèi)置了兩個,回想我寫C的程序,往往是一開始就是用struct拼一個鏈表出來(重復(fù)勞動)。Python中提供了列表(list)和字典(dict)兩種數(shù)據(jù)結(jié)構(gòu)。他們分別對應(yīng)的原型是集合和映射。這個你應(yīng)該明白了,只是表示方法有一點不一樣而已。
列表
列表的英文名是list嘛,所以我取一個名字叫
my_list = []
這個就產(chǎn)生了一個空的列表。然后給它賦值
my_list = [1,2]
print my_list
my_list.append(3)
print my_list
非常容易明白的。append前面加了一個點,這個表示append是my_list方法。我實在不想又去給你解釋什么是對象,什么是成員方法,然后扯出一大段出來。
list是可以索引的:
print my_list[1]
不過你或許會不明白為什么是2,而不是顯示的是1。因為索引從0開始,要輸出第一個元素:
print my_list[0]
字典
contact = {}
這個產(chǎn)生了一個空字典,contact。然后往里面填充內(nèi)容:
contact={}
contact["name"]="taowen"
contact["phone"]=68942443
name就是你查字典的時候要查找的單詞,taowen就是查到的內(nèi)容。不過你現(xiàn)在不是查,而是在寫這個字典。同理添加了phone這個詞條。
現(xiàn)在添加好了,看看contact的內(nèi)容,怎么查看?自己想辦法吧。。。
如果你悟性夠,就會發(fā)現(xiàn)python很多操作是通用的,既然能夠print 1, print "", print my_list,那么其他數(shù)據(jù)類型的變量就沒有理由不能用了。
結(jié)合列表和字典
contact_list=[]
contact1={}
contact1['name']='taowen'
contact1['phone']=68942443
contact_list.append(contact1)
contact2={}
contact2['name']='god'
contact2['phone']=44448888
contact_list.append(contact2)
呵呵,夠復(fù)雜的吧。你可以想出我為什么要用兩個contact字典呢?。。。
Lesson 4 用不同的方式來操作Python
到現(xiàn)在為止,我們用的都是交互式的命令行來操作的,的卻是很方便,是吧?不過,復(fù)雜一些的情況就不那么好使了,來換一種方式來操作Python
在 IDLE中點擊File->New Window,出現(xiàn)一個新窗口(對于linux下,你要用vim或者emacs或者pico把文本的源文件寫好了)。為了方便,先點擊File-> Save,填入my_try.py。這樣能夠讓編輯器知道在編輯python的源文件,會把你輸入的代碼進(jìn)行一點上色的處理。
填入下面的代碼:
i = 5
n = 0
while i>0:
n = n + i
i = i - 1
print n
你 會發(fā)現(xiàn)輸入:之后,自動會給縮進(jìn)。而且也沒有在python中發(fā)現(xiàn)和C/C++中類似的{}標(biāo)記也沒有pascal中的begin end;,其實縮進(jìn)就是python中表示一段代碼的從屬關(guān)系的標(biāo)記方法。表示n=n+1和i=i-1這兩句都是while的。程序的運(yùn)行邏輯應(yīng)該不用解 釋了吧。就是運(yùn)行5+4+3+2+1的結(jié)果。
運(yùn)行代碼
按F5,可能提示你沒有存盤,照著辦就是了。
發(fā)揮你的能力,計算從1到10的所有偶數(shù)的和(提示,可能沒有你想象的那么智能)。
Lesson 5 Python中的輸入與判斷
健全的程序大凡都需要輸入的功能,所以要學(xué)習(xí)一下簡單的輸入:
輸 入要使用的是raw_input或者input函數(shù),區(qū)別是raw_input直接把你的輸入作為字符串返回,而input則在raw_input的基礎(chǔ) 上把字符串轉(zhuǎn)換為數(shù)字返回(如果你輸入$@#$$怎么辦?自己試試看)。我們就利用這兩個輸入函數(shù)來作一些有趣的事情。
your_name = raw_input("please input your name:")
hint = "welcome! %s" % your_name
print hint
不簡單吧,還有%呢。%s表示在這個位置插入一個字符串,%表示把后面提供的參數(shù)“推”入前面的字符串中,所以推的結(jié)果是把%s推出去了,把your_name給填入那個地方了。printf知道吧,C中的printf就是一樣的嘛。
inputed_num = 0
while 1:
inputed_num = input("input a number between 1 and 10 ")
if inputed_num >= 10:
pass
elif inputed_num < 1:
pass
else:
break
print "hehe, don't follow, won't out"
pass就是pass了,過了嘛,什么都不干了。break就是跳出這個while 1(無窮循環(huán),1總是真的,while總是執(zhí)行)。是換行,不會全部忘光了吧。
Lesson 6 Python余興節(jié)目
代碼: [復(fù)制到剪貼板]
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
呵呵,一次太超前了一點,不過也不是解釋不清楚。我干脆也不解釋了吧。給大家增進(jìn)一點興趣。
---------
還是解釋一下
fromt Tkinter import *
是引入一個模塊,這個模塊用來創(chuàng)建GUI(Graphic User Interface)窗口
Tk()創(chuàng)建了一個主窗口
Label()創(chuàng)建一個標(biāo)簽
Label的第一個參數(shù)是root表明Label是在這個主窗口中的。
w.pack()是指用缺省的方式把Label放置在主窗口中
root.mainloop()開始了一個循環(huán),是等待你的輸入的循環(huán)。
Lesson 7 Python基本語法要素齊動員
現(xiàn)在的目的是盡量想出一個用的東西僅限于內(nèi)置的變量類型和語句的一個綜合的例子,我想還是那個聯(lián)系人表的例子吧
################
#呵呵,還忘記了講注釋
#第一個算是完整的程序
################
contact = {}
contact_list = []
while 1:
contact['name'] = raw_input("please input name: ")
contact['phone'] = raw_input("please input phone number: ")
contact_list.append(contact.copy())
go_on = raw_input("continue? ")
if go_on == "yes":
pass
elif go_on == "no":
break
else:
print "you didn't say no "
i = 1
for contact in contact_list:
print "%d: name=%s" % (i, contact['name'])
print "%d: phone=%s" % (i, contact['phone'])
i = i + 1
首先是回憶一下字符串
字符串既能夠用""也能夠用''。然后是很有特色的%操作,起到格式化字符串的作用,前面僅僅在字符串中有一個%s,現(xiàn)在有%d和%s兩個,分別代表插入十進(jìn)制數(shù)值和字符串于%x標(biāo)記的位置處。
然后是列表
列 表是順序的序列,用append在后面附加,也能構(gòu)用索引值索引。所以我們完全可以用一個變量保存len(contact_list)得到的長度,然后一 個個的遍歷,不過這里展示了另外一種非常方便的方法。而且值得注意的是append()中的參數(shù),我使用了contact.copy(),你可以嘗試著把 copy()給去掉,觀察結(jié)果你就知道了所謂的append是怎么干的了,特別是你對指針之類的東西很有感覺的話(但是在Python中是沒有指針這個概 念的)
再來看看字典
字典是鍵(key)和值(value)的對應(yīng)組合成的無序的序列。所以你存的時候要指明鍵(name或者phone),而且取的時候也是一樣的。
接下來是判斷
if 是很好用的,==表示判斷兩個是否相等,=表示把右邊的賦給左邊的。而且可以直接判斷字符串是否相等,這個太方便了,如果你曾經(jīng)用過strcpy()的 話,就知道了。elif是表示else if的意思,如果if不滿足就判斷elif的條件是否滿足,最后是到else中去。
循環(huán)是個主體
while 和for都是循環(huán)。不過這里while就沒什么說的了,又是很經(jīng)典的while 1,死循環(huán),然后必須在里面用break來跳出。for和C中的for是不一樣的,for in才是一個完整的語句,指的是從一個能夠逐一取值的序列中(比如list),一個一個的取出值賦給for后面指定的變量中,直到取空,循環(huán)結(jié)束。其實回 想一般用C中的for的經(jīng)歷,也大體如此。而且你還可以用for i in range(1,100)來指定一個范圍從多少到多少??梢哉ffor in充分體現(xiàn)了python的體貼周到,用起來很直觀,不會繞彎。
接下來就是運(yùn)行了,大家慢慢調(diào)試吧。下次可能是講異常處理,因為我覺得在深入到使用各種高級的要素之前,先要學(xué)會怎么去處理異常。最常見的異常應(yīng)該是input(),然后你給出的輸入是一個無法轉(zhuǎn)換為數(shù)字的字符串了,那么我們就要來處理它。
Lesson 8 Python中的錯誤檢測
寫 程序什么最重要?完成功能最重要。但是程序中難免要有用戶的輸入,對于這些寫的時候未可預(yù)知的因素中間可能出現(xiàn)的錯誤,一般稱作異常。對于異常情況的處 理,不同語言有不同的做法,比如檢查函數(shù)的返回值之類的,但是那種辦法會把代碼弄成一團(tuán)漿糊。Python在這個方面是比較先進(jìn)的,我們從一個例子來看 看:
print input()
呵呵,看不同吧。其實input是輸入,print是輸出。也就是把輸入的東西立即輸出。但是這個和
print raw_input()
有什么不同呢?
不同的地方是,input()會在raw_input()接收了“字符串”的輸入之后進(jìn)行一些處理,比如你是輸入1+2,然后輸出的就是3了,而raw_input就是原原本本的1+2的輸出了。用代碼表示就是
eval(raw_input())
eval是求表達(dá)式的值,任何一個簡單的python表達(dá)式,就像1+2這樣的作為字符串送入,就能把值從eval處理之后取出來。
現(xiàn)在你實驗一下"sdfsdf”之后,你會發(fā)現(xiàn)提示你
引用:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in -toplevel-
input()
File "<string>", line 0, in -toplevel-
NameError: name 'sdfsdf' is not defined
如果輸入其他稀奇古怪的字符串還可能有其他的出錯提示,我們現(xiàn)在要做的就是捕捉這種由用戶輸入引起的錯誤。這么來作:
try:
print input()
except:
print 'there is an error in your input'
這下你無論怎么輸入都不會有什么其他的提示了,就是自己設(shè)定的print語句作為提示?,F(xiàn)在把try except的組合去掉,回到print input()你再嘗試一下:
1/0
這個顯然是一個錯誤,被零除的錯誤。那么專門來捕捉一下這個錯誤:
try:
print input()
except ZeroDivisionError:
print 'can not be divided by zero'
這下你能夠捕捉到被零除的錯誤了。然后你再嘗試其他的輸入,可能錯誤就沒有被捕捉了。所以再補(bǔ)上:
try:
print input()
except ZeroDivisionError:
print 'can not be divided by zero'
except:
print 'there is an error in your input'
注意,捕捉所有錯誤的except必須放在所有的except的最后一位。明白了?OK
還有更多的能夠捕捉的錯誤,自己查手冊吧(暫時看不了手冊沒關(guān)系,慢慢來嘛)。以后還能夠自己raise(引發(fā))異常呢。不過那都是比較高級的應(yīng)用了,對于出錯處理從一開始就有這個印象,并牢記在心中對于以后寫大一些的軟件很有好處。
您可能感興趣的文章:
相關(guān)文章
python人工智能tensorflow函數(shù)np.random模塊使用
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)np.random模塊使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python函數(shù)式編程藝術(shù)之修飾器運(yùn)用場景探索
本文將詳細(xì)介紹Python修飾器的概念,提供詳細(xì)的示例,并介紹如何使用它們來優(yōu)化和擴(kuò)展代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Django Channels 實現(xiàn)點對點實時聊天和消息推送功能
這篇文章主要介紹了Django Channels 實現(xiàn)點對點實時聊天和消息推送功能,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
Python進(jìn)階學(xué)習(xí)之特殊方法實例詳析
一般說來,特殊的方法都被用來模仿某個行為。下面這篇文章主要給大家介紹了關(guān)于Python進(jìn)階學(xué)習(xí)之特殊方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。2017-12-12
Pandas統(tǒng)計計數(shù)value_counts()的使用
本文主要介紹了Pandas統(tǒng)計計數(shù)value_counts()的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python實現(xiàn)保證只能運(yùn)行一個腳本實例
這篇文章主要介紹了Python實現(xiàn)保證只能運(yùn)行一個腳本實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-06-06

