day3-exercise
# Author: 刘佳赐-Isabelle October 28,2018 """ 1. 文件a1.txt内容 序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linux 26 30 没对象 3 运营部 20 24 女生多 ....... 通过代码,将其构建成这种数据类型: [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},......] """ # with open("a1.txt", "w", encoding="utf-8") as f1: # message = """ # 序号 部门 人数 平均年龄 备注 # 1 python 30 26 单身狗 # 2 Linux 26 30 没对象 # 3 运营部 20 24 女生多 # """ # f1.write(message) # # with open("a1.txt", "r", encoding="utf-8") as f2: # lis = [] # line_num = 0 # for line in f2: # if len(line.strip()) > 0: # lis.append(line.strip().split()) # line_num += 1 # # result = [] # for i in range(1, line_num): # dic = {} # for j in lis[0]: # dic[j] = lis[i][lis[0].index(j)] # result.append(dic) # print(result) """ 2. 传入函数的字符串中,[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。 """ # def func2(a=str): # num = 0 # alpha = 0 # nul = 0 # other = 0 # for i in a: # if i.isdigit(): # num += 1 # elif i.isalpha(): # alpha += 1 # elif i == " ": # nul += 1 # else: # other += 1 # return num, alpha, nul, other # # # message = input("请输入信息:") # print(func2(message)) """ 3. 写函数,接收两个数字参数,返回比较大的那个数字。 """ # def func3(a, b): return a if a > b else b # print(func3(2, 3)) """ 4. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。 dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字符串或列表 """ # def func4(dic): # for keys in dic: # if len(dic[keys]) > 2: # dic[keys] = dic[keys][:2] # return dic # # # dic_check = {"k1": "v1v1", "k2": [11, 22, 33, 44]} # print(func4(dic_check)) """ 5. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典, 此字典的键值对为此列表的索引及对应的元素。 例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。 """ # enumerate函数 # def func5(a=[]): # result = {} # for index, name in enumerate(a, 0): # result[index] = name # return result # # # lis = [11, 22, 33] # print(func5(lis)) # for 循环法 # def func5(args=[]): # result = {} # for i in args: # result.setdefault(args.index(i), i) # return result # # # test = [11, 22, 33] # print(func5(test)) """ 6. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容, 然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。 """ # def func6(name, gender, age, degree): # with open("student_msg", "a", encoding="utf-8") as f1: # f1.write("{} {} {} {}\n".format(name, gender, age, degree)) # # # name = input("请输入姓名:") # gender = input("请输入性别:") # age = input("请输入年龄:") # degree = input("请输入学历:") # func6(name, gender, age, degree) """ 7. 对第6题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。 """ # def func6(name, age, degree, gender="男"): # with open("student_msg", "a", encoding="utf-8") as f1: # f1.write("{} {} {} {}\n".format(name, age, gender, degree)) # # while 1: # name = input("请输入姓名(Q/q退出):") # if name.upper() == "Q": break # else: # age = input("请输入年龄:") # degree = input("请输入学历:") # # if name.startswith("1"): # gender = input("请输入性别:") # func6(name.strip("1").strip(" "), age, degree, gender) # else: # func6(name, age, degree) """ 8. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。 读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么? a=10 b=20 def test5(a,b): print(a,b) c = test5(b,a) print(c) """ # def func8(file_path, gender): # with open(file_path, mode="r+", encoding="utf-8") as file: # f1 = file.read() # f1.replace(gender, "Male") # # func8("student_msg", "男") # 打印出来的值a,b,c分别是:20,10,None # 因为test5按顺序打印输入的b(20), a(10), 且函数test5没有任何返回值 # a = 10 # b = 20 # def test5(a, b): # print(a, b) # c = test5(b, a) # print(c) """ 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,b,c分别是:3,5,None # 因为test5给a/b分别赋值为3/5,且函数没有任何返回值 # a = 10 # b = 20 # # # def test5(a, b): # a = 3 # b = 5 # print(a, b) # # # c = test5(b, a) # print(c) """ 10. 写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),将每个实参的每个元素依次添加到函数的动态参数args里面. 例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33) """ # # # def func10(*args): # return args # # # l1 = [1, 2, 3] # t1 = (22, 33) # # print(func10(*l1, *t1)) """ 11. 写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs里面. 例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000} """ # # def func11(**kwargs): # return kwargs # # # dic1 = {"name": "alex"} # dic2 = {"age": 1000} # print(func11(**dic1, **dic2)) """ 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() """ # 题目一:成立 # 题目二:不成立,函数不可以修改全局变量 # a = 2 # def wrapper(): # global a # a += 1 # print(a) # wrapper() # 题目三:成立 # 题目四:不成立 # def wrapper(): # a = 1 # def inner(): # nonlocal a # a += 1 # print(a) # inner() # wrapper() """ 13. 写函数,接收两个数字参数,将较小的数字返回. """ # def func13(a, b): return a if a < b else b # # # a = input("please input a:") # b = input("please input b:") # result = func13(a, b) # print(result) """ 14. 写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回. 例如 传入的可迭代对象为[1,'老男孩','武sir']返回的结果为’1_老男孩_武sir’ """ # def func14(lis): # for item in lis: # lis[lis.index(item)] = str(item) # return "_".join(lis) # # li = [1, "老男孩", "武sir"] # print(func14(li)) """ 15. 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值} 例如:如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数) """ # # def func15(*args): # result = {} # result["max"] = max(args) # result["min"] = min(args) # return result # # res = func15(2, 5, 7, 8, 4) # print(res) # """ 16. 写函数,传入一个参数n,返回n的阶乘 例如:cal(7) 计算7*6*5*4*3*2*1 """ # def func16(a=int): # result = a # while 1: # if a > 1: # a -= 1 # result = result * a # else: # break # return result # # print(func16(6)) # """ 17. 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组 例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)] """ # def func17(l1, l2): # result = [] # for suit in l1: # for num in l2: # result.append((suit, num)) # return result # # # lis1 = ["红心", "草花", "方片", "黑桃"] # lis2 = [] # for i in range(2, 14, 1): # lis2.append(i) # lis2.append("A") # print(func17(lis1, lis2)) """ 18. 有如下函数: def wrapper(): def inner(): print(666) wrapper() 你可以任意添加代码,用两种或以上的方法,执行inner函数. """ # 方法1 # def wrapper(): # def inner(): # print(666) # inner() # # wrapper() # 方法2 # # def wrapper(): # def inner(): # print(666) # return inner() # wrapper() """ 购物车进阶 1,启动程序,用户可选择四个选项:登录,注册,购物,退出。 2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中。 3,用户登录,用户名密码从文件中读取,进行三次验证,验证不成功则退出整个程序。 4,用户登录成功之后才能选择购物功能进行购物,购物功能(就是将购物车封装到购物的函数中)。 5,退出则是退出整个程序。 """ # # def register(): # username = input("Please set your username:") # username_check = [] # with open("userbook", "r+", encoding="utf-8") as file: # for line in file: # username_check.append(line.strip().split()[0]) # while 1: # if username not in username_check: # password = input("Please set your password:") # file.write("{} {}\n".format(username, password)) # print("Successfully registered! Please login!") # break # elif username in username_check: # print("Username has been taken, please reset your username!!") # username = input("Please set your username again:") # return login() # # # def login(): # times = 0 # username = input("Please input your username:") # password = input("Please input your password:") # user_info = [username, password] # check_list = [] # with open("userbook", "r", encoding="utf-8") as file: # for line in file: # check_list.append(line.strip().split()) # while 1: # if user_info in check_list: # print("Login successfully! You could start shopping!") # return shopping() # elif user_info not in check_list and times < 2: # print("Incorrect user name or password, left %d times!" % (2-times)) # username = input("Please input username again:") # password = input("Please input password again:") # user_info = [username, password] # times += 1 # elif user_info not in check_list and times >= 2: # print("Failed for three times!! You account has been locked!") # break # # # def shopping(): # message = """ # 1 电脑 1999 # 2 鼠标 10 # 3 耳机 388 # n 购物车结算 # """ # # item_dic = {1: "电脑", 2: "鼠标", 3: "耳机"} # 创建商品名称字典 # price_dic = {1: 1999, 2: 10, 3: 388} # 创建商品价格字典 # # # 依据商品名称字典创建购物车商品名称与商品数量字典 # item_num_dic = {} # for i in range(len(item_dic.keys())): # defaul_num = [0] * len(item_dic.keys()) # item_num_dic.setdefault(list(item_dic.values())[i], defaul_num[i]) # # total_budget = 0.0 # 购物车商品总计金额 # item_name = [] # 购物车商品名称列表 # # my_purse = input("请输入存入金额:") # print(message) # item_num = input("请输入需要购买商品的编号:") # # while 1: # if item_num == "n": # if total_budget <= float(my_purse): # print("已购买商品:") # for i in range(len(item_name)): # print("{}{} {} {}".format(str(i + 1), ".", item_name[i], str(item_num_dic[item_name[i]]))) # # print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]])) # print("总计:%f" % total_budget) # print("余额:%f" % (float(my_purse) - total_budget)) # break # else: # del_item = input("已超预算,请删减购物车产品:") # # 当输入编号有效、超出预算且该商品购物车数量为1时,购物列表删掉该商品、商品数量减1、预算减去相应商品价格 # if item_dic[int(del_item)] in item_name and total_budget > float(my_purse) and \ # item_num_dic[item_dic[int(del_item)]] == 1: # item_num_dic[item_dic[int(del_item)]] -= 1 # total_budget -= price_dic[int(del_item)] # item_name.pop(int(del_item) - 1) # # 当输入编号有效、超出预算且该商品购物车数量大于1时,购物列表不变、对应商品数量减1、预算减去相应商品价格 # elif item_dic[int(del_item)] in item_name and total_budget > float(my_purse) and \ # item_num_dic[item_dic[int(del_item)]] > 1: # item_num_dic[item_dic[int(del_item)]] -= 1 # total_budget -= price_dic[int(del_item)] # # 特殊情况:当输入参数无效时,提示重新输入 # elif item_dic[int(del_item)] not in item_name: # del_item = input("内容有误,请重新输入:") # elif item_num in str(item_dic.keys()): # message1 = """---%s已添加到您的购物车,单价为%.2f---""" % (item_dic[int(item_num)], price_dic[int(item_num)]) # print(message1) # if item_dic[int(item_num)] in item_name: # item_num_dic[item_dic[int(item_num)]] += 1 # 若已有该产品,则只增加该产品购买数量 # else: # item_name.append(item_dic[int(item_num)]) # 若没有该产品,则将该产品添加到购买列表 # item_num_dic[item_dic[int(item_num)]] += 1 # 同时增加产品购买数量 # total_budget += price_dic[int(item_num)] # 累计消费额 # item_num = input("请继续输入商品编号:") # 继续购买 # elif item_num.upper() == "Q": # print("已购买商品:") # for i in range(len(item_name)): # print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]])) # print("总计:%f" % total_budget) # print("余额:%f" % (float(my_purse) - total_budget)) # break # else: # item_num = input("输入有误,请重新选择:") # # # if __name__ == '__main__': # message = input("Please select your command(R/L):") # if message.upper() == "R": # register() # elif message.upper() == "L": # login() # else: # message = input("Incorrect input, please reselect your command(R/L):")