路飞学城14天集训营作业3—购物车
作业需求:
数据结构: goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ...... ] 功能要求: 基础要求: 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 扩展需求: 1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 2、允许查询之前的消费记录
代码:
1 # -*- coding:utf-8 -*- 2 # author: heimu 3 4 import os,sys 5 import json 6 7 user_dic = {} # 保存账户信息 8 shopping_list = {} # 保存账户购物清单 9 salary_list = {} # 保存账户余额 10 11 goods = [ 12 {"name": "电脑", "price": 1999}, 13 {"name": "鼠标", "price": 10}, 14 {"name": "游艇", "price": 20}, 15 {"name": "美女", "price": 998}, 16 ] 17 18 def init_all(): 19 ''' 20 初始化 user_dic, shopping_list, salary_list 21 :return: 22 ''' 23 user_dic['heimu_1'] = '111111' 24 user_dic['heimu_2'] = '222222' 25 user_dic['heimu_3'] = '333333' 26 for key in user_dic.keys(): 27 shopping_list[key] = [] 28 salary_list[key] = 0 29 save_data() # 保存初始化的数据到本地文件 30 31 def save_data(): 32 ''' 33 保存数据到本地文件 34 :return: 35 ''' 36 with open("user_dic.txt",'w') as f: 37 json.dump(user_dic,f) 38 with open("shopping_list.txt",'w') as f: 39 json.dump(shopping_list,f) 40 with open("salary_list.txt",'w') as f: 41 json.dump(salary_list,f) 42 43 def download_data(): 44 ''' 45 从本地文件下载数据 46 :return: 47 ''' 48 with open("user_dic.txt",'r') as f: 49 user_dic = json.load(f) 50 with open("shopping_list.txt",'r') as f: 51 shopping_list = json.load(f) 52 with open("salary_list.txt",'r') as f: 53 salary_list = json.load(f) 54 return user_dic,shopping_list,salary_list 55 56 def inquire_salary(): 57 ''' 58 账户查询余额,高亮打印账户余额 59 :return: 60 ''' 61 print('\033[31;1m余额:%d\033[0m' % salary_list[user_name_input]) 62 63 def inquire_shopping_list(): 64 ''' 65 账户查询历史购物清单,打印历史购物清单 66 :return: 67 ''' 68 print("-----------------你的历史购物清单------------") 69 [print(shopping_list[user_name_input][i]) for i in range(len(shopping_list[user_name_input]))] 70 71 def exit_print(): 72 ''' 73 账户退出,打印购物清单和账户余额 74 :return: 75 ''' 76 print("----------------你的购物清单-------------") 77 [print(shopping_list[user_name_input][i]) for i in range(len(shopping_list[user_name_input]))] 78 print("-----------------你的账户余额------------") 79 print('\033[31;1m余额:%d\033[0m' % salary_list[user_name_input]) 80 81 def account_recharge(): 82 ''' 83 账户充值服务 84 :return: 85 ''' 86 recharge_number = input("请输入您要充值的金额:").strip() 87 while True: 88 if recharge_number.isdigit(): 89 salary_list[user_name_input]+=int(recharge_number) 90 break 91 else: 92 recharge_number = input("输入错误,请重新输入您要充值的金额").strip() 93 print("\033[31;1m充值成功,您的账户当前余额为%d\033[0m" % salary_list[user_name_input]) 94 95 def start_shopping(): 96 ''' 97 账户购物流程 98 :return: 99 ''' 100 while True: 101 print('-----------商品清单----------') 102 [print(goods[i]) for i in range(len(goods))] # 打印商品清单 103 104 choice_input = input("请输入你要购买的商品编号(1--4):").strip() 105 if choice_input.isdigit() and 1 <= int(choice_input) <= 4: 106 if goods[int(choice_input) - 1]['price'] <= salary_list[user_name_input]: # 余额充足 107 salary_list[user_name_input] -= goods[int(choice_input) - 1]['price'] # 更新账户的余额 108 shopping_list[user_name_input].append(goods[int(choice_input) - 1]) # 商品加入购物车,更新购物清单 109 print("商品----\033[31;1m[%s]\033[0m----已经加入购物车" % goods[int(choice_input) - 1]['name']) 110 while True: 111 exit_flag = input("退出请按e,继续请按g").strip() 112 if exit_flag.lower() == 'e': 113 save_data() # 退出保存数据 114 exit_print() # 退出打印 115 sys.exit() 116 elif exit_flag.lower() == 'g': 117 break 118 else: 119 print('输入错误,请重新输入') 120 121 else: # 账户余额不足 122 while True: 123 print("您的账户当前余额为:\033[31;1m%d\033[0m" % salary_list[user_name_input]) 124 choose_user = input("您的账户余额不足,充值选择c,退出选择q").strip() 125 if choose_user.lower() == 'q': 126 save_data() # 退出保存数据 127 exit_print() # 退出打印 128 sys.exit() 129 elif choose_user.lower() == 'c': 130 account_recharge() 131 break 132 else: 133 print("输入错误,请重新输入") 134 else: 135 print("输入错误,请重新输入") 136 137 if os.path.isfile("user_dic.txt") and os.path.isfile("shopping_list.txt") and os.path.isfile("salary_list.txt"): 138 # 如果本地数据文件存在,从本地文件倒数数据 139 print('------------导入数据库----------') 140 user_dic, shopping_list, salary_list = download_data() 141 else: 142 # 本地数据文件不存在,初始化数据 143 print("-----------初始化数据----------") 144 init_all() 145 146 while True: 147 user_name_input = input("请输入账号:").strip() 148 pass_words_name = input("请输入密码:").strip() 149 150 if user_name_input in user_dic and pass_words_name == user_dic[user_name_input]: 151 if not shopping_list[user_name_input]: # 如果账户的历史购物清单为空,那么为第一次登陆 152 salary_input = input("您是第一次登陆,请输入工资:").strip() 153 salary_list[user_name_input] = int(salary_input) # 更新账户余额 154 print('\033[31;1m余额:%d\033[0m' % salary_list[user_name_input]) 155 start_shopping() # 开始购物 156 else: 157 print('您以前有过消费记录') 158 while True: 159 choose_user = input("查询消费记录请按c,查询余额请按i,继续购物请按g,退出请按e").strip() 160 if choose_user.lower() == 'c': 161 inquire_shopping_list() # 查询消费记录 162 elif choose_user.lower() == 'i': 163 inquire_salary() # 查询余额 164 elif choose_user.lower() == 'e': 165 save_data() # 退出保存数据 166 exit_print() # 退出打印 167 sys.exit() 168 elif choose_user.lower() == 'g': 169 start_shopping() # 继续购物 170 else: 171 print("输入错误,请重新输入") 172 else: 173 print("该账户不存在,请重新输入")