可爱的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]#此处这
补充:Web开发 , Python ,