《可爱的Python》读书笔记(八)

问题的最佳的解决方案,就是找到那段别人解决相似问题的代码。


今天做些能回顾所学知识点的小练习,类似的问题参考别人的代码,修改成自己容易理解的模样。

1、实现简单的栈。put(item)实现数据item插入栈中;get()实现从栈中取一个数据。

# -*- coding: utf-8 -*-

class MyStack(object):
    '''MyStack
        自定义栈,操作有put(), get()
    '''
    def __init__(self):

        self.head = -1
        self.stack = []
    
    def put(self, item):

        self.head += 1
        self.stack.append(item)
        print('Put %s Success' % item)
    
    def get(self):

        if self.head < 0:
            return "Put Error: The Stack is Overflow!"
        else:
            self.head -= 1
            return self.stack.pop()
        
    def isEmpty(self):

        return self.item == []
        
        
if __name__ == "__main__":
    mystack = MyStack()
    mystack.put('a')
    mystack.put('b')
    print(mystack.get())
    mystack.put('c')
    print(mystack.get())
    print(mystack.get())
    print(mystack.get())

运行结果如下:

Put a Success
Put b Success
b
Put c Success
c
a
Put Error: The Stack is Overflow!

2、判断指定网页使用的编码。

# -*- coding: utf-8 -*-
import sys
import requests
import chardet

def web_detect(url):
    
    #检测网页的编码方式
    
    try:
        response = requests.get(url)
    except:
        print('error')
        return 0
    web= response.content
    response.close()
    codedetect = chardet.detect(web)["encoding"]
    print('%s\t<-\t%s' % (url, codedetect))
    return 1
    
if __name__ == '__main__':

    if len(sys.argv) == 1:
        print('usage:\n\tpython XX.py http://xxx.com')
    else:
        web_detect(sys.argv[1])

运行效果如下:

C:\>python webdetect.py http://blog.51cto.com/9473774
http://blog.51cto.com/9473774   <-      utf-8
C:\>python webdetect.py http://www.163.com
http://www.163.com      <-      GB2312

3、遍历指定目录下的所有文件,找出其中占用空间最大的前3个文件。

# -*- coding: utf-8 -*-
import sys
import os

def get_top_three(path):
    
    d = {}
    for root, dirs, files in os.walk(path):
        for file in files:
            fname = os.path.join(root, file)
            fsize = os.stat(fname).st_size
            d[fname] = fsize
    #print(d)
    f = sorted(zip(d.values(), d.keys()))
    for i in [-1, -2, -3]:
        for j in f[i]:
            print(j)
            
            
get_top_three('E:\\iso\\CentOS-6.8-x86_64-bin-DVD1')

运行结果如下:

146313216
E:\iso\CentOS-6.8-x86_64-bin-DVD1\images\install.img
45373440
E:\iso\CentOS-6.8-x86_64-bin-DVD1\images\efidisk.img
40688737
E:\iso\CentOS-6.8-x86_64-bin-DVD1\isolinux\initrd.img

原文地址:http://blog.51cto.com/9473774/2091006

时间: 2024-10-11 06:01:45

《可爱的Python》读书笔记(八)的相关文章

《Android源代码设计模式解析与实战》读书笔记(二十二)

第二十二章.享元模式 享元模式是结构型设计模式之中的一个.是对对象池的一种实现.就像它的名字一样,共享对象.避免反复的创建. 我们经常使用的String 就是使用了共享模式.所以String类型的对象创建后就不可改变,假设当两个String对象所包括的内容同样时,JVM仅仅创建一个String对象相应这两个不同的对象引用. 1.定义 採用一个共享来避免大量拥有同样内容对象的开销.使用享元模式可有效支持大量的细粒度对象. 2.使用场景 (1)系统中存在大量的类似对象. (2)细粒度的对象都具备较接

《Android源代码设计模式解析与实战》读书笔记(十)

第十章.解释器模式 解释器模式是一种用的比較少的行为型模式.其提供了一种解释语言的语法或表达式的方式. 可是它的使用场景确实非常广泛,仅仅是由于我们自己非常少回去构造一个语言的文法,所以使用较少. 1.定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. (当中语言就是我们须要解释的对象,文法就是这个语言的规律,解释器就是翻译机.通过文法来翻译语言.) 2.使用场景 1.假设某个简单的语言须要解释运行并且能够将该语言中的语句表示为一个抽象的语法树时

《Android源代码设计模式解析与实战》读书笔记(十八)

第十八章.代理模式 代理模式也称托付模式,是结构型设计模式之中的一个.是应用广泛的模式之中的一个. 1.定义 为其它对象提供一种代理以控制对这个对象的訪问. 2.使用场景 当无法或不想直接訪问某个对象或訪问某个对象存在困难时能够通过一个代理对象来间接訪问,为了保证client使用的透明性.托付对象与代理对象须要实现相同的接口. 3.UML类图 (1)Subject:抽象主题类.声明真实主题与共同接口方法,该类能够是抽象类或接口. (2)RealSubject:真实主题类(被托付类).尤其运行详细

《Android源代码设计模式解析与实战》读书笔记

1.定义 将对象组合成树形结构以表示"部分-总体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 2.使用场景 (1)表示对象的部分-总体层次结构时. (2)从一个总体中可以独立出部分模块或功能的场景. 3.UML类图 (1)Component:抽象根节点,为组合中的对象声明接口.在适当的情况下.实现全部类共同拥有接口的缺省行为. 声明一个接口用于訪问和管理Component的子节点.可在递归结构中定义一个接口,用于訪问一个父节点,并在合适的情况下实现它. (2)Compo

《Android源代码设计模式解析与实战》读书笔记(八)

第八章.状态模式 1.定义 状态模式中的行为是由状态来决定,不同的状态下有不同的行为.当一个对象的内在状态改变时同意改变其行为,这个对象看起来像是改变了其类. 2.使用场景 1.一个对象的行为取决于它的状态,而且它必须在执行时依据状态改变它的行为. 2.代码中包括大量与对象状态有关的条件语句,比如,一个操作中含有大量的多分支语句.且这些分支依赖于该对象的状态. 3.简单实现 实现效果:首先将电视的状态分为开机与关机状态,开机时能够通过遥控器实现频道切换和调节音量,可是关机时,这些操作都会失效.

《Android源码设计模式解析与实战》读书笔记(十三)

第十三章.备忘录模式 备忘录模式是一种行为模式,该模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态,有点像是我们平常说的"后悔药". 1.定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态. 2.使用场景 (1)需要保存一个对象在某一个时刻的状态或部分状态. (2)如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访问其内部状态,通过中间对象可以间接访

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.Android源代码中包含了HAL(即硬件抽象层) 的代码,并学习了如何搭建这两种开发环境. Android 的移植的本质就是Linux内核的移植,Linux内核的移植主要是Linux驱动的移植.而开发和测试Linux驱动就需要安装以上两个开发环境. 搭建两套环境的具体步骤如下: 一.下载编译和测试A

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m

JavaScript 设计模式与开发实践读书笔记 http://www.open-open.com/lib/view/open1469154727495.html

JavaScript 设计模式与开发实践读书笔记 最近利用碎片时间在 Kindle 上面阅读<JavaScript 设计模式与开发实践读书>这本书,刚开始阅读前两章内容,和大家分享下我觉得可以在项目中用的上的一些笔记. 我的 github 项目会不定时更新,有需要的同学可以移步到我的 github 中去查看源码: https://github.com/lichenbuliren/design-mode-notes 1.currying 函数柯里化 currying 又称 部分求值 .一个 cu

JAVA并发编程实战 读书笔记(二)对象的共享

<java并发编程实战>读书摘要 birdhack 2015年1月2日 对象的共享 JAVA并发编程实战读书笔记 我们已经知道了同步代码块和同步方法可以确保以原子的方式执行操作,但一种常见的误解是,认为关键之synchronized只能用于实现原子性或者确定临界区.同步还有另一个重要的方面:内存可见性. 1.可见性 为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制. 在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程