日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数、装饰器、迭代器、内置方法总练习题

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数、装饰器、迭代器、内置方法总练习题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數基礎:

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有什么作用?不用輸出也是一樣

?

解釋閉包的概念

不懂,回去再看一遍

?

寫函數,返回一個撲克牌列表,里面有52項,每一項是一個元組

例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃A’)]

def poke():
color = ['紅心','草花','紅桃','黑桃']
n = 1
l = []
while n < 14:
for i in color:
l.append((i, n))
  n += 1
print(l)

poke()

然后再加上if對i的判斷
def poke():
i =[]
color = ['紅心','草花','紅桃','黑桃']
num = [i for i in range(2,11)]
num_big = ['J','Q','K','A']
num.extend(num_big) # 1-13數字集合到一起
k = []
for i in num:
for l in color:
k.append((l,i)) # 實際和99乘法一樣
print(k)


poke()


這種就沒事 ?

2寫函數,傳入n個數,返回字典{‘max’:最大值,’min’:最小值}

例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}

3寫函數,專門計算圖形的面積

其中嵌套函數,計算圓的面積,正方形的面積和長方形的面積

調用函數area(‘圓形’,圓半徑) 返回圓的面積

調用函數area(‘正方形’,邊長) 返回正方形的面積

調用函數area(‘長方形’,長,寬) 返回長方形的面積

def area(): def 計算長方形面積(): pass def 計算正方形面積(): pass def 計算圓形面積(): pass

def area(typ, *args):
def recangle(x,y):
num = x*y
return num
def square(x):
num = x*x
return num
def circular(x):
num = x
return num
if typ == '長方形':
return recangle(*args)
elif typ == '正方形':
return square(*args)
elif typ == '圓形':
return circular(*args)



print(area('長方形',5,6))

return函數的應用,return是指返回函數的執行結果。 import math ,pi表示3.14

寫函數,傳入一個參數n,返回n的階乘(用for循環,不斷相乘)

例如:cal(7) 計算7*6*5*4*3*2*1

def cal1(x):
if x > 0:
return x*cal1(x-1)

print(cal1(2))
報錯
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

為什么cal1(x-1)沒有識別到類型?

編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源于文件),要求登錄成功一次,后續的函數都無需再輸入用戶名和密碼

寫過,不寫了,用2層函數返回內存地址,最里面執行原來函數和判斷。知識:為什么要做2層返回?怎么把文件里的賬號密碼轉出來進行判斷?

?

1生成器和迭代器的區別?

生成器gennerater有2種生成方式1.列表生成式2.函數yield,一邊循環一邊計算的機制

迭代器iterator--可以被next()函數調用,

生成器有幾種方式獲取value?

1.列表生成式2.函數yield3.()

通過生成器寫一個日志調用方法, 支持以下功能

根據指令向屏幕輸出日志

根據指令向文件輸出日志

根據指令同時向文件&屏幕輸出日志

以上日志格式如下

2017-10-19 22:07:38 [1] test log db backup 3 2017-10-19 22:07:40 [2] user alex login success #注意:其中[1],[2]是指自日志方法第幾次調用,每調用一次輸出一條日志

代碼結構如下

def logger(filename,channel='file'):"""日志方法:param filename: log filename:param channel: 輸出的目的地,屏幕(terminal),文件(file),屏幕+文件(both):return:"""...your code...#調用log_obj = logger(filename="web.log",channel='both')log_obj.__next__()log_obj.send('user alex login success')
def log_obj():
print('log')
yield x

def log_obj2():
info = 'log'
f = open('file','a', encoding='UTF-8')
f.write('\n{}'.format(info))
f.close()

def log obj3()
def log obj():
def log_obj2()
log_obj1(x)
log_obj2(x)

最后一題不明白什么意思,同時輸出的話,把函數寫到里面執行不就可以了?

內置函數

用map來處理字符串列表,把列表中所有人都變成sb,比方alex_sb

name=['alex','wupeiqi','yuanhao','nezha']

name=['alex','wupeiqi','yuanhao','nezha']

name = map(lambda x:x+'_SB',name)

print(list(name))

用filter函數處理數字列表,將列表中所有的偶數篩選出來

num = [1,3,5,6,7,8]

num = [1,3,5,6,7,8]
def judge(n):
return n % 2 == 0
new_num = filter(judge,num)
print(list(new_num))

如下,每個小字典的name對應股票名字,shares對應多少股,price對應股票的價格

portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ]

計算購買每支股票的總價

用filter過濾出,單價大于100的股票有哪些

?def ss(n):
sum1 = n['price']
return sum1 > 100
newlis = filter(ss,p)
for i in newlis:
print(i['name'])

轉載于:https://www.cnblogs.com/jackfree/p/9640631.html

總結

以上是生活随笔為你收集整理的函数、装饰器、迭代器、内置方法总练习题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。