python學習--購物車4
阿新 • • 發佈:2017-12-04
目錄 lease nco div 商品 修改 strip 依據 信息
模擬購物車的程序,是對之前學習的基礎知識----字典、列表、文件的讀寫、字符的操作等知識的一次模擬練習,但在實際的編程中,將所有功能放在一個函數中實現,無疑減弱了程序的可讀性和可維護性,購物車4引進了函數的概念,也將購物車需求經過整理如下:
要求
1、 登錄功能
1> 登錄驗證:1、賬戶是否被鎖定;2、驗證用戶為註冊用戶,登錄密碼是否正確,用戶名與密碼存放在文件中;
2> 驗證失敗三次,鎖定賬戶,鎖定賬戶在五分鐘內不能再次登錄,鎖定賬:
戶存放在文件中。
2、 賬戶充值
1> 在購物時,出現余額不足是,可進行賬戶充值;
2> 可讀取、保存賬戶余額。
3、 退出結算
1> 結束購物時,進行購物結算,打印消費信息與賬戶余額;
2> 購物結束時,保存購物商品信息;
3> 購物結束時,保存賬戶余額。
4、 購物
1> 打印操作說明;
2> 打印商品列表;
3> 商品分類;
4> 余額不足提示。
5> 購物操作,可根據不同購物類型,選擇,顯示該類型下商品列表,可選擇返回上層目錄。
實現代碼如下:
def readDirInfo(filename): ‘讀取字典列表,依據傳遞的文件名,獲取不同的字典信息‘ nameList = ‘‘ with open(filename,‘a+‘, encoding=‘utf8‘) as f: f.seek(0) nameList = str(f.readlines()) nameList = nameList.strip(‘]‘).strip(‘[‘) nameList = nameList.strip(‘\"‘).strip(‘\"‘) if len(nameList) == 0: return {} return eval(nameList) #字符轉字典 def login(iTime = 3): ‘用戶登錄操作,包括以下功能:1、判斷是否為註冊賬戶; 2、登錄賬戶是否被鎖定(註:默認輸錯用戶名密碼三次後,鎖定賬號,五分鐘內不能登錄)‘ i = 1 flag = False lock_namelist = readDirInfo(‘locklist.txt‘) while i <= iTime: username = input("username:") password = input("password:") if loginLock(username,lock_namelist): print("you username is locked, try again after 5 min") break elif logincheck(username,password): print("welecom to shopping maket") flag = True break elif i == iTime: print("input more than three times, try again after 5 min") addLockDir(username, lock_namelist) break else: print("you put an wrong name or password,please input again") i += 1 return flag,username def loginLock(name, lock_namelist): ‘判斷登錄賬號是否被鎖定,如果被鎖定時間超過5分鐘,允許用戶再次登錄‘ flag = False if name in lock_namelist: last_time = datetime.datetime.strptime(lock_namelist[name], "%Y-%m-%d %H:%M:%S") now_time = datetime.datetime.now() minute = (now_time - last_time) if int(minute.seconds/60) <= 5: flag = True return flag def logincheck(name,password): ‘是否為註冊賬號‘ flag = False name_dir = readDirInfo(‘name.txt‘) if name in name_dir: if password == name_dir[name]: flag = True return flag def addLockDir(name,lock_namelist): ‘字典中添加元素,如果元素存在,修改元素的值‘ if name in lock_namelist: lock_namelist[name] = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") else: lock_namelist[name] = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") with open(‘locklist.txt‘, ‘w‘, encoding="utf8") as f_read: f_read.write(str(lock_namelist)) def PrintOper(): ‘打印操作說明‘ prolist = ‘‘‘ *************** 系統操作說明 **************** q : 退出系統 c : 賬號充值 h : 購物記錄 l : 商品列表 ************************************************ ‘‘‘ print(prolist) def CreateDir(): ‘判斷文件夾是否存在,如果存在則退出,如果不存在,創建文件夾‘ isExists = os.path.exists(‘History‘) if not isExists: os.mkdir(‘History‘) return isExists def Exit(): ‘退出購物系統,退出時進行購物結算‘ Account() saveLevelMoney() exit() def saveLevelMoney(): with open(‘remain.txt‘,‘w‘,encoding=‘utf8‘) as f: f.write(str(remain_dir)) def Account(): ‘購物計算,將購物信息寫入購物歷史文件中‘ if len(shopping_cart) == 0: return False print("\033[34;1m---------------product list-----------------\033[0m \n \033[42;1m") temp = ‘id product number pric Totalpric‘ print(temp) index = 1 total_mon = 0 f = open("product.txt", "a+", encoding="utf8") now_time = datetime.datetime.now().strftime(‘[%Y-%m-%d %H:%M:%S]‘) f.write(now_time + ‘\n‘ + temp + ‘\n‘) temp = ‘‘ for i in shopping_cart.keys(): total_mon += shopping_cart[i][1] * shopping_cart[i][0] temp = str("%d %10s %7d %7d %7d \n" % (index, i, shopping_cart[i][1], shopping_cart[i][0], shopping_cart[i][1] * shopping_cart[i][0])) print(temp) f.write(temp) index += 1 f.close() print("you pay money is:%d \n you level money is: %d \n" % (total_mon, remain_dir[name])) print("\033[0m \n \033[34;1m-------------end-------------\033[0m") def Recharge(): ‘賬號充值操作‘ while True: temp = input("Please rechange money:") if temp.isdigit(): if name in remain_dir: remain_dir[name] += int(temp) else: remain_dir[name] = int(temp) break print("you input a unknow number,please check it and input again!") def History(): ‘打印歷史購物記錄‘ filename = ‘History\\‘ + name + ‘.txt‘ filename = filename.rstrip("\\") print(filename) if os.path.exists(filename): with open(filename,‘r‘,encoding=‘utf8‘) as f: for line in f: print(line.strip(‘\n‘)) else: print(‘No you shoppong history‘) def Operation(): ‘用戶交互操作‘ while True: PrintOper() oper = str(input("Please input you choice:")).strip() if oper == ‘l‘: print(‘歡迎進入購物中心‘) shopping(product_list) elif oper in Oper_dir: Oper_dir[oper]() else: print("You input no in Oper list!") continue def ProductList(print_list): ‘打印商品列表‘ if isinstance(print_list, dict): # 是否為列表 for key in print_list: print(key) else: index = 0 for product in print_list: print(index, product) index += 1 print(‘b:‘,‘返回上級菜單‘) print(‘q:‘,‘退出購物中心‘) print(‘c‘,‘充值‘) def shopping(product_list): ‘購物操作‘ current_layer = product_list while True: ProductList(current_layer) choice = input(">>:").strip() if len(choice) == 0: continue if choice.isdigit(): choice = int(choice) if choice >= 0 and choice < len(current_layer): product = current_layer[choice] if product[1] <= remain_dir[name]: if product[0] in shopping_cart: shopping_cart[product[0]][1] += 1 else: shopping_cart[product[0]] = [product[1], 1] remain_dir[name] -= product[1] print("\033[42;1mAdded product: %s into shoing cart ,you current balance %s \033[0m" % (product[0], str(remain_dir[name]))) else: print("\033[42;1m [warning] you balance is no enough\033[0m, product:" + str( product[1]) + " short for " + str(product[1] - remain_dir[name])) else: print("\033[41;1mYou choice product is no in product_list\033[0m") elif choice in current_layer: if isinstance(current_layer, dict): # 是否為列表 last_layer.append(current_layer) current_layer = current_layer[choice] elif choice == ‘q‘: break elif choice == ‘b‘: current_layer = BackUpLevel(current_layer) elif choice == ‘c‘: Recharge(name) def BackUpLevel(current_layer): ‘返回到商品列表上一層‘ if last_layer: current_layer = last_layer[-1] last_layer.pop() return current_layer import datetime import os product_list = {"生活用品":[[‘毛巾‘,20], [‘洗衣液‘,80], [‘衣架‘, 10], [‘洗衣粉‘,60], [‘洗發水‘, 80], [‘廁洗劑‘,50]], "家電":[[‘電視機‘,5000], [‘電飯煲‘,300], [‘電磁爐‘,200], [‘高壓鍋‘,800], [‘電餅鐺‘,200]], } shopping_cart = {} Oper_dir = {‘q‘:Exit,‘c‘:Recharge,‘h‘:History} last_layer = [ product_list ] remain_dir = readDirInfo(‘remain.txt‘) flag,name = login() if flag: Operation()
python學習--購物車4