可爱的python课后习题(二)
1,结合grep的实例,考虑处理子目录的情况:#!/usr/bin/python#coding=utf-8#filename:cdcGrep.pyimport osdef cdcGreper(cdcpath,keyword):filelist=os.listdir(cdcpath)for cdc in filelist:
·
1,结合grep的实例,考虑处理子目录的情况:
#!/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')
结果显示:
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的使用:
>>> 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:
#!/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()
结果显示:
zhouqian@zhou:~/python$ python MyStack.py
put a successfully
put chen successfully
put zhou successfully
进入get函数中
判断通过
1
zhou
##########
该栈不为空,数据为['a', 'chen', 'zhou', 0, 0, 0, 0, 0, 0, 0]
进入get函数中
判断通过
0
chen
遇到的问题总结:
实现FILO时选择数据结构:我们这里选择列表,主要是它能删能插,刚开始想用tuple的,可是它的数据在定义完后就没法在修改了。所以只能使用list来做
list的基本操作,检索的使用List 可以作为以 0 下标开始的数组。任何一个非空 list 的第一个元素总是 li[0]
python中类的使用注意事项。
更多推荐
已为社区贡献7条内容
所有评论(0)