python语言程序设计作业

编程入门 行业动态 更新时间:2024-10-11 03:23:26

python语言程序设计<a href=https://www.elefans.com/category/jswz/34/1771149.html style=作业"/>

python语言程序设计作业

1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组

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

def poker():

suit = ["红心", "梅花", "黑桃", "方片"]

count = [i for i in range(2, 11)]

king = ["J", "Q", "K", "A"]

poker_list = count + king

li = []

for key in suit:

for value in poker_list:

li.append((key, value))

return li

print(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 dic

print(min_max(2))

3.写函数,专门计算图形的面积

其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积

调用函数area("圆形’,圆半径) 返回圆的面积

调用函数area("正方形’,边长) 返回正方形的面积

调用函数area("长方形’,长,宽) 返回长方形的面积

答:

# 感觉本题考的主要是嵌套函数内的参数传递,先从最内函数去倒推会容易得到答案。

def area(patter, *args):

if patter == "长方形":

# 计算长方形面积

def rectangle(a, b):

S = a * b

return S

return rectangle(*args)

if patter == "正方形":

# 计算正方形面积

def quadrate(a):

S = a * a

return S

return quadrate(*args)

if patter == "圆形":

# 计算圆形面积

def roundness(r):

S = 3.14 * r * r

return S

return 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 * b

return S

# 计算正方形面积

def quadrate(a):

S = a * a

return S

# 计算圆形面积

def roundness(r):

S = 3.14 * r * r

return S

if 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 1

return 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 time

def 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(" 函数名称:{} 时间节点:{}".format(name, timesession))

ret = func(*args, **kwargs)

return ret

return 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):

# 引入全局变量flag

global flag

if 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 = False

ret = func(*args, **kwargs)

return ret

# 循环验证完毕之后再报验证失败

else:

print("验证失败")

return

else:

ret = func(*args, **kwargs)

return ret

return inner

flag = 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):

# 引入全局变量flag

global flag

if 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 = False

ret = func(*args, **kwargs)

return ret

# 循环验证完毕之后再报验证失败

else:

print("验证失败")

return

elif 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 = False

ret = func(*args, **kwargs)

return ret

# 循环验证完毕之后再报验证失败

else:

print("验证失败")

return

else:

ret = func(*args, **kwargs)

return ret

return inner

return auth

flag = 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":

break

elif sn == "1":

JD_index()

elif sn == "2":

JD_supermark()

elif sn == "3":

TB_index()

elif sn == "4":

TB_supermark()

else:

print("你的选择有误,请重新选择:")

continue

更多推荐

python语言程序设计作业

本文发布于:2024-02-11 16:09:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681931.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作业   语言程序设计   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!