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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

铁乐学Python_day12_作业

發(fā)布時(shí)間:2025/3/20 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 铁乐学Python_day12_作业 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.寫函數(shù),返回一個(gè)撲克牌列表,里面有52項(xiàng),每一項(xiàng)是一個(gè)元組
例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]

def poker():suit = ['紅心', '梅花', '黑桃', '方片']count = [i for i in range(2, 11)]king = ['J', 'Q', 'K', 'A']poker_list = count + kingli = []for key in suit:for value in poker_list:li.append((key, value))return liprint(poker()) print(len(poker()))

2.寫函數(shù),傳入n個(gè)數(shù),返回字典{‘max’:最大值,’min’:最小值}
例如:min_max(2,5,7,8,4)
返回:{‘max’:8,’min’:2}

def min_max(*args):a = max(args)b = min(args)dic = {'max':a, 'min':b}return dicprint(min_max(2))

3.寫函數(shù),專門計(jì)算圖形的面積
其中嵌套函數(shù),計(jì)算圓的面積,正方形的面積和長方形的面積
調(diào)用函數(shù)area(‘圓形’,圓半徑) 返回圓的面積
調(diào)用函數(shù)area(‘正方形’,邊長) 返回正方形的面積
調(diào)用函數(shù)area(‘長方形’,長,寬) 返回長方形的面積

答: # 感覺本題考的主要是嵌套函數(shù)內(nèi)的參數(shù)傳遞,先從最內(nèi)函數(shù)去倒推會容易得到答案。 def area(patter, *args):if patter == '長方形':# 計(jì)算長方形面積def rectangle(a, b):S = a * breturn Sreturn rectangle(*args)if patter == '正方形':# 計(jì)算正方形面積def quadrate(a):S = a * areturn Sreturn quadrate(*args)if patter == '圓形':# 計(jì)算圓形面積def roundness(r):S = 3.14 * r * rreturn Sreturn roundness(*args)print(area('長方形', 4, 8)) print(area('正方形', 12)) print(area('圓形', 6))驗(yàn)證: 32 144 113.03999999999999另一種寫法如下,所有def定義在前面,內(nèi)存中能找到相應(yīng)函數(shù)名對應(yīng)的函數(shù),之前試過寫if在前面的結(jié)果找不到對應(yīng)的函數(shù),所以報(bào)錯了。def area(patter, *args):# 計(jì)算長方形面積def rectangle(a, b):S = a * breturn S# 計(jì)算正方形面積def quadrate(a):S = a * areturn S# 計(jì)算圓形面積def roundness(r):S = 3.14 * r * rreturn Sif patter == '正方形':return quadrate(*args)if patter == '長方形':return rectangle(*args)if patter == '圓形':return roundness(*args)print(area('長方形', 5, 8)) print(area('正方形', 11)) print(area('圓形', 7))驗(yàn)證: 40 121 153.86

4.寫函數(shù),傳入一個(gè)參數(shù)n,返回n的階乘
例如:cal(7)
計(jì)算7654321

答:使用遞歸的方式 def cal(n):if n == 1:return 1return n * cal(n - 1)print(cal(7))5040

5、編寫下載網(wǎng)頁內(nèi)容的函數(shù),要求功能是:用戶傳入一個(gè)url,函數(shù)返回下載頁面的結(jié)果(升級題)
5.1.為題目3編寫裝飾器,實(shí)現(xiàn)緩存網(wǎng)頁內(nèi)容的功能:(升級題)
具體:實(shí)現(xiàn)下載的頁面存放于文件中,如果網(wǎng)頁有對應(yīng)的緩存文件,就優(yōu)先從文件中讀取網(wǎng)頁內(nèi)容,否則,就去下載,然后存到文件中

6、給每個(gè)函數(shù)寫一個(gè)記錄日志的功能,
功能要求:每一次調(diào)用函數(shù)之前,要將函數(shù)名稱,時(shí)間節(jié)點(diǎn)記錄到log的日志中。
所需模塊:
import time
struct_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))

答:

from functools import wraps import timedef timer(func):@wraps(func)def inner(*args, **kwargs):with open('log.txt', encoding='utf-8', mode='a') as f1:struct_time = time.localtime()timesession = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)name = func.__name__f1.write('\n函數(shù)名稱:{}\t\t時(shí)間節(jié)點(diǎn):{}'.format(name, timesession))ret = func(*args, **kwargs)return retreturn inner@timer def hello():print('hello word')@timer def my_name(name):print('my name is %s' % name)# 驗(yàn)證 hello() my_name('wutiele')# 打開log.txt可以看到己生成下列兩行記錄函數(shù)名稱:hello 時(shí)間節(jié)點(diǎn):2018-04-02 19:04:05 函數(shù)名稱:my_name 時(shí)間節(jié)點(diǎn):2018-04-02 19:04:05

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

答:

def auth(func):def inner(*args, **kwargs):# 引入全局變量flagglobal flagif flag:username = input("請輸入用戶名:").strip()password = input("請輸入密碼:").strip()with open('auth.txt', encoding='utf-8', mode='r') as f1:for i in f1:li = i.strip().split()if username == li[0] and password == li[1]:print('登錄成功')# 修改全局變量flag標(biāo)志位為False,以便接下來裝飾的函數(shù)不用再進(jìn)行認(rèn)證。flag = Falseret = func(*args, **kwargs)return ret# 循環(huán)驗(yàn)證完畢之后再報(bào)驗(yàn)證失敗else:print('驗(yàn)證失敗')returnelse:ret = func(*args, **kwargs)return retreturn innerflag = True @auth def hello():print('hello word,hello hero.')@auth def my_name(name):print('my name is %s' % name)# 驗(yàn)證 hello()my_name('tiele')hello()# 效果:請輸入用戶名:test 請輸入密碼:234 驗(yàn)證失敗 # 執(zhí)行第一個(gè)函數(shù)驗(yàn)證失敗,于是到第二個(gè)時(shí)又再進(jìn)行認(rèn)證 請輸入用戶名:伍天 請輸入密碼:123567 登錄成功 # 第二個(gè)函數(shù)認(rèn)證通過,接下來的第三個(gè)函數(shù)直接執(zhí)行 my name is tiele hello word,hello hero. # 第三個(gè)函數(shù)直接執(zhí)行了,不需要認(rèn)證。

8,再編寫裝飾器,為多個(gè)函數(shù)加上認(rèn)證的功能(用戶的賬號密碼來源于文件),要求登錄成功一次,后續(xù)的函數(shù)都無需再輸入用戶名和密碼。這個(gè)作業(yè)之上進(jìn)行升級操作:
設(shè)置兩套密碼,一套為京東賬號密碼,一套為淘寶賬號密碼保存在文件中。
設(shè)置四個(gè)函數(shù),分別代表 京東首頁,京東超市,淘寶首頁,淘寶超市。
循環(huán)打印四個(gè)選項(xiàng):京東首頁,京東超市,淘寶首頁,淘寶超市。
供用戶選擇,用戶輸入選項(xiàng)后,執(zhí)行該函數(shù),四個(gè)函數(shù)都加上認(rèn)證功能,只要登陸成功一次,在選擇其他函數(shù),后續(xù)都無需輸入用戶名和密碼。
相關(guān)提示:用帶參數(shù)的裝飾器。裝飾器內(nèi)部加入判斷,驗(yàn)證不同的賬戶密碼。

答:

def auth2(model):'''由于裝飾器需帶參數(shù),故嵌套三層函數(shù)。:param model: 供選擇jingdong或taobao:return: '''def auth(func):def inner(*args, **kwargs):# 引入全局變量flagglobal flagif flag and model == 'jingdong':username = input("請輸入用戶名:").strip()password = input("請輸入密碼:").strip()with open('auth_JD.txt', encoding='utf-8', mode='r') as f1:for i in f1:li = i.strip().split()if username == li[0] and password == li[1]:print('登錄成功')# 修改全局變量flag標(biāo)志位為False,以便接下來裝飾的函數(shù)不用再進(jìn)行認(rèn)證。flag = Falseret = func(*args, **kwargs)return ret# 循環(huán)驗(yàn)證完畢之后再報(bào)驗(yàn)證失敗else:print('驗(yàn)證失敗')returnelif flag and model == 'taobao':username = input("請輸入用戶名:").strip()password = input("請輸入密碼:").strip()with open('auth_TB.txt', encoding='utf-8', mode='r') as f1:for i in f1:li = i.strip().split()if username == li[0] and password == li[1]:print('登錄成功')# 修改全局變量flag標(biāo)志位為False,以便接下來裝飾的函數(shù)不用再進(jìn)行認(rèn)證。flag = Falseret = func(*args, **kwargs)return ret# 循環(huán)驗(yàn)證完畢之后再報(bào)驗(yàn)證失敗else:print('驗(yàn)證失敗')returnelse:ret = func(*args, **kwargs)return retreturn innerreturn authflag = True @auth2(model='jingdong') def JD_index():print('from JD index 京東首頁') @auth2(model='jingdong') def JD_supermark():print('from JD supermark 京東超市') @auth2(model='taobao') def TB_index():print('from TB index 淘寶首頁') @auth2(model='taobao') def TB_supermark():print('from TB supermark 淘寶超市')while True:li2 = ['京東首頁', '京東超市', '淘寶首頁', '淘寶超市']for i in range(len(li2)):print(i+1, li2[i])sn = input("請按序號選擇商城:(Q/q退出)").strip()if sn.upper() == 'Q':breakelif sn == "1":JD_index()elif sn == "2":JD_supermark()elif sn == "3":TB_index()elif sn == "4":TB_supermark()else:print('你的選擇有誤,請重新選擇:')continue

轉(zhuǎn)載于:https://www.cnblogs.com/tielemao/p/8719180.html

總結(jié)

以上是生活随笔為你收集整理的铁乐学Python_day12_作业的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。