• <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>

            任我行

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

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

            Posted on 2005-10-11 16:34 任我行 閱讀(978) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Python
            Lesson 5 Python中的輸入與判斷

            健全的程序大凡都需要輸入的功能,所以要學(xué)習(xí)一下簡(jiǎn)單的輸入:
            輸入要使用的是raw_input或者input函數(shù),區(qū)別是raw_input直接把你的輸入作為字符串返回,而input則在raw_input的基礎(chǔ)上把字符串轉(zhuǎn)換為數(shù)字返回(如果你輸入$@#$$怎么辦?自己試試看)。我們就利用這兩個(gè)輸入函數(shù)來作一些有趣的事情。

            代碼:
            your_name = raw_input("please input your name:")
            hint = "welcome! %s" % your_name
            print hint
            不簡(jiǎn)單吧,還有%呢。%s表示在這個(gè)位置插入一個(gè)字符串,%表示把后面提供的參數(shù)“推”入前面的字符串中,所以推的結(jié)果是把%s推出去了,把your_name給填入那個(gè)地方了。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就是跳出這個(gè)while 1(無窮循環(huán),1總是真的,while總是執(zhí)行)。\n是換行,不會(huì)全部忘光了吧。


            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 *
            是引入一個(gè)模塊,這個(gè)模塊用來創(chuàng)建GUI(Graphic User Interface)窗口
            Tk()創(chuàng)建了一個(gè)主窗口
            Label()創(chuàng)建一個(gè)標(biāo)簽
            Label的第一個(gè)參數(shù)是root表明Label是在這個(gè)主窗口中的。
            w.pack()是指用缺省的方式把Label放置在主窗口中
            root.mainloop()開始了一個(gè)循環(huán),是等待你的輸入的循環(huán)。


            Lesson 7 Python基本語法要素齊動(dòng)員

            現(xiàn)在的目的是盡量想出一個(gè)用的東西僅限于內(nèi)置的變量類型和語句的一個(gè)綜合的例子,我想還是那個(gè)聯(lián)系人表的例子吧

            ################
            #呵呵,還忘記了講注釋
            #第一個(gè)算是完整的程序
            ################
            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

            首先是回憶一下字符串
            字符串既能夠用""也能夠用''。然后是很有特色的%操作,起到格式化字符串的作用,前面僅僅在字符串中有一個(gè)%s,現(xiàn)在有%d和%s兩個(gè),分別代表插入十進(jìn)制數(shù)值和字符串于%x標(biāo)記的位置處。

            然后是列表
            列表是順序的序列,用append在后面附加,也能構(gòu)用索引值索引。所以我們完全可以用一個(gè)變量保存len(contact_list)得到的長(zhǎng)度,然后一個(gè)個(gè)的遍歷,不過這里展示了另外一種非常方便的方法。而且值得注意的是append()中的參數(shù),我使用了contact.copy(),你可以嘗試著把copy()給去掉,觀察結(jié)果你就知道了所謂的append是怎么干的了,特別是你對(duì)指針之類的東西很有感覺的話(但是在Python中是沒有指針這個(gè)概念的)

            再來看看字典
            字典是鍵(key)和值(value)的對(duì)應(yīng)組合成的無序的序列。所以你存的時(shí)候要指明鍵(name或者phone),而且取的時(shí)候也是一樣的。

            接下來是判斷
            if是很好用的,==表示判斷兩個(gè)是否相等,=表示把右邊的賦給左邊的。而且可以直接判斷字符串是否相等,這個(gè)太方便了,如果你曾經(jīng)用過strcpy()的話,就知道了。elif是表示else if的意思,如果if不滿足就判斷elif的條件是否滿足,最后是到else中去。

            循環(huán)是個(gè)主體
            while和for都是循環(huán)。不過這里while就沒什么說的了,又是很經(jīng)典的while 1,死循環(huán),然后必須在里面用break來跳出。for和C中的for是不一樣的,for in才是一個(gè)完整的語句,指的是從一個(gè)能夠逐一取值的序列中(比如list),一個(gè)一個(gè)的取出值賦給for后面指定的變量中,直到取空,循環(huán)結(jié)束。其實(shí)回想一般用C中的for的經(jīng)歷,也大體如此。而且你還可以用for i in range(1,100)來指定一個(gè)范圍從多少到多少。可以說for in充分體現(xiàn)了python的體貼周到,用起來很直觀,不會(huì)繞彎。

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

            Lesson 8 Python中的錯(cuò)誤檢測(cè)

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

            代碼:
            print input()

            呵呵,看不同吧。其實(shí)input是輸入,print是輸出。也就是把輸入的東西立即輸出。但是這個(gè)和 代碼:
            print raw_input()

            有什么不同呢?
            不同的地方是,input()會(huì)在raw_input()接收了“字符串”的輸入之后進(jìn)行一些處理,比如你是輸入1+2,然后輸出的就是3了,而raw_input就是原原本本的1+2的輸出了。用代碼表示就是

            代碼:
            eval(raw_input())

            eval是求表達(dá)式的值,任何一個(gè)簡(jiǎn)單的python表達(dá)式,就像1+2這樣的作為字符串送入,就能把值從eval處理之后取出來。
            現(xiàn)在你實(shí)驗(yàn)一下"sdfsdf”之后,你會(huì)發(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

            如果輸入其他稀奇古怪的字符串還可能有其他的出錯(cuò)提示,我們現(xiàn)在要做的就是捕捉這種由用戶輸入引起的錯(cuò)誤。這么來作:

            try:
            ? ? print input()
            except:
            ? ? print 'there is an error in your input'

            這下你無論怎么輸入都不會(huì)有什么其他的提示了,就是自己設(shè)定的print語句作為提示。現(xiàn)在把try except的組合去掉,回到print input()你再嘗試一下:
            1/0
            這個(gè)顯然是一個(gè)錯(cuò)誤,被零除的錯(cuò)誤。那么專門來捕捉一下這個(gè)錯(cuò)誤:
            try:
            ? ? print input()
            except ZeroDivisionError:
            ? ? print 'can not be divided by zero'

            這下你能夠捕捉到被零除的錯(cuò)誤了。然后你再嘗試其他的輸入,可能錯(cuò)誤就沒有被捕捉了。所以再補(bǔ)上:
            try:
            ? ? print input()
            except ZeroDivisionError:
            ? ? print 'can not be divided by zero'
            except:
            ? ? print 'there is an error in your input'

            注意,捕捉所有錯(cuò)誤的except必須放在所有的except的最后一位。明白了?OK

            還有更多的能夠捕捉的錯(cuò)誤,自己查手冊(cè)吧(暫時(shí)看不了手冊(cè)沒關(guān)系,慢慢來嘛)。以后還能夠自己raise(引發(fā))異常呢。不過那都是比較高級(jí)的應(yīng)用了,對(duì)于出錯(cuò)處理從一開始就有這個(gè)印象,并牢記在心中對(duì)于以后寫大一些的軟件很有好處。

            Lesson 9 走向模塊化的第一步

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

            print square(5)

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

            print multiply(1,2)

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

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

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

            對(duì)于高級(jí)一點(diǎn)的話題:傳遞進(jìn)來的參數(shù)是否可以被修改,這個(gè)問題取決于你傳遞了什么近來。如果是數(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ù)了,所以處理的時(shí)候要小心,必要的時(shí)候copy一下再傳遞。

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

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

            首先是建立關(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)鍵字的第一部分,是文件路徑及名稱。注意這里面,路徑需要用\\
            第二部分,是對(duì)文件的模式或者叫權(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盤下面只有一個(gè)空空的test.txt,xxx.close()的作用相當(dāng)于最后的存盤。
            亚洲综合精品香蕉久久网| 日产精品久久久一区二区| 国产L精品国产亚洲区久久| 久久久久女教师免费一区| 97精品伊人久久大香线蕉| 久久综合香蕉国产蜜臀AV| 香蕉久久夜色精品国产小说| 欧美性大战久久久久久| 久久99精品久久久久久hb无码| 99热成人精品免费久久| 性欧美丰满熟妇XXXX性久久久| 精品一区二区久久久久久久网站| 日韩亚洲国产综合久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品三级视频| jizzjizz国产精品久久| 亚洲国产精品久久电影欧美| 久久国产精品免费一区| 久久99精品久久久久婷婷| 久久亚洲AV无码精品色午夜| 久久www免费人成精品香蕉| 韩国三级大全久久网站| 熟妇人妻久久中文字幕| 亚洲国产高清精品线久久| 久久亚洲精品中文字幕三区| 久久ZYZ资源站无码中文动漫| 久久伊人亚洲AV无码网站| 9999国产精品欧美久久久久久| 久久男人Av资源网站无码软件| 99久久综合国产精品免费| 亚洲国产成人精品91久久久 | 色诱久久久久综合网ywww| 亚洲国产成人久久综合野外| 精品久久人人做人人爽综合| 亚洲狠狠久久综合一区77777| 成人久久综合网| 久久精品国产99国产精品澳门| 99久久这里只有精品| 72种姿势欧美久久久久大黄蕉| 久久综合久久自在自线精品自| 久久国产精品成人片免费|