python基礎(三)作業題
阿新 • • 發佈:2018-10-31
''' 作業:用函式完成登入註冊以及購物車的功能。 1,啟動程式,使用者可選擇四個選項:登入,註冊,購物,退出。 2,使用者註冊,使用者名稱不能重複,註冊成功之後,使用者名稱密碼記錄到檔案中。 3,使用者登入,使用者名稱密碼從檔案中讀取,進行三次驗證,驗證不成功則退出整個程式。 4,使用者登入成功之後才能選擇購物功能進行購物,購物功能(就是將購物車封裝到購物的函式中)。 5,退出則是退出整個程式。 ''' flag_login = 0 def register(): # 定義註冊函式 while 1: global flag_login flag_login= 0 # 將登入狀態重置為退出狀態 register_name = input('請輸入註冊使用者名稱:') register_password = input('請輸入註冊密碼:') f1 = open('name_password', encoding='utf-8', mode='r+') content = f1.read() f1.write(register_name + '|' + register_password + '\n') f1.close() # for i in range(len(content)):if register_name in content: print('使用者名稱已被註冊,請重新輸入') continue else: print('恭喜你註冊成功。') break def sign_in(): # 定義登入函式 while 1: n = 0 sign_in_name = input('請輸入登入使用者名稱:') sign_in_password = input('請輸入密碼:') f1= open('name_password', encoding='utf-8', mode='r') for line in f1: content = line.strip().split('|') if sign_in_name == content[0] and sign_in_password == content[1]: print('恭喜你登入成功。') global flag_login # 在區域性將flag_login定義為一個全域性變數 flag_login = 1 # 標識登入狀態,0-表示未登入狀態,1-表示登入狀態 break else: n = n + 1 if n > 3: # 進行3次驗證 print('使用者名稱或者密碼錯誤。') break f1.close() break def shopping(): #定義購物車函式 if flag_login == 0: print('未登入系統,無法進行購物。') if flag_login == 1: goods = { 1: {'name': '電腦', 'price': 1999}, 2: {'name': '滑鼠', 'price': 10}, 3: {'name': '鍵盤', 'price': 50}, 4: {'name': '顯示器', 'price': 1000}, } # 定義我的賬戶 my = { 'account_balance': 0, # 賬戶餘額預設為0 'shopping_cart': {}, # 購物車預設為空 'order': {} # 訂單預設為空 } # 按照商品序號儲存購買數量 dic1 = { 1: {'name': '電腦', 'price': 1999, 'num': ''}, 2: {'name': '滑鼠', 'price': 10, 'num': ''}, 3: {'name': '鍵盤', 'price': 50, 'num': ''}, 4: {'name': '顯示器', 'price': 1000, 'num': ''}, } # 使用者進行充值 while True: charge = input('賬戶餘額為0 ,請您充值:') # 首先進行賬戶充值 if charge.strip().replace('.', '', 1).isdigit(): my['account balance'] = charge charge = int(charge) print('恭喜您,充值成功' + ',' + '賬戶餘額為' + my['account balance']) break else: print('您的充值失敗,請您重新充值') continue # 商品頁面顯示 for k, v in goods.items(): print(k, v['name'], v['price']) count = 0 balance = 0 while True: goods_serial_number = input('請選擇您購買的商品序號:').upper() # 使用者輸入Q或者q退出購買程式 if goods_serial_number == 'Q': if my['shopping_cart'] == '': print('賬戶餘額:' + str(balance)) print('總共花費金額:' + str(charge - balance)) elif my['shopping_cart'] != '': for k, v in dic1.items(): if k in my['shopping_cart'].items(): dic1[k]['name'] = my['shopping_cart'][k] print(v['name'], v['price'], v['num']) print('總共花費金額:' + str(charge - balance)) print('賬戶餘額:' + str(balance)) break # 使用者輸入n進行購物車結算 elif goods_serial_number == 'N': for i in dic1.keys(): if i in my['shopping_cart'].keys(): dic1[i]['num'] = my['shopping_cart'][i] for l in dic1.keys(): # 依次顯示使用者購物車裡面的商品,數量及單價 if l in my['shopping_cart'].keys(): msg = ''' ---------------------購買資訊------------------ 商品名稱:%(name)s 商品數量:%(num)s 商品單價:%(price)s --------------------end--------------------- ''' % dic1[l] print(msg) else: pass # 計算各個商品的總價 for k in dic1: if k in my['shopping_cart']: count = dic1[k]['num'] * dic1[k]['price'] + count # 計算花費金額 balance = charge - count # 計算賬戶餘額 if balance >= 0: print('恭喜您,購買成功!') elif balance < 0: print('餘額不足,請刪除部分商品。') while balance < 0: del_goods_serial_number = input('請輸入刪除物品的序號:').upper() if (del_goods_serial_number == 'Q') or (del_goods_serial_number == 'N'): break elif del_goods_serial_number.isdigit(): if int(del_goods_serial_number) in my['shopping_cart']: if my['shopping_cart'][int(del_goods_serial_number)] >= 1: my['shopping_cart'][int(del_goods_serial_number)] = my['shopping_cart'][int( del_goods_serial_number)] - 1 print(my['shopping_cart']) balance = balance + dic1[int(del_goods_serial_number)]['num'] * \ dic1[int(del_goods_serial_number)]['price'] else: print('購物車中已經無該商品,請重新選擇') else: print('購物車中無該商品,請重新選擇') continue else: print('恭喜你,購買成功') elif goods_serial_number.isdigit() == False: print("商品序號輸入有誤,請重新輸入!") continue elif int(goods_serial_number) in goods: goods_serial_number = int(goods_serial_number) if goods_serial_number in my['shopping_cart']: my['shopping_cart'][goods_serial_number] = int(my['shopping_cart'][goods_serial_number]) + 1 else: my['shopping_cart'].setdefault(goods_serial_number) my['shopping_cart'][goods_serial_number] = 1 print(my['shopping_cart']) def sign_out(): # 定義退出函式 print('退出整個程式') quit() dic = { 1: sign_in, 2: register, 3: shopping, 4: sign_out, } flag_login = 0 while 1: choice = input('請輸入數字1/2/3/4(1-登入/2-註冊/3-購物/4-退出):') if choice.isdigit(): choice = int(choice) dic[choice]() else: pass