• 大小: 398KB
    文件类型: .zip
    金币: 2
    下载: 2 次
    发布日期: 2021-06-11
  • 语言: Python
  • 标签: python  

资源简介

是《python3程序开发指南》中实例与课后习题的源代码。

资源截图

代码片段和文件信息

#!/usr/bin/env python3
# Copyright (c) 2008-11 Qtrac Ltd. All rights reserved.
# This program or module is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation either version 3 of the License or
# (at your option) any later version. It is provided for educational
# purposes and is distributed in the hope that it will be useful but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.

“““
>>> u = Stack()
>>> u.push(1); u.push(2); u.push(4)
>>> str(u)
‘[1 2 4]‘
>>> u.can_undo
True
>>> while u.can_undo:
...     u.undo()
>>> str(u)
‘[]‘
>>> for x in list(range(-5 0)) +  list(range(5)):
...    u.push(x)
>>> str(u)
‘[-5 -4 -3 -2 -1 0 1 2 3 4]‘
>>> u.top()
4
>>> total = 0
>>> for x in range(5):
...     total += u.pop()
>>> str(u) total
(‘[-5 -4 -3 -2 -1]‘ 10)
>>> while u.can_undo:
...     u.undo()
>>> str(u)
‘[]‘

>>> import os
>>> import tempfile
>>> filename = os.path.join(tempfile.gettempdir() “fs.pkl“)
>>> fs = FileStack(filename)
>>> for x in list(range(-5 0)) +  list(range(5)):
...    fs.push(x)
>>> str(fs)
‘[-5 -4 -3 -2 -1 0 1 2 3 4]‘
>>> fs.top()
4
>>> total = 0
>>> for x in range(5):
...     total += fs.pop()
>>> str(fs) total
(‘[-5 -4 -3 -2 -1]‘ 10)
>>> fs.push(909)
>>> str(fs)
‘[-5 -4 -3 -2 -1 909]‘
>>> os.path.basename(fs.filename)
‘fs.pkl‘
>>> fs.save()
>>> fs2 = FileStack(filename)
>>> str(fs2)
‘[]‘
>>> fs2.push(-32)
>>> fs2.can_undo
True
>>> fs2.load()
>>> fs2.can_undo
False
>>> str(fs2)
‘[-5 -4 -3 -2 -1 909]‘
>>> fs == fs2
True
“““


import abc
import pickle


class Undo(metaclass=abc.ABCmeta):

    @abc.abstractmethod
    def __init__(self):
        self.__undos = []


    @abc.abstractproperty
    def can_undo(self):
        return bool(self.__undos)


    @abc.abstractmethod
    def undo(self):
        assert self.__undos “nothing left to undo“
        self.__undos.pop()(self)


    def add_undo(self undo):
        self.__undos.append(undo)


    def clear(self):        # In class Undo
        self.__undos = []


class Stack(Undo):

    def __init__(self):
        super().__init__()
        self.__stack = []


    @property
    def can_undo(self):
        return super().can_undo


    def undo(self):
        super().undo()


    def push(self item):
        self.__stack.append(item)
        self.add_undo(lambda self: self.__stack.pop())


    def pop(self):
        item = self.__stack.pop()
        self.add_undo(lambda self: self.__stack.append(item))
        return item


    def top(self):
        assert self.__stack “Stack is empty“
        return self.__stack[-1]


    def __str__(self):
        return str(self.__stack)


cla

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-01-08 01:18  py30eg\
     文件        4814  2011-09-01 11:18  py30eg\Abstract.py
     文件        5545  2011-09-01 11:18  py30eg\Account.py
     文件        2078  2011-09-01 11:18  py30eg\Appliance.py
     文件        1722  2011-09-01 11:18  py30eg\Ascii.py
     文件        5296  2011-09-01 11:18  py30eg\Atomic.py
     文件        5466  2011-09-01 11:18  py30eg\BibTeX.py
     文件       10247  2011-09-01 11:18  py30eg\BikeStock.py
     文件       10396  2011-09-01 11:18  py30eg\BikeStock_ans.py
     文件        9501  2011-09-01 11:18  py30eg\BinaryRecordFile.py
     文件        5420  2011-09-01 11:18  py30eg\BinaryRecordFile_ans.py
     文件        1679  2011-09-01 11:18  py30eg\Block.py
     文件        5087  2011-09-01 11:18  py30eg\BlockOutput.py
     文件        9560  2011-09-01 11:18  py30eg\CharGrid.py
     文件        1788  2011-09-01 11:18  py30eg\Circle.py
     文件        5224  2011-09-01 11:18  py30eg\Console.py
     文件        1824  2011-09-01 11:18  py30eg\Const.py
     文件        4694  2011-09-01 11:18  py30eg\ExternalStorage.py
     文件        4912  2011-09-01 11:18  py30eg\FuzzyBool.py
     文件        5894  2011-09-01 11:18  py30eg\FuzzyBoolAlt.py
     目录           0  2018-01-08 01:18  py30eg\Graphics\
     文件         351  2011-09-01 11:18  py30eg\Graphics\Bmp.py
     文件         357  2011-09-01 11:18  py30eg\Graphics\Jpeg.py
     文件         368  2011-09-01 11:18  py30eg\Graphics\Png.py
     文件         357  2011-09-01 11:18  py30eg\Graphics\Tiff.py
     目录           0  2018-01-08 01:18  py30eg\Graphics\Vector\
     文件         407  2011-09-01 11:18  py30eg\Graphics\Vector\Eps.py
     文件         401  2011-09-01 11:18  py30eg\Graphics\Vector\Svg.py
     文件          26  2011-09-01 11:18  py30eg\Graphics\Vector\__init__.py
     文件         351  2011-09-01 11:18  py30eg\Graphics\Xpm.py
     文件          49  2011-09-01 11:18  py30eg\Graphics\__init__.py
............此处省略130个文件信息

评论

共有 条评论