1. 程式人生 > >python自動化-作業2——A+

python自動化-作業2——A+

作者:郭剛志
內容: 完美購物車
1.0版完成時間:2018/12/8
功能簡介:
    1、有兩種模式:採購模式、查詢模式
    2、多使用者,可充值,採購數量可選
    3、可分級檢視商品
    4、可查選當前的購買性息,可查詢之前的購買記錄
    5、支援商品層級、種類擴充套件


import time
import json

# user = [                            # 所有使用者
#     {
#         'username': 'nb',           # 使用者名稱
#         'password': '123',          # 密碼
#         
'salary': 0, # 工資 # 'remainder': 0, # 餘額 # 'wares': { # 本次購買的商品 # # 'wares_name':['num','time'] # 名稱:[數量,購買時間] # }, # 'start_login':False # 第一次登入 # 'Records_of_consumption':{ # 消費記錄 # #
'time':['num','wares_name'] # 購買時間:[數量,名稱] # } # }, # ] goods = { #所有貨物分級 '家電類':{ '海爾':{ '海爾最新款電視':2200, '海爾最新款冰箱':5200, '海爾最新款洗衣機':3600 }, '美的':{ '美的最新款電視': 2100, '美的最新款冰箱
': 5100, '美的最新款洗衣機': 3200 } }, '衣服類':{ '優衣庫':{ '優衣庫最新款外衣':380, '優衣庫最新款褲子':450, '優衣庫最新款鞋子':500 }, '七匹狼':{ '優衣庫最新款外衣': 390, '優衣庫最新款褲子': 420, '優衣庫最新款鞋子': 400 } }, '手機類':{ '魅族 ΜⅢ':3000, '小米 ΧⅤ':2999, '華為 ΗⅥ':4000, '中興 ΖⅣ':2600 }, '車類':{ '寶馬 Χ叄':300000, '賓士 Β陸':150000, '特斯拉 ВЕ':130000 } } login_flog = False # 登入標誌 end_layer_flog = False # 商品選單最後一層標誌 exit_flog = False # 使用者按q鍵退出購物車標誌 stop_flog = False # 使用者按b鍵停止購買標誌 tamp_item = None # 存放單個使用者性息 goods_list = [goods] # 陣列的最末尾元素存放當前層級商品類 goods_tamp = None # 存放單個字典 if __name__ == '__main__': print('歡迎來到購物車網上商城'.center(100,'-')) while True: user = json.load(open('userdata','r')) in_user = input('請輸入您的賬號:\n>>>') if in_user == 'q': # 退出 exit_flog = True exit('您已經退出'.center(100,'-')) in_password = input('請輸入您的密碼:\n>>>') if in_password == 'q': # 退出 exit_flog = True exit('您已經退出'.center(100,'-')) for i in user: if in_user == i.get('username') and in_password == i.get('password'): login_flog = True print('登入成功!'.center(40,'-')) tamp_item = i # tamp_item存放登入賬戶的所有資訊字典 tamp_item['wares'] = {} # 拿購物車 break if login_flog: # 已登入 if tamp_item.get('start_login') is False: # 判斷是第一次登入要輸入工資 in_salary = input('請輸入您的工資:\n>>>') tamp_item['salary'] = int(in_salary) # 把工資存到賬戶資訊字典 tamp_item['remainder'] = tamp_item['salary'] # 把工資賦值給餘額 tamp_item['start_login'] = True # 標誌位置位 print('你現在的賬戶餘額為:【{}】'.format(tamp_item.get('salary'))) while True: goods_list = [goods] while True: print('請選擇您需要的商品序號:') type_value = [*goods_list[-1].values()][0] if type(type_value) == int: # 判斷是商品列表中是最後一層 加¥價格 for index,i in enumerate(goods_list[-1]): print('{}.{: <10} ¥{}'.format(str(index+1),i,[*goods_list[-1].values()][index])) else: # 不是最後一層 for index,key in enumerate(goods_list[-1]): print('{}.{}'.format(str(index+1),key)) in_goods_class = input('你選擇的商品序號是(b.進入使用者性息查詢、c.充值、q.退出商城):>>>') if in_goods_class =='q': # 退出 exit_flog = True break if in_goods_class == 'b': # 停止購買 stop_flog = True break if in_goods_class == 'c': # 充值 money = input('請輸入您要充值的金額:>>>') if money.isdigit(): tamp_item['remainder'] += int(money) print('錢已到賬,您現在的賬戶餘額是:【{}】'.format(tamp_item['remainder'])) break else: print('輸入錯誤,請重新選擇購買商品或充值!'.center(40,'-')) break if in_goods_class.isdigit(): in_goods_class=int(in_goods_class) else: print('輸入錯誤,請重新輸入您要的商品序號!'.center(20,'-')) if in_goods_class in list(range(1,len(goods_list[-1])+1)): # 是否有這個商品類 select_goods_class = [*goods_list[-1].values()][in_goods_class-1] # select_goods_class是所選擇的字典的值 select_goods_keys = [*goods_list[-1].keys()][in_goods_class-1] # select_goods_class是所選擇的字典的鍵 goods_list.append(select_goods_class) # 壓棧 if (type(select_goods_class) == int): # 值是數字,說明是(最後層) end_layer_flog = True in_num = input('請輸入購買數量(b.進入使用者性息查詢、q.退出商城):>>>') if in_num == 'q': # 退出 exit_flog = True break if in_num == 'b': # 停止購買 stop_flog = True break if in_num == 'c': # 充值 money = input('請輸入您要充值的金額:>>>') if money.isdigit(): tamp_item['remainder'] += int(money) print('錢已到賬,您現在的賬戶餘額是:【{}】'.format(tamp_item['remainder'])) break else: print('輸入錯誤,請重新選擇購買商品或充值!'.center(40,'-')) break in_num = int(in_num) if tamp_item['remainder'] >= select_goods_class*in_num: #判斷是否買得起 tamp_item['remainder'] -= select_goods_class*in_num #買了 print('購買成功'.center(50,'-')) else: print('您的餘額已不足,請及時充值!'.center(40,'-')) break time_obj = time.localtime() # 購買時間戳 time_str = '{}-{}-{} {}:{}:{}'.format( time_obj.tm_year, time_obj.tm_mon, time_obj.tm_mday, time_obj.tm_hour, time_obj.tm_min, time_obj.tm_sec) if select_goods_keys in tamp_item['wares'].keys(): select_value_num = tamp_item['wares'][select_goods_keys][0]+in_num # 如果有同樣的商品和之前的購買數量相加 else: select_value_num = in_num tamp_item['wares'][select_goods_keys] = [select_value_num,time_str] # 存入使用者商品名稱、數量、時間戳到使用者賬戶 break while stop_flog: # 查詢模式 print('請選擇你要查詢的內容:\n1.您當前的餘額\n2.您的購物車(已付款)\n3.您的購買記錄') in_find_num = input('請輸入你要查詢的內容(b.採購商品、c.充值、q.退出):>>>') if in_find_num == '1': # 檢視當前使用者餘額 while True: is_not_money = input('您當前的餘額為:【{}】,是否充值(c.充值、任意鍵.退出):>>>'.format(tamp_item['remainder'])) if is_not_money == 'c': money = input('請輸入您要充值的金額:>>>') if money.isdigit(): tamp_item['remainder'] += int(money) print('錢已到賬,您現在的賬戶餘額是:【{}】'.format(tamp_item['remainder'])) break else: print('輸入錯誤,請重新選擇購買商品或充值:') break else: print('已退出充值'.center(50,'-')) break elif in_find_num == '2': # 檢視你現在購買的商品 print('您的購買清單'.center(100, '-')) print('序號 名稱 數量 日期') tamp_tamp = tamp_item.get('wares') for num, i in enumerate(tamp_tamp.items()): print('{: <3} {: <15}{: <3} {}'.format(num + 1, i[0], i[1][0], i[1][1])) print('-' * 106) elif in_find_num == '3': # 檢視登入賬戶所有的購買記錄 print('您的購買記錄'.center(100, '-')) for w_name, w_value in tamp_item['wares'].items(): # 購買時間/購買商品名稱 在字典中的位置互換 tamp_item['Records_of_consumption'].update({w_value[1]: [w_value[0], w_name]}) # 儲存到 購買記錄 print('序號 購買時間 數量 商品名稱') for num, i in enumerate(tamp_item['Records_of_consumption'].items()): print('{: <3} {: <20} {: <3} {}'.format(num + 1, i[0], i[1][0], i[1][1])) json.dump(user, open('userdata', 'w')) # 將使用者資料儲存到userdata檔案 print('-' * 106) elif in_find_num == 'b': # 退出查詢模式,進入購買模式 stop_flog = False break elif in_find_num == 'q': # 退出購物車 stop_flog = False exit_flog = True break elif in_find_num == 'c': # 充值 money = input('請輸入您要充值的金額:>>>') if money.isdigit(): tamp_item['remainder'] += int(money) print('錢已到賬,您現在的賬戶餘額是:【{}】'.format(tamp_item['remainder'])) break else: print('輸入錯誤,請重新選擇購買商品或充值:'.center(40, '-')) break else: print('您的輸入有誤,請重新輸入'.center(40,'-')) if exit_flog: break if exit_flog: break else : print('帳號/密碼錯誤,請重新輸入!'.center(40, '-')) print('您已經退出了'.center(100, '-')) print('您的購買清單'.center(100, '-')) print('序號 名稱 數量 日期') tamp_tamp = tamp_item.get('wares') for num, i in enumerate(tamp_tamp.items()): print('{: <3} {: <15}{: <3} {}'.format(num + 1, i[0], i[1][0], i[1][1])) print('-' * 106)

 user_data檔案 和 多用除錯程式檔案:

[{"username": "nb", "password": "123", "salary": 10000, "remainder": 2920, "wares": {}, "start_login": true, "Records_of_consumption": {"2018-12-1 19:52:23": [1, "\u4f18\u8863\u5e93\u6700\u65b0\u6b3e\u5916\u8863"], "2018-12-1 19:52:41": [1, "\u4f18\u8863\u5e93\u6700\u65b0\u6b3e\u978b\u5b50"], "2018-12-2 13:59:35": [1, "\u7f8e\u7684\u6700\u65b0\u6b3e\u51b0\u7bb1"], "2018-12-3 10:41:53": [1, "\u6d77\u5c14\u6700\u65b0\u6b3e\u7535\u89c6"], "2018-12-3 11:11:30": [1, "\u9b45\u65cf\u3000\u039c\u2162"]}}, {"username": "guogangzhi", "password": "ggz19891030", "salary": 12000, "remainder": 6800, "wares": {"\u6d77\u5c14\u6700\u65b0\u6b3e\u7535\u89c6": [1, "2018-12-1 19:53:38"], "\u9b45\u65cf\u3000\u039c\u2162": [1, "2018-12-1 19:53:46"]}, "start_login": true, "Records_of_consumption": {"2018-12-1 19:53:38": [1, "\u6d77\u5c14\u6700\u65b0\u6b3e\u7535\u89c6"], "2018-12-1 19:53:46": [1, "\u9b45\u65cf\u3000\u039c\u2162"]}}, {"username": "ggz", "password": "19891030", "salary": 15000, "remainder": 6300, "wares": {"\u6d77\u5c14\u6700\u65b0\u6b3e\u6d17\u8863\u673a": [1, "2018-12-1 19:54:53"], "\u7f8e\u7684\u6700\u65b0\u6b3e\u51b0\u7bb1": [1, "2018-12-1 19:55:1"]}, "start_login": true, "Records_of_consumption": {"2018-12-1 19:54:53": [1, "\u6d77\u5c14\u6700\u65b0\u6b3e\u6d17\u8863\u673a"], "2018-12-1 19:55:1": [1, "\u7f8e\u7684\u6700\u65b0\u6b3e\u51b0\u7bb1"]}}]
#author:    郭剛志
date:      2018/8/25
import json
user = [                            # 所有使用者
    {
        'username': 'nb',           # 使用者名稱
        'password': '123',          # 密碼
        'salary': 0,                # 工資
        'remainder': 0,             # 餘額
        'wares': {                  # 本次購買的商品
            # 'wares_name':['num','time']               # 名稱:[數量,購買時間]
        },
        'start_login':False,             # 第一次登入
        'Records_of_consumption':{  # 消費記錄
            # 'time':['num','wares_name']               # 購買時間:[數量,名稱]
        }
    },
    {
        'username': 'guogangzhi',           # 使用者名稱
        'password': 'ggz19891030',          # 密碼
        'salary': 0,                # 工資
        'remainder': 0,             # 餘額
        'wares': {                  # 本次購買的商品
            # 'wares_name':['num','time']               # 名稱:[數量,購買時間]
        },
        'start_login':False,             # 第一次登入
        'Records_of_consumption':{  # 消費記錄
            # 'time':['num','wares_name']               # 購買時間:[數量,名稱]
        }
    },
    {
        'username': 'ggz',           # 使用者名稱
        'password': '19891030',          # 密碼
        'salary': 0,                # 工資
        'remainder': 0,             # 餘額
        'wares': {                  # 本次購買的商品
            # 'wares_name':['num','time']               # 名稱:[數量,購買時間]
        },
        'start_login':False,             # 第一次登入
        'Records_of_consumption':{  # 消費記錄
            # 'time':['num','wares_name']               # 購買時間:[數量,名稱]
        }
    },
]

json.dump(user, open('userdata', 'w'))  # 將使用者資料儲存到userdata檔案