• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            任我行

            一天一個腳印......
            每日一句:
            posts - 54, comments - 218, trackbacks - 1, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            Python完全新手教程(lesson5-lesson10)

            Posted on 2005-10-11 16:34 任我行 閱讀(971) 評論(0)  編輯 收藏 引用 所屬分類: Python
            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\n")
            ? ? 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í)行)。\n是換行,不會全部忘光了吧。


            Lesson 6 Python余興節(jié)目

            from Tkinter import *
            root = Tk()
            w = Label(root, text="Hello, world!")
            w.pack()
            root.mainloop()

            呵呵,一次太超前了一點(diǎn),不過也不是解釋不清楚。我干脆也不解釋了吧。給大家增進(jìn)一點(diǎ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?\n")
            ? ? if go_on == "yes":
            ? ?? ???pass
            ? ? elif go_on == "no":
            ? ?? ???break
            ? ? else:
            ? ?? ???print "you didn't say no\n"
            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é)束。其實(shí)回想一般用C中的for的經(jīng)歷,也大體如此。而且你還可以用for i in range(1,100)來指定一個范圍從多少到多少??梢哉ffor in充分體現(xiàn)了python的體貼周到,用起來很直觀,不會繞彎。

            接下來就是運(yùn)行了,大家慢慢調(diào)試吧。下次可能是講異常處理,因?yàn)槲矣X得在深入到使用各種高級的要素之前,先要學(xué)會怎么去處理異常。最常見的異常應(yīng)該是input(),然后你給出的輸入是一個無法轉(zhuǎn)換為數(shù)字的字符串了,那么我們就要來處理它。

            Lesson 8 Python中的錯誤檢測

            寫程序什么最重要?完成功能最重要。但是程序中難免要有用戶的輸入,對于這些寫的時候未可預(yù)知的因素中間可能出現(xiàn)的錯誤,一般稱作異常。對于異常情況的處理,不同語言有不同的做法,比如檢查函數(shù)的返回值之類的,但是那種辦法會把代碼弄成一團(tuán)漿糊。Python在這個方面是比較先進(jìn)的,我們從一個例子來看看:

            代碼:
            print input()

            呵呵,看不同吧。其實(shí)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)在你實(shí)驗(yàn)一下"sdfsdf”之后,你會發(fā)現(xiàn)提示你

            提示:
            Traceback (most recent call last):
            ??File "", line 1, in -toplevel-
            ? ? input()
            ??File "", 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 9 走向模塊化的第一步

            大規(guī)模的程序設(shè)計需要你把一個大的程序拆分成n個模塊。然后把模塊進(jìn)行組合,交互成為一個完整的程序。你不可能像現(xiàn)在這樣,從頂寫到尾。。。
            那么我們從函數(shù)開始。
            def square(x):
            ? ? return x**2

            print square(5)

            簡單吧,這個是我看過的函數(shù)定義中最簡潔的。def表示這個開始定義一個函數(shù),x是參數(shù),參數(shù)是不需要類型的,因?yàn)閜ython是不需要明確指出類型的。return是返回值,返回的值插入到調(diào)用函數(shù)的地方。再復(fù)雜一些
            def multiply(a, b):
            ? ? return a*b

            print multiply(1,2)

            這是兩個參數(shù)的函數(shù)。那么返回兩個值呢?
            def swap(a, b):
            ? ? return (b,a)
            print swap(1,2)

            呵呵,其實(shí)這里返回的并不是兩個值,而是一個值。怎么說呢。(b, a)就是一個東西,是一個元組(turple),你可以用這樣的方式成生一個元組,并使用它。元組是基本的變量類型:
            my_turple = (1, 2, 3)
            my_list = []
            for i in my_turple:
            ? ? my_list.append(i)
            print my_list

            其實(shí)元組和列表非常像,但是列表的長度是可以變化的,而且成員是可以改變的。但是元組是什么都不能變的,是只讀的。

            對于高級一點(diǎn)的話題:傳遞進(jìn)來的參數(shù)是否可以被修改,這個問題取決于你傳遞了什么近來。如果是數(shù)字或者字符串,是不能夠改變的,但是如果是這樣的:

            def test_func(list_be_passed):
            ? ? list_be_passed[0] = 'towin'
            my_list = ['taowen']
            print my_list
            test_func(my_list)
            print my_list

            就能夠改變傳遞近來的參數(shù)了,所以處理的時候要小心,必要的時候copy一下再傳遞。

            函數(shù)簡單吧,但是很好用的。想起C中的函數(shù)那么那么多麻煩,真是感慨萬千啊。下面是應(yīng)該講GUI編程呢,還是面向?qū)ο竽??思考一?br />
            Lesson 10 Python的文件操作

            文件操作....是一個語言和外界聯(lián)系的主要方法....現(xiàn)在以txt為例簡單的講一下...

            首先是建立關(guān)聯(lián)...假設(shè)在存在以下文件 c:\a.txt
            This is line #1
            This is line #2
            This is line #3
            END


            >>> xxx = file('c:\\a.txt', 'r')

            關(guān)鍵字的第一部分,是文件路徑及名稱。注意這里面,路徑需要用\\
            第二部分,是對文件的模式或者叫權(quán)限,一般有以下3種 "r" (read), "w" (write)和 "a"(append).

            之后,就可以利用
            xxx_content = infile.read()
            xxx_content = infile.readlines()
            來讀取文件內(nèi)容了
            >>> xxx = file('c:\\a.txt', 'r')
            >>> xxx_content = xxx.read()
            >>> print xxx_content
            This is line #1
            This is line #2
            This is line #3
            END
            >>> xxx.close()
            >>>

            >>> infile = file('c:\\a.txt', 'r')
            >>> xxx = file('c:\\a.txt', 'r')
            >>> for xxx_line in xxx.readlines():
            ? ? ? ? print 'Line:', xxx_line
            ???????
            Line: This is line #1

            Line: This is line #2

            Line: This is line #3

            Line: END
            >>> xxx.close()
            >>>

            然后是文件的寫入
            >>> xxx=file('c:\\test.txt','w')
            >>> xxx.write('billrice')
            >>> xxx.write('testtest')
            >>> xxx.write('enter\n')
            >>> xxx.writelines(['billrice','ricerice'])
            >>> xxx.close()
            >>>
            >>> xxx=file('c:\\test.txt','r')
            >>> content=xxx.read()
            >>> print content
            billricetesttestenter
            billricericerice
            >>>

            需要注意的是...在xxx.close()之前,c盤下面只有一個空空的test.txt,xxx.close()的作用相當(dāng)于最后的存盤。
            亚洲中文久久精品无码ww16| 亚洲人成网亚洲欧洲无码久久| 国内精品久久久久久99蜜桃| 久久99精品久久久久婷婷| 久久天堂AV综合合色蜜桃网| 久久精品国产99国产精品导航| 亚州日韩精品专区久久久| 国产69精品久久久久APP下载 | 色欲av伊人久久大香线蕉影院 | 精品久久久久久国产牛牛app | 色综合合久久天天给综看| 中文字幕精品久久久久人妻| 日日躁夜夜躁狠狠久久AV| 国产精品青草久久久久婷婷| 久久中文字幕无码专区| 九九精品99久久久香蕉| 思思久久99热免费精品6| 97久久久久人妻精品专区| 久久久久久一区国产精品| 久久婷婷五月综合97色| 亚洲人成电影网站久久| 久久久久免费精品国产| 亚洲欧洲日产国码无码久久99| 99热热久久这里只有精品68| 精品久久久久久无码中文字幕一区| 青青草原综合久久大伊人导航| 狠狠久久亚洲欧美专区| 国产A三级久久精品| 午夜精品久久久久久影视riav| 亚洲欧美精品伊人久久| 99久久国产热无码精品免费| 久久婷婷国产剧情内射白浆| 色综合久久夜色精品国产| 久久久久久无码国产精品中文字幕| 国产精品美女久久久久网| 浪潮AV色综合久久天堂| 久久一日本道色综合久久| 久久人人爽人人爽人人片AV麻烦 | 日韩欧美亚洲综合久久| 亚洲精品综合久久| 国产精品中文久久久久久久 |