路飞学城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('33[31;1m余额:%d33[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('33[31;1m余额:%d33[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("33[31;1m充值成功,您的账户当前余额为%d33[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("商品----33[31;1m[%s]33[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("您的账户当前余额为:33[31;1m%d33[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('33[31;1m余额:%d33[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("该账户不存在,请重新输入")
View Code
原文地址:https://www.cnblogs.com/heimu24/p/8613071.html