《Python核心編程》第二版第407頁第十三章練習 續五 -Python核心編程答案-自己做的-

來源:互聯網
上載者:User

這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
根據反饋,或者code review,對本篇文章答案或者相關內容的更新補充,一般會被添加在本篇部落格的評論中。
將盡量保證每題的答案代碼是完整的,不僅僅是函數或者類,開啟Python 2.7的IDLE,將代碼完整拷貝進去,就能調試運行。
歡迎訪問Balian在部落格園的家。 http://www.cnblogs.com/balian

13-8.
堆棧類。一個堆棧(stack)是一種具有後進先出(last-in-first-out,LIFO)特性的資料結構。我們可以把它想象成一個餐盤架。最先放上去的盤子將是最後一個取下來的,而最後一個放上去的盤子是最先被取下來的。博主:這有點像子彈夾,最先壓下去的子彈在最後被射出。你的類中應該有push()方法(向堆棧中壓入一個資料項目)和pop()方法(從堆棧中移出一個資料項目)。還有一個叫isempty()的布爾方法。如果堆棧是空的,返回布爾值1,否則返回0;一個名叫peek()的方法,取出堆棧頂部的資料項目,但並不移除它。
注意,如果你使用一個列表來實現堆棧,那麼pop()方法從Python1.5.2版本起已經存在了。那就在你編寫的新類裡,加上一段代碼檢查pop()方法是否已經存在。如果經檢查pop()方法存在,就調用這個內建的方法;否則就執行你自己編寫的pop()方法。你很可能要用到列表對象;如果用到它時,不需要擔心實現列表的功能(例如切片)。只要保證你寫的堆棧類能夠正確實現上面的兩項功能就可以了。你可以用列表對象的子類或自己寫個類似列表的對象,請參考樣本6.2。

【注】
書142頁,提到了檢查清單類型的內建函數的方法。博主使用Python 2.7,自然能找到pop()方法。

Microsoft Windows [Version 6.1.7601]Copyright (c) 2009 Microsoft Corporation.  All rights reserved.C:\>pythonPython 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> dir(list)['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

一小段程式就能用來檢查dir(list)的輸出結果(其實是一個列表)中是否有“pop”:

def findPop():    result = False    for i in dir(list):        if i == 'pop':            result = True            break    return result

另外,這個用於堆棧的列表,list[0]是棧底,list[-1]是棧頂。

【答案】

代碼如下:

#-*- encoding: utf-8 -*-class StackPattern(object):    '定義堆棧模型類'        def __init__(self, stackList):        self.stackList = stackList            def push(self, topItem):        self.stackList.append(topItem)        print 'Item ', topItem, ' is pushed on the top of Stack.'        print 'The updated Stack is: ', self.stackList, '\n'        def popvalue(self):        if findPop() == True:            topItem = self.stackList.pop()            print 'Item ', topItem, ' has been poped.'            print 'The updated Stack is: ', self.stackList, '\n'        else:            topItem = self.stackList.pop[-1]            print 'Item ', topItem, ' has been poped.'            self.stackList = self.stackList[:-2]            print 'The updated Stack is: ', self.stackList, '\n'            def isempty(self):        if len(self.stackList) == 0: return True        else: return False            def peek(self):        return self.stackList[-1]    def findPop():    result = False    for item in dir(list):        if item == 'pop':            result = True            break    return result            a_stack = StackPattern([1, 2, 3, 4, 5, 6, 7, 8])a_stack.push(9)a_stack.popvalue()print 'Is Empty Value: ', a_stack.isempty()print 'Peek value', a_stack.peek()

【執行結果】

Item  9  is pushed on the top of Stack.

The updated Stack is:  [1, 2, 3, 4, 5, 6, 7, 8, 9]

Item  9  has been poped.

The updated Stack is:  [1, 2, 3, 4, 5, 6, 7, 8]

Is Empty Value False

Peek value 8

 

13-9.

隊列類。一個隊列(queue)是一種具有先進先出(first-in-first-out,FIFO)特性的資料結構。一個隊列就像是一行隊伍,資料從前端被移除,從後端被加入。博主:這有點像等待服務的銀行客戶,先來的先服務,後面還有新來的加到隊伍尾巴。這個類必須支援下面幾種方法:

enqueue()在列表的尾部加入一個新的元素。dequeue()在列表的頭部取出一個元素,返回它並且把它從列表中刪除。請參見上面的練習和樣本6.3。

【注】

題目中用於隊列的列表,list[0]是隊首,list[-1]是隊尾。

【答案】

代碼如下:

#-*- encoding: utf-8 -*-class QueuePattern(object):    '定義隊列模型類'        def __init__(self, queueList):        self.queueList = queueList            def enqueue(self, endItem):        self.queueList.append(endItem)        print 'Item ', endItem, ' is added at the end of Queue.'        print 'The updated Queue is: ', self.queueList, '\n'        def dequeue(self):        headItem = self.queueList[0]        print 'Item ', headItem, ' has been deleted.'        self.queueList = self.queueList[1:]        print 'The updated Queue is: ', self.queueList, '\n'                    a_queue = QueuePattern([1, 2, 3, 4, 5, 6, 7, 8])a_queue.enqueue(9)a_queue.dequeue()

 


【執行結果】

Item  9  is added at the end of Queue.

The updated Queue is:  [1, 2, 3, 4, 5, 6, 7, 8, 9]

Item  1  has been deleted.

The updated Queue is:  [2, 3, 4, 5, 6, 7, 8, 9]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.