zoukankan      html  css  js  c++  java
  • 路飞学城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
  • 相关阅读:
    chrome/edge 自签名证书造成浏览器无法访问
    linux 下 取进程占用内存(MEM)最高的前10个进程
    总结记录一下我对YZ数据中台指标相关平台的理解感悟与思考
    史上最全之微信群发拼手气红包测试用例
    vue使用filterBy,orderBy实现搜索筛选功能
    前端处理防抖和节流
    箭头函数()=>{}与function的区别
    html不用任何控件上传文件
    Java必备知识--线程池
    Java必备知识--日志框架
  • 原文地址:https://www.cnblogs.com/heimu24/p/8613071.html
Copyright © 2011-2022 走看看