1. 程式人生 > >函數、裝飾器、叠代器、內置方法總練習題

函數、裝飾器、叠代器、內置方法總練習題

次循環 chan 判斷 () bbb iter 大於 內置 就是

函數基礎:

1.寫函數,計算傳入數字參數的和。(動態傳參):用不固定參數的*args不限定輸入的參數,然後用for循環把每個元素加到一起,函數裏的args不用加*


def sum1(*args):
j = 0
for i in args: # 不固定參數輸入元祖後,調用不需要加*
j = j + i
print(j)

sum1(1,2,3,4,5,6)
 

2.寫函數,用戶傳入修改的文件名,與要修改的內容,執行函數,完成整個文件的批量修改操作:原來打算打開文件後,遍歷每行數據,每行數據為字符串S--》每行數據用,分割成元素為字符串的列表A--》判斷是否需要修改--》修改後賦值給原來的列表A--》再把列表A用‘,’.join(list)轉成也就是原來的字符串S--》再用seek,truncate寫回原來文件。

也就是說不用弄一個空列表就能實現修改信息寫回文件,然而寫的時候發現問題出在--》修改後賦值給原來的列表A 這裏,要賦值就要再用一次循環,然後用到枚舉enumerae來定位索引值,而枚舉列表的元素類型為str,剛好原來列表A的元素也是字符串,字符串是不可變的元素,不能通過枚舉索引修改元素,所以還是得弄一個空列表l,把修改後的信息加到空列表l裏--》做完後感覺用字典的話應該不用像列表一樣做這麽多for循環,因為字典索引是用key,賦值不用index索引去找

用到的東西:str.split(‘,‘),list.append(str),文件寫入方法(for i in list ,f.write(‘\n),seek(0),truncate()),for index,i in enuerate(list) -->if correction-->list[index] = i

def file_change(filename,newinfo,oldinfo):
f = open(filename,‘r+‘)
d = f.readlines() # 信息變成列表,元素是一個一個的字符串,一個字符串就是一行
l = []
n = 0
for i in d:
for i1, e in enumerate(i): # di是每行信息字符串的列表i
e = i.split(‘,‘) # 把每行信息字符串變成以,隔開的列表e
# print(i)
for index2,j in enumerate(e):
if j == oldinfo:
j = newinfo # 每個小的字符串檢查,如果有符合的替換掉
e[index2] = j # 通過索引方式把修改後的值賦值回遍歷的列表e
n += 1 # 加一個功能,計算修改的次數
e2 = ‘,‘.join(e) # 把列表e用,重新組成字符串e2
l.append(e2) # e2加到空列表l
# print(l)
f.seek(0)
f.truncate() # 清空文件內容
f = open(filename, ‘w‘)
for k in l:
f.write(‘{}\n‘.format(k)) # i信息重新寫入
f.close()
file_change(‘D:test.txt‘,‘AAA‘,‘BBB‘)

3.寫函數,檢查用戶傳入的對象(字符串、列表、元組)的每一個元素是否含有空內容。:all(),any()只能判斷可叠代對象

def check(n):
print(沒有空內容‘) if all(n) else print(有空內容‘)

check(None)
TypeError: ‘NoneType‘ object is not iterable


4.寫函數,檢查傳入字典的每一個value的長度,如果大於2,那麽僅保留前兩個長度的內容,並將新內容返回給調用者。

用到:dict.keys(),dict.values(),dict.items()--K,V

dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字符串或列表

dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def check(i):
for k,v in i.items():
if len(v) > 2:
i[k] = v[:2]
print(i)

check(dic)

答案用的return i和else continue有什麽作用?不用輸出也是一樣

解釋閉包的概念

不懂,回去再看一遍

函數、裝飾器、叠代器、內置方法總練習題