可愛的python課後習題(二)

2021-12-29 19:41:10 字數 3558 閱讀 5432

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 "", line 1, in  

typeerror: 'in ' 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 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

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函式中 

判斷通過 

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中類的使用注意事項。

作者:chen861201

python課後習題 8 7 8 8

8 7 編寫乙個名為make album 的函式,它建立乙個描述 的字典。這個函式應接受歌手的名字和 名,並返回乙個包含這兩項資訊的字典。使用這個函式建立三個表示不同 的典,並列印每個返回的值,以核實字典正確地儲存了 的資訊。給函式make album 新增乙個可選形參,以便能夠儲存 包含的歌曲數。...

python課後習題 10 4

10 4 訪客名單 編寫乙個while 迴圈,提示使用者輸入其名字。使用者輸入其名字後,在螢幕上列印一句問候語,並將一條訪問記錄新增到檔案guest book.txt 中。確保這個檔案中的每條記錄都獨佔一行。file name guest book.txt active true while act...

python課後習題 10 6 10 7

10 6 加法運算 提示使用者提供數值輸入時,常出現的乙個問題是,使用者提供的是文字而不是數字。在這種情況下,當你嘗試將輸入轉換為整數時,將引發typeerror 異常。編寫乙個程式,提示使用者輸入兩個數字,再將它們相加並列印結果。在使用者輸入的任何乙個值不是數字時都捕獲typeerror 異常,並...