1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,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.写函数,传入n个数,返回字典{‘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.写函数,专门计算图形的面积
其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
调用函数area(‘圆形’,圆半径) 返回圆的面积
调用函数area(‘正方形’,边长) 返回正方形的面积
调用函数area(‘长方形’,长,宽) 返回长方形的面积

答:
# 感觉本题考的主要是嵌套函数内的参数传递,先从最内函数去倒推会容易得到答案。
def area(patter, *args):if patter == '长方形':# 计算长方形面积def rectangle(a, b):S = a * breturn Sreturn rectangle(*args)if patter == '正方形':# 计算正方形面积def quadrate(a):S = a * areturn Sreturn quadrate(*args)if patter == '圆形':# 计算圆形面积def roundness(r):S = 3.14 * r * rreturn Sreturn roundness(*args)print(area('长方形', 4, 8))
print(area('正方形', 12))
print(area('圆形', 6))验证:
32
144
113.03999999999999另一种写法如下,所有def定义在前面,内存中能找到相应函数名对应的函数,之前试过写if在前面的结果找不到对应的函数,所以报错了。def area(patter, *args):# 计算长方形面积def rectangle(a, b):S = a * breturn S# 计算正方形面积def quadrate(a):S = a * areturn S# 计算圆形面积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))验证:
40
121
153.86

4.写函数,传入一个参数n,返回n的阶乘
例如:cal(7)
计算7654321

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

5、编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果(升级题)
5.1.为题目3编写装饰器,实现缓存网页内容的功能:(升级题)
具体:实现下载的页面存放于文件中,如果网页有对应的缓存文件,就优先从文件中读取网页内容,否则,就去下载,然后存到文件中

6、给每个函数写一个记录日志的功能,
功能要求:每一次调用函数之前,要将函数名称,时间节点记录到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函数名称:{}\t\t时间节点:{}'.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)# 验证
hello()
my_name('wutiele')# 打开log.txt可以看到己生成下列两行记录函数名称:hello      时间节点:2018-04-02 19:04:05
函数名称:my_name    时间节点:2018-04-02 19:04:05

7、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。

答:

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标志位为False,以便接下来装饰的函数不用再进行认证。flag = Falseret = func(*args, **kwargs)return ret# 循环验证完毕之后再报验证失败else:print('验证失败')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)# 验证
hello()my_name('tiele')hello()# 效果:请输入用户名:test
请输入密码:234
验证失败            # 执行第一个函数验证失败,于是到第二个时又再进行认证
请输入用户名:伍天
请输入密码:123567
登录成功                # 第二个函数认证通过,接下来的第三个函数直接执行
my name is tiele
hello word,hello hero.  # 第三个函数直接执行了,不需要认证。

8,再编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。这个作业之上进行升级操作:
设置两套密码,一套为京东账号密码,一套为淘宝账号密码保存在文件中。
设置四个函数,分别代表 京东首页,京东超市,淘宝首页,淘宝超市。
循环打印四个选项:京东首页,京东超市,淘宝首页,淘宝超市。
供用户选择,用户输入选项后,执行该函数,四个函数都加上认证功能,只要登陆成功一次,在选择其他函数,后续都无需输入用户名和密码。
相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。

答:

def auth2(model):'''由于装饰器需带参数,故嵌套三层函数。: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标志位为False,以便接下来装饰的函数不用再进行认证。flag = Falseret = func(*args, **kwargs)return ret# 循环验证完毕之后再报验证失败else:print('验证失败')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标志位为False,以便接下来装饰的函数不用再进行认证。flag = Falseret = func(*args, **kwargs)return ret# 循环验证完毕之后再报验证失败else:print('验证失败')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

转载于:https://www.cnblogs.com/tielemao/p/8719180.html

铁乐学Python_day12_作业相关推荐

  1. 南京工业大学乐学python答案_铁乐学python_day09_作业

    练习题 1.整理函数相关知识点,写博客 2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素, 并将其作为新列表返回给调用者. def odd_index(l): lis = [] for ...

  2. 铁乐学python_Day42_锁和队列

    铁乐学python_Day42_锁和队列 例:多个线程抢占资源的情况 from threading import Thread import timedef work():global ntemp = ...

  3. 乐学python_【IT专家】铁乐学python

    铁乐学 python 2018/04/18 13 铁乐学 python_day23_ 面向对象进阶 1_ 反射 以下内容大部分摘自博客 cnblogs/Eva-J/ isinstance() 和 is ...

  4. 乐学python_铁乐学python_day01-作业

    第一题:使用while循环输入 1 2 3 4 5 6 8 9 10 # 使用while循环输入 1 2 3 4 5 6 8 9 10 count = 0 while (True) : count = ...

  5. 乐学python视频资源_铁乐学python_day04-作业

    1,写代码,有如下列表,按照要求实现每一个功能 li = ['alex', 'wusir', 'eric', 'rain', 'alex'] 计算列表的长度并输出 print(len(li)) 答:结 ...

  6. 铁乐学Python_day05-字典dict

    1.[字典dict] Python内置了字典:dict的支持,dict全称dictionary, 在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 字典和列表直观上 ...

  7. c语言乐学编程作业答案,信息乐学|浅谈C语言

    原标题:信息乐学|浅谈C语言 一大波C语言的干货正在靠近 刚刚成为大学生的小萌新们,经过两个多月的学习,你们对大学的多彩生活是否还满意?全新的学习方式你们是否还适应?然而,新鲜劲还没过,第一件让你们头 ...

  8. 铁乐学python_day03-作业

    1.有变量name = "aleX leNb" 完成如下操作: 移除name变量对应的值两边的空格,并输出处理结果 n1 = name.strip() print(n1) 结果:a ...

  9. 南京工业大学乐学python答案_铁乐学python_day01-作业

    第一题:使用while循环输入 1 2 3 4 5 6 8 9 10 # 使用while循环输入 1 2 3 4 5 6 8 9 10 count = 0 while (True) : count = ...

最新文章

  1. 如何使用SearchView过滤RecyclerView
  2. asp.net使用mysql教程_在C#程序中使用MYSQL数据库
  3. Scrum之 站立例会
  4. VMWare中CentOS系统不能上网的解决
  5. qt 编译mysql wince_Qt4.8.6开发WinCE 5.0环境搭建
  6. leetcode 149. Max Points on a Line |149. 直线上最多的点数(Java)
  7. python读取多个sheet文件_PythonPandas excel文件如何一次读取所有工作表,并再次写入多个工作表?,pythonpandasexcel,一次性,全部,sheet,重新...
  8. python分配红包程序_Python版微信红包分配算法
  9. 7.数据中台 --- 数据开发:数据体系建设
  10. 外排序 External sorting
  11. Python网速监控
  12. 移动端touch事件影响界面click/超链接事件无法点击
  13. xprivacy改IMEI
  14. Golang里的AES加密、解密
  15. PIC 1508 TIM1的定时器中断使用
  16. 元学习:实现通用人工智能的关键!
  17. anaconda安装dlib出现ImportError: libopenblas.so.0: cannot open shared object file***
  18. 如何批量输出条形码图片
  19. 【Python】什么是递归函数?
  20. 马薇薇论阴天期盼太阳

热门文章

  1. [转]Redhat EL5.4用CentOS源进行更新
  2. 面向任务的 Git 学习法
  3. Mac地址怎么做到全球唯一的?
  4. 如何使用 PTS 快速发起微服务压测
  5. 阿里云云原生应用平台总经理丁宇:“连接、合作、赋能”,携手加速器伙伴助力企业云上创新
  6. larvel mysql count,php – 模型中的Laravel计数函数,然后sortBy count()
  7. python import requests报错_import requests 出错,搜了很多,没解决,求教.
  8. Java程序转成exe可执行程序方法和exe4_j下载地址和破解。
  9. linux文件指令 例子,Linux 命令:文件目录操作与实例
  10. intel服务器ssd系列,英特尔发布S3710/S3610服务器SSD新品