'''练习题:''' '''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