可爱的python课后习题(二)


1,结合grep的实例,考虑处理子目录的情况:
[html]
#!/usr/bin/python 
#coding=utf-8 
#filename:cdcGrep.py 
import os 
def cdcGreper(cdcpath,keyword): 
        filelist=os.listdir(cdcpath) 
        for cdc in filelist: 
                if os.path.isdir(cdc): 
                        filename=cdcpath+os.sep+cdc 
                        print '%s 是子目录 ' % filename 
                        cdcGreper(filename,keyword) 
                        print '执行迭代函数' 
                elif '.txt' in cdc: 
                        print '找到目标文件,准备读取' 
                        cdcfile=open(cdcpath+os.sep+cdc) 
                        for line in cdcfile.readlines(): 
                                if keyword in line: 
                                        print line 
if __name__=='__main__': 
        cdc=cdcGreper('/home/zhouqian/python','test') 
结果显示:
[html]
zhouqian@zhou:~/python$ python cdcGrep.py 
找到目标文件,准备读取 
./ ['class'] ['getoptTest.py', 'value_keys.py', 'text.txt', 'cdctool.py', 'test.txt', 'cdctoolTest.py', 'cdWalk.py', '.getoptTest.py.swp', 'cdWalk.pyc'] 
 
/home/zhouqian/python/class 是子目录  
找到目标文件,准备读取 
test 
 
test 
 
test 
 
执行迭代函数 
找到目标文件,准备读取 
test 
说明下这里面友好多的print,是为了方便调试最笨的方法。
遇到问题总结:
os.sep是一个分割符的标志,
os.path.isdir是验证是否存在子目录的函数
迭代的巧妙运用,
in的使用:
[html] 
>>> a='12345' 
>>> 1 in a 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: 'in <string>' requires string as left operand, not int 
>>> '1' in a 
True 
>>> a=(1,2,3,4) 
>>> 1 in a 
True 
>>> a=['1','2','3'] 
>>> 1 in a 
False 
>>> '1' in a 
True 
>>> a={1:11,2:33} 
>>> 1 in a 
True 
习题2:编写类实现栈的功能----FILO:
[html]
#!/usr/bin/python 
#coding=utf-8 
#filename:MyStack.py 
class MyStacker(object): 
        ''' 
           mystack 自定义栈,主要的操作put(),get(),isEmpty() 
        ''' 
        def __init__(self,max): 
                '''初始化栈头指针和清空栈''' 
                self.head=-1 
                self.max=max 
                self.stack=list()#这里使用list列表来存储数据 
                for i in range(self.max): 
                        self.stack.append(0)#这里是初始化stack的长度,也就是分配存储空间 
        def put(self,item): 
                #首先判断是否超出了栈的长度 
                if self.head>=self.max: 
                        return '栈已满,请先删除部分数据' 
                else: 
                        self.head+=1 
                        self.stack[self.head]=item 
                        print 'put %s successfully' %item 
        def get(self): 
                print '进入get函数中' 
                if self.head<0: 
                        return '栈已空,请先插入数据' 
                else: 
                        print '判断通过' 
                        self.head-=1 
                        print self.head 
                        return self.stack[self.head+1]#此处这样写的目的是为了能够取到我们需要的那个数据,并且self.head还要减1 
        def isEmpty(self): 
                if self.head<-1: 
                        print '该栈为空' 
                        return True 
                else: 
                        print '该栈不为空,数据为%s' %self.stack 
                        return False 
if __name__=='__main__': 
        mystack=MyStacker(10) 
        mystack.put('a') 
        mystack.put('chen') 
        mystack.put('zhou') 
        print mystack.get() 
        print '##########' 
        mystack.isEmpty() 
        print mystack.get() 
结果显示:
[html] 
zhouqian@zhou:~/python$ python MyStack.py  
put a successfully 
put chen successfully 
put zhou successfully 
进入get函数中 
判断通过 

zhou 
########## 
该栈不为空,数据为['a', 'chen', 'zhou', 0, 0, 0, 0, 0, 0, 0] 
进入get函数中 
判断通过 

chen 
遇到的问题总结:
实现FILO时选择数据结构:我们这里选择列表,主要是它能删能插,刚开始想用tuple的,可是它的数据在定义完后就没法在修改了。所以只能使用list来做
list的基本操作,检索的使用List 可以作为以 0 下标开始的数组。任何一个非空 list 的第一个元素总是 li[0]
python中类的使用注意事项。

 

 作者:chen861201


 

相关内容

    暂无相关文章

评论关闭