day03-函数基础

'''练习题:'''

'''1. 文件a1.txt内容

序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},......]'''

# list_result = []
# f = open("a1.txt", encoding="utf-8")
# list_head = f.readline().strip().split()
# for line in f:
# dic = {}
# list_content = line.strip().split()
# for i in range(len(list_head)):
# if i == 2 or i == 3:
# dic[list_head[i]] = int(list_content[i])
# else:
# dic[list_head[i]] = list_content[i]
# list_result.append(dic)
# f.close()
# print(list_result)

'''2. 传入函数的字符串中,[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。'''
# def my_type_count(content):
# count_digit = 0
# count_alpha = 0
# count_space = 0
# count_other = 0
# for i in content:
# if i.isdigit():
# count_digit += 1
# elif i.isalpha():
# count_alpha += 1
# elif i.isspace():
# count_space += 1
# else:
# count_other += 1
# print("输入内容中包含数字{}个,字母{}个,空格{}个,其它{}个".format(count_digit, count_alpha, count_space, count_other))
# content = input("请输入您想统计的内容: ")
# my_type_count(content)

'''3. 写函数,接收两个数字参数,返回比较大的那个数字。'''
# def my_max(x, y):
# return x if x > y else y
# print(my_max(30, 20))

'''4. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表'''
# def check_dic_len(dic):
# for k,v in dic.items():
# if len(v) > 2:
# dic[k] = v[:2]
# print(dic)
# dic = {"name":"elisun", 'li':[1,2,3,4]}
# check_dic_len(dic)

'''5. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如
传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。'''
# def ret_dic(lis):
# if type(lis) != list:
# return "请传入列表类型"
# dic = {}
# for i in lis:
# dic[lis.index(i)] = i
# print(dic)
# ret_dic([11, 22, 33])

'''6. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追
加到一个student_msg文件中。'''

# def info_table(name, sex, age, edu):
# with open("info_table.txt", encoding="utf-8", mode="a") as f:
# info_format = "\t".join([name, sex, age, edu])
# f.write(info_format+"\n")
#
# name = input("姓名: ")
# sex = input("性别: ")
# age = input("年龄: ")
# edu = input("学历: ")
#
# info_table(name, sex, age, edu)


'''7. 对第6题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。'''


# def info_table(name, age, edu, sex="男"):
# with open("info_table.txt", encoding="utf-8", mode="a") as f:
# info_format = "\t".join([name, sex, age, edu])
# f.write(info_format + "\n")
#
# while 1:
# opt = input("回车输入个人信息,输入Q或者q退出: ")
# if opt.upper() == "Q":
# break
# else:
# name = input("姓名: ").strip()
# sex = input("性别(不输入时默认为'男'): ").strip()
# age = input("年龄: ").strip()
# edu = input("学历: ").strip()
# if name == "" or age == "" or edu == "":
# print("都是必填项,有未填信息,请重新输入")
# continue
# if sex == "":
# info_table(name, age, edu)
# else:
# info_table(name, sex, age, edu)


'''8. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。'''
# def replace_content():
# filename = input("请输入要修改的文件名: ")
# content = input("要修改的内容: ")
# content_new = input("替换成新的内容: ")
#
# import os
# with open(filename, encoding='utf-8') as f1, \
# open("temp.txt", encoding='utf-8', mode='w') as f2:
# for line in f1:
# new_line = line.replace(content, content_new)
# f2.write(new_line)
# os.remove(filename)
# os.rename("temp.txt", filename)
# replace_content()


'''9. 读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
a=10
b=20
def test5(a,b):
a=3
b=5
print(a,b)
c = test5(b,a)
print(c)'''
# a是3,b是5,c是None。
# 因为执行函数时a,b在函数内部有定义,所以优先取局部空间的值。c为调用函数后得到的返回值,而该函数没有定义返回值,所以为默认值None。


'''10. 写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),将每个实参的每个元素依次添加到函数的动态参数args里面.
# 例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)'''
# def args(*args):
# print(args)
# args(*[1,2,3],*(22,33))


'''11. 写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs里面.
例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}'''
# def dic(**kwargs):
# print(kwargs)
# dic(**{'name':'alex'}, **{'age':1000})

'''12. 下面代码成立么?如果不成立为什么报错?怎么解决?
题目一:
a = 2
def wrapper():
print(a)
wrapper()

题目二:
a = 2
def wrapper():
a += 1
print(a)
wrapper()
题目三:
def wrapper():
a = 1
def inner():
print(a)
inner()
wrapper()
题目四:
def wrapper():
a = 1
def inner():
a += 1
print(a)
inner()
wrapper()'''

# 题目一:成立。

# 题目二:不成立。因为wrapper函数内有赋值a=a+1,所以调用该函数时a被认为是wrapper内部变量,但是在计算右边的a+1时发现a没在wapper内被定义,所以报错。
# 在函数内部使用global关键字声明变量a为全局变量。

# 题目三:成立。

# 题目四:不成立。因为inner函数内有赋值a=a+1,所以当该函数被调用时a被认为是inner内部变量,而计算a+1时又发现a没在inner内部被定义,所以报错。
# 在inner内部使用关键字nonlocal声明a,来引用非全局的父级变量。


'''13. 写函数,接收两个数字参数,将较小的数字返回.'''
# def min(x, y):
# return x if x < y else y
# print(min(100, 10))

'''14. 写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.
例如 传入的可迭代对象为[1,'老男孩','武sir']返回的结果为’1_老男孩_武sir’'''
# def str_join(*args):
# return "_".join('%s' %i for i in args)
# ret=str_join(*[1,'老男孩','武sir'])
# print(ret)


'''15. 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)'''
# def max_min(*args):
# dic = {}
# dic[max(args)] = "最大值"
# dic[min(args)] = "最小值"
# return dic
# ret = max_min(2,5,7,8,4,100,200,-1)
# print(ret)
#
'''16. 写函数,传入一个参数n,返回n的阶乘
# 例如:cal(7) 计算7*6*5*4*3*2*1'''
# def cal(num):
# if num >= 0:
# sum = 1
# for i in range(1,num+1):
# sum *= i
# print(sum)
# else:
# print("负数没有阶乘")
# cal(7)


'''17. 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]'''
# def poker():
# poker_list = []
# color = ["黑桃", "红心", "草花", "方块"]
# j_k = ["J", "Q", "K"]
# for col in color:
# poker_list.append((col, "A"))
# for num in range(2, 11):
# for col in color:
# poker_list.append((col, num))
# for a in j_k:
# for col in color:
# poker_list.append((col, a))
# print(poker_list)
#
# poker()

'''18. 有如下函数:
def wrapper():
def inner():
print(666)
wrapper()

你可以任意添加代码,用两种或以上的方法,执行inner函数.'''

#第一种:
# def wrapper():
# def inner():
# print(666)
# inner()
# wrapper()

#第二种:
# def wrapper():
# def inner():
# print(666)
# return inner
# ret = wrapper()
# ret()


'''作业:
用函数完成登录注册以及购物车的功能。
1,启动程序,用户可选择四个选项:登录,注册,购物,退出。
2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中。
3,用户登录,用户名密码从文件中读取,进行三次验证,验证不成功则退出整个程序。
4,用户登录成功之后才能选择购物功能进行购物,购物功能(就是将购物车封装到购物的函数中)。
5,退出则是退出整个程序。'''

# # 登录
# def login():
# dic = {}
# count = 3
# with open("user_auth.txt", encoding="utf-8", mode="r") as f:
# for i in f:
# l = i.strip().split(" ")
# dic[l[0]] = l[1]
# while count > 0:
# username = input("请输入账户名: ")
# password = input("请输入密码: ")
# if username in dic and password == dic[username]:
# global login_session
# login_session = 1 #将登录状态置为非0,表示已登录
# print("登录成功,可以开始购物了")
# return shopping()
# elif username not in dic: #用户名不存在则跳到注册页
# print("用户名不存在,请注册账户")
# return register()
# else:
# count -= 1
# if count == 0:
# print("错误次数过多,锁定60分钟")
# else:
# print("用户名或密码错误,还能尝试" + str(count) + "次")
#
# # 注册
# def register():
# while 1:
# username = input("请输入您要注册的用户名: ")
# password = input("请输入您的注册密码: ")
# s = username + " " + password
# with open("user_auth.txt", encoding="utf-8", mode="r+") as f:
# for line in f:
# l = line.split(" ")
# if username == l[0]:
# print("用户名已存在: ")
# break
# else:
# f.write(s+"\n")
# print("注册成功")
# break
#
#
# # 购物
# def shopping():
# # 商品信息
# goods = {"1":{"name":"电脑", "price":1999},
# "2":{'name':"鼠标", 'price':50},
# "3":{'name':"键盘", 'price':100}
# }
#
# # 购物车
# shopping_cart = {}
#
# # 判断是否已登录
# global login_session
# if login_session == 0:
# print("请先登录账号")
# return login() #未登录时跳向登录页
#
# # 充值金额判断
# while 1:
# money = input("请输入您要充值的金额: ")
# if money.isdigit():
# print("充值成功,账户现存金额%s" % money)
# break
# else:
# print("非法字符,请重新输入")
#
# while True:
# for i in goods:
# print(i, goods[i]["name"], goods[i]["price"])
# num = input("请输入您要购买的商品编号或者输入n结算或者按Q(q)退出: ")
# if num in goods:
# count = shopping_cart.setdefault(num,0)
# shopping_cart[num] = count + 1
#
# elif num == "n":
# print("开始结算")
# consum_money = 0
# for a in shopping_cart:
# consum_money += goods[a]["price"]*shopping_cart[a] # 计算消费总额
# if consum_money > int(money):
# for i in shopping_cart:
# print(i, goods[i]['name'], shopping_cart[i], goods[i]['price'])
# del_num = input("余额不足,请选择要删除多余的商品编号:")
# if del_num in shopping_cart:
# shopping_cart[del_num] = shopping_cart[del_num] - 1 #减少商品
# if shopping_cart[del_num] == 0:
# shopping_cart.pop(del_num)
# else:
# print("本次消费记录如下")
# for i in shopping_cart:
# print(goods[i]['name'], shopping_cart[i], goods[i]['price'])
# surplus_money = int(money) - consum_money # 计算余额
# print("此次共消费%s,账户余额%s" % (consum_money, surplus_money))
# break
# elif num.lower() == "q":
# print("欢迎下次光临")
# break
#
# else:
# print("您输入的商品不存在")
# continue
# # 退出
# def f_quit():
# print("欢迎下次光临")
# def main():
# opt = input("请输入您的选项: A:登录 | B:注册 | C:购物 | D:退出: ")
# if opt == "A":
# login()
# elif opt == "B":
# register()
# elif opt == "C":
# shopping()
# elif opt == "D":
# f_quit()
# else:
# print("选择有误")
#
# login_session = 0 #定义登录状态,0为未登录,非0为已登录。
# main()

---------用户文件内容----------

     #cat user_auth.txt

elisun 123
zhangsan 123
lisi 456

猜你喜欢

转载自www.cnblogs.com/elisun/p/9910226.html
今日推荐