作業:
編寫購物車
具體實現了如下功能:
1、可購買的商品信息顯示
2、顯示購物車內的商品信息、數量、總金額
3、購物車內的商品數量進行增加、減少和商品的刪除
4、用戶余額的充值
5、用戶購買完成進行結賬,將最終余額回寫到用戶文件中。
一、用戶文件說明:

kevin 123 50000 sky 123 54000 mobi 123 80000
其中第一列為用戶名,第二列為密碼,第三列為帳戶余額
二、流程圖如下:
三、具體python2.7下代碼如下:

#!/usr/bin/python27 #_*_ coding:utf-8 _*_ import sys,os,getpass,time ######################raw_input輸入字符類型轉化函數####################### def input_handle(s): if str.isdigit(s): ###對輸入是否是數字進行判斷### s = int(s) ###如果輸出的是個數字,則轉化為整數類型### return s ###返回輸入字符### #################################框架函數################################# def framework(user='',init_money='',now_money='',recharge_money='',value=''): os.system('clear') ###清屏### init_money = int(init_money) ###初始總金額數字化### now_money= int(now_money) ###當前余額數字化### recharge_money = int(recharge_money) ###充值金額數字化### print(''.center(82,'*')) print('*'+' '.center(80)+'*') print(''.ljust(1,'*')+'歡迎來到sky購物平台'.center(88,' ')+''.ljust(1,'*')) print('*'+' '.center(80)+'*') print(''.center(82,'*')) info = '會員 : {0} 金額 : {1} 當前余額 : {2} 充值金額 : {3} 購物車 : {4}' info = info.format(user,init_money,now_money,recharge_money,value) print(info.center(82,' ')) print # print(''' #********************************************************************************* #* * #* 歡迎來到sky購物平台 * #* * #********************************************************************************* #會員:%s\t金額:%d\t當前余額:%d\t充值金額:%d\t購物車:%d #''' % (user,init_money,now_money,recharge_money,value)) ########################商品列表展示函數################################### def goods_list_show(my_dict): local_dict = {} ###定義函數內部字典### ############對商品列表進行遍歷並加上數字編號########################### i = 1 print('商品列表 : ') print('=================================================================================') print('%-5s %-20s %-20s %-20s %-20s' % ('編號','商品名稱','商品價格(元)','商品總數量(個)','商品剩余數量(個)')) for k in my_dict: v = my_dict[k] if type(v) is dict: print('%-5d %-20s %-20d %-20d %-20d' % (i,k,v['price'],v['sum'],v['num'])) local_dict[i] = [k,v['price'],v['num'],v['sum']] ###將商品列表賦值到local_dict### i += 1 print('=================================================================================') return local_dict ###返回格式化后的字典### ########################顯示購物車商品列表函數############################# def cart_goods_show(show_dict): show_all_sum = 0 ###初始化購物車商品總價### show_all_num = 0 ###初始化購物車商品數量### ############對商品列表進行遍歷並加上數字編號########################### print('%-5s %-20s %-20s %-20s %-20s %-20s' % ('編號','商品名稱','商品價格(元)','商品總數量(個)','購買數量(個)','購買金額(元)')) for k in show_dict: v = show_dict[k] if type(v) is list: print('%-5s %-20s %-20d %-20d %-20d %-20d' % (k,v[0],v[1],v[2],v[3],v[4])) show_all_sum += v[4] ###商品總價累計### show_all_num += 1 ###商品個數累計### print('請確認您購買商品,總金額:%d(元)'.center(84,'#') % show_all_sum) return (show_all_sum,show_all_num) ###返回商品總價和商品個數### ########################修改購物車商品列表函數############################# def cart_goods_modify(modify_dict,modify_goods_dict): a_flag = 1 ###初始化第一層編號循環標記### while a_flag: index = raw_input('請輸入商品編號 | 完成修改(q) : ') if len(index) != 0: ###商品編號不為空進行字符轉化### index = input_handle(index) if index == 'q': ###輸入為q,即完成修改退出### break elif index in modify_dict: ###輸入為正確編號### b_flag = 1 ###初始化第二層數量循環標記### name = modify_dict[index][0] ###對name賦值商品名稱### while b_flag: num = raw_input('請輸入新的商品數量(最大值為%d) | 完成修改(q) : ' % modify_dict[index][2] ) if len(num) != 0: ###商品數量不為空進行字符轉化### num = input_handle(num) if num == 'q': ###輸入為q,即完成修改退出### break elif num == 0: ###輸入為0,即刪除字典中的這個條目### modify_goods_dict[name]['num'] = modify_dict[index][2] ###商品列表中的商品數量變為初始值### del modify_dict[index] ###購物車刪除這個商品### b_flag = 0 elif num > 0 and num <= modify_dict[index][2]: ###輸入為要求數字,則進行數量和金額修改### modify_dict[index][3] = num modify_dict[index][4] = modify_dict[index][1] * num modify_goods_dict[name]['num'] = modify_dict[index][2] - num ###更新商品列表中的商品數量### b_flag = 0 else: pass else: pass return (modify_dict,modify_goods_dict) ###返回修改后的購物車商品列表### #########################購物車展示函數#################################### def shopping_cart_show(my_cart,my_goods_dict): print('歡迎來到您的購物車'.center(80,'#')) goods_all_sum = 0 ###初始化購物車商品總金額### goods_all_num = 0 ###初始化購物車商品總數量### if my_cart: ###購物車參數不為空### ###########調用購物車商品列表函數,並返回商品總金額和總數量######### (goods_all_sum,goods_all_num) = cart_goods_show(my_cart) choice = raw_input('請進行如下操作 : 修改記錄(c) | 繼續購物(!c)') if choice == 'c': ###對購物車商品列表進行修改### (my_shop_cart,my_goods_dict) = cart_goods_modify(my_cart,my_goods_dict) ###調用商品修改函數,並返回新的商品列表### (goods_all_sum,goods_all_num) = cart_goods_show(my_shop_cart) ###購物車商品展示,並返回最新的商品總價### else: pass else: print('當前您的購物車為空'.center(80,' ')) time.sleep(2) return (goods_all_sum,goods_all_num,my_goods_dict) ###返回購物車中商品總價、數量和用戶商品列表### #########################余額充值函數###################################### def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money): recharge_flag = 1 ###充值循環參數初始化### while recharge_flag: recharge_num = raw_input('請輸入充值金額 | 返回(b) | 退出(q):') if len(recharge_num) != 0: ###如果輸入非空,對輸入進行判斷並轉化類型### recharge_num = input_handle(recharge_num) if recharge_num == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif recharge_num == 'b': ###如果輸入為b,則返回第一層循環,重新選擇商品編號### break elif type(recharge_num) is int and recharge_num > 0 : ###輸入要求充值金額### recharge_init_balance += recharge_num ###初始金額增加### recharge_now_balance += recharge_num ###當前余額增加### recharge_money += recharge_num ###充值金額增加### recharge_flag = 0 ###改變充值循環參數### print('充值成功,請查收'.center(80,' ')) ###提示充值成功### else: pass return (recharge_init_balance,recharge_now_balance,recharge_money) ###返回初始、當前、充值金額### #########################用戶結帳函數###################################### def user_billing(billing_list,my_cart,billing_balance): print('歡迎來到結算菜單'.center(80,'#')) if my_cart: ###購物車參數不為空### #############調用購物車商品列表函數################################ cart_goods_show(my_cart) billing_flag = raw_input('請確認是否商品結算(y | n):') if billing_flag == 'y': ###商品結算確認### billing_file = open('info.txt','w') ###打開讀寫帳號文件### for user_info in billing_list: print(user_info) billing_file.writelines(user_info) ###回寫用戶列表信息### billing_file.close() ###關閉帳號文件### sys.exit('結帳成功,你當前余額 :%d'.center(80,' ') % billing_balance) else: print('退出結算菜單,繼續購物'.center(80,' ')) time.sleep(2) else: print('當前您的購物車為空,無需結算'.center(80,' ')) time.sleep(2) ################################主程序開始################################## ################################商品列表#################################### ###num為當前商品數量,sum為商品總數量### goods_list = { 'iphone6': {'price':6000,'num':10,'sum':10}, 'ipad': {'price':3000,'num':20,'sum':20}, 'mi4': {'price':2000,'num':43,'sum':43}, 'huawei6_plus': {'price':1999,'num':8,'sum':8}, } i = 0 while i < 3: ###只要用戶登錄異常不超過3次就不斷循環### username = raw_input('請輸入用戶名:') ###輸入用戶名### password = raw_input('請輸入密碼:') ###輸入隱藏密碼### user_file = open('info.txt','r') ###打開帳號文件### user_list = user_file.readlines() ###用戶列表信息### user_file.close() ###關閉帳號文件### for user_line in user_list: ###對帳號文件進行遍歷### ######################分別獲取帳號、密碼信息和當前余額############## (user,passwd,init_balance) = user_line.strip('\n').split() init_balance = int(init_balance) ###對總金額進行數字化### now_balance = init_balance ###對當前余額進行數字化### my_goods_sum = 0 ###初始化購買商品總金額### if username == user and password == passwd: ###如用戶名和密碼正常匹配### user_shopping_cart = {} ###初始化用戶購物車字典### user_shopping_cart_count = 0 ###初始化用戶購物車內商品的數量### recharge_value = 0 ###初始化充值金額### line_num = user_list.index(user_line) ###賦值匹配用戶的下標### first_flag = 1 ###定義第一層循環變量參數### while first_flag: ########################調用框架函數輸出用戶信息############ framework(username,init_balance,now_balance,recharge_value,user_shopping_cart_count) goods_output_dict = goods_list_show(goods_list) ###調用商品列表展示函數輸出商品信息### print(now_balance) goods_index = raw_input('請選擇菜單 :輸入商品編號 | 購物車(c) | 余額充值(r) | 結帳(b) | 退出(q) : ') if len(goods_index) != 0: ###如果輸入非空,對輸入進行判斷並轉化類型### goods_index = input_handle(goods_index) if goods_index == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif goods_index == 'c': ###如果輸入為c,則展示購物車### ###調用購物車顯示函數,並返回購物車商品總金額########### (my_goods_sum,user_shopping_cart_count,goods_list) = shopping_cart_show(user_shopping_cart,goods_list) now_balance = init_balance - my_goods_sum ###計算出當前余額### if now_balance < 0: print('您的余額不足,請及時充值,謝謝') time.sleep(2) elif goods_index == 'r': ###如果輸入為r,則進行余額充值### (init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value) elif goods_index == 'b': ###如果輸入為b,則進入結賬菜單### ##############更新用戶文件中用戶的余額################## user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n' print(user_list[line_num]) user_billing(user_list,user_shopping_cart,now_balance) ###調用結算函數### elif goods_index in goods_output_dict: ###輸入編號為正確的商品編號### ###############################取出goods_index商品列表信息並進行賦值和展示############ (goods_name,goods_price,goods_num) = (goods_output_dict[goods_index][0], goods_output_dict[goods_index][1], goods_output_dict[goods_index][2]) print('【 編號:%-5d \t 名稱:%-15s \t 價格:%-5d(元) \t 數量:%-5d(個)】' % (goods_index,goods_name,goods_price,goods_num)) second_flag = 1 ###定義第二層循環變量參數### while second_flag: buy_num = raw_input('請輸入購買商品個數(最大值為%d) | 返回(b) | 退出(q): ' % goods_num) if len(buy_num) != 0: ###如果輸入非空,對輸入進行判斷並轉化類型### buy_num = input_handle(buy_num) if buy_num == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif buy_num == 'b': ###如果輸入為b,則返回第一層循環,重新選擇商品編號### break elif buy_num > 0 and buy_num <= goods_num: ###輸入要求商品數量### my_goods_sum = goods_price * buy_num ###計算購買商品的總金額### if my_goods_sum <= now_balance: print('購買商品 %s 總價格為 : %d' % (goods_name,my_goods_sum)) add_flag = raw_input('請確認是否加入購物車(y | n):') if add_flag == 'y': ###購買商品確認加入購物車### ###判斷購物車不存在該商品############### if goods_index not in user_shopping_cart: user_shopping_cart_count += 1 ###購物車里商品數量加1### ####將該商品加入用戶購物車字典中#### user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum] ####購物車已經存在該商品,則進行數量和金額累計計算############ else: user_shopping_cart[goods_index][3] += buy_num user_shopping_cart[goods_index][4] += my_goods_sum now_balance -= my_goods_sum ###計算出當前余額### goods_list[goods_name]['num'] -= buy_num ###商品列表的商品數量更新### second_flag = 0 ###設置第二層循環值為0,結束第二層循環#### else: break else: print('您的余額不足,請充值或重新選擇,謝謝') time.sleep(2) else: pass else: pass else: if i != 2: ###i=2時,是最后一次機會,不用在提示還剩余0次機會了### print('用戶或密碼錯誤,請重新輸入,還有 %d 次機會' % (2 - i)) i += 1 ###當用戶輸入錯誤時,循環值增加1### else: sys.exit('用戶或密碼輸入錯誤超過三次,退出系統,歡迎下次光臨') ###用戶輸入三次錯誤后,異常退出###
四、具體python3.4下代碼如下:

#!/usr/bin/python34 import sys,os,getpass,time ######################input輸入字符類型轉化函數########################### def input_handle(s): if str.isdigit(s): ###對輸入是否是數字進行判斷### s = int(s) ###如果輸出的是個數字,則轉化為整數類型### return s ###返回輸入字符### #################################框架函數################################## def framework(user='',init_money='',now_money='',recharge_money='',value=''): os.system('clear') ###清屏### init_money = int(init_money) ###初始總金額數字化### now_money= int(now_money) ###當前余額數字化### recharge_money = int(recharge_money) ###充值金額數字化### print(''' ********************************************************************************* * * * 歡迎來到sky購物平台 * * * ********************************************************************************* 會員:%s\t金額:%d\t當前余額:%d\t充值金額:%d\t購物車:%d ''' % (user,init_money,now_money,recharge_money,value)) ########################商品列表展示函數################################### def goods_list_show(my_dict): local_dict = {} ###定義函數內部字典### ############對商品列表進行遍歷並加上數字編號########################### i = 1 print('商品列表 : ') print('=================================================================================') print('%-5s %-20s %-10s %-10s %-10s' % ('編號','商品名稱','商品價格(元)','商品總數量(個)','商品剩余數量(個)')) for k in my_dict: v = my_dict[k] if type(v) is dict: print('%-5d %-20s %-10d %-10d %-10d' % (i,k,v['price'],v['sum'],v['num'])) local_dict[i] = [k,v['price'],v['num'],v['sum']] ###將商品列表賦值到local_dict### i += 1 print('=================================================================================') return local_dict ###返回格式化后的字典### ########################顯示購物車商品列表函數############################# def cart_goods_show(show_dict): show_all_sum = 0 ###初始化購物車商品總價### show_all_num = 0 ###初始化購物車商品數量### ############對商品列表進行遍歷並加上數字編號########################### print('%-5s \t %-20s \t %-10s \t %-10s \t %-10s \t %-10s' % ('編號','商品名稱','商品價格(元)','商品總數量(個)','購買數量(個)','購買金額(元)')) for k in show_dict: v = show_dict[k] if type(v) is list: print('%-5s \t %-20s \t %-10d \t %-10d \t %-10d \t %-10d' % (k,v[0],v[1],v[2],v[3],v[4])) show_all_sum += v[4] ###商品總價累計### show_all_num += 1 ###商品個數累計### print('請確認您購買商品,總金額:%d(元)'.center(84,'#') % show_all_sum) return (show_all_sum,show_all_num) ###返回商品總價和商品個數### ########################修改購物車商品列表函數############################# def cart_goods_modify(modify_dict,modify_goods_dict): a_flag = 1 ###初始化第一層編號循環標記### while a_flag: index = input('請輸入商品編號 | 完成修改(q) : ') if len(index) != 0: ###商品編號不為空進行字符轉化### index = input_handle(index) if index == 'q': ###輸入為q,即完成修改退出### break elif index in modify_dict: ###輸入為正確編號### b_flag = 1 ###初始化第二層數量循環標記### name = modify_dict[index][0] ###對name賦值商品名稱### while b_flag: num = input('請輸入新的商品數量(最大值為%d) | 完成修改(q) : ' % modify_dict[index][2] ) if len(num) != 0: ###商品數量不為空進行字符轉化### num = input_handle(num) if num == 'q': ###輸入為q,即完成修改退出### break elif num == 0: ###輸入為0,即刪除字典中的這個條目### modify_goods_dict[name]['num'] = modify_dict[index][2] ###商品列表中的商品數量變為初始值### del modify_dict[index] ###購物車刪除這個商品### b_flag = 0 elif num > 0 and num <= modify_dict[index][2]: ###輸入為要求數字,則進行數量和金額修改### modify_dict[index][3] = num modify_dict[index][4] = modify_dict[index][1] * num modify_goods_dict[name]['num'] = modify_dict[index][2] - num ###更新商品列表中的商品數量### b_flag = 0 else: pass else: pass return (modify_dict,modify_goods_dict) ###返回修改后的購物車商品列表### #########################購物車展示函數#################################### def shopping_cart_show(my_cart,my_goods_dict): print('歡迎來到您的購物車'.center(80,'#')) goods_all_sum = 0 ###初始化購物車商品總金額### goods_all_num = 0 ###初始化購物車商品總數量### if my_cart: ###購物車參數不為空### ###########調用購物車商品列表函數,並返回商品總金額和總數量######### (goods_all_sum,goods_all_num) = cart_goods_show(my_cart) choice = input('請進行如下操作 : 修改記錄(c) | 繼續購物(!c)') if choice == 'c': ###對購物車商品列表進行修改### (my_shop_cart,my_goods_dict) = cart_goods_modify(my_cart,my_goods_dict) ###調用商品修改函數,並返回新的商品列表### (goods_all_sum,goods_all_num) = cart_goods_show(my_shop_cart) ###購物車商品展示,並返回最新的商品總價### else: pass else: print('當前您的購物車為空'.center(80,' ')) time.sleep(2) return (goods_all_sum,goods_all_num,my_goods_dict) ###返回購物車中商品總價、數量和用戶商品列表### #########################余額充值函數###################################### def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money): recharge_flag = 1 ###充值循環參數初始化### while recharge_flag: recharge_num = input('請輸入充值金額 | 返回(b) | 退出(q):') if len(recharge_num) != 0: ###如果輸入非空,對輸入進行判斷並轉化類型### recharge_num = input_handle(recharge_num) if recharge_num == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif recharge_num == 'b': ###如果輸入為b,則返回第一層循環,重新選擇商品編號### break elif type(recharge_num) is int and recharge_num > 0 : ###輸入要求充值金額### recharge_init_balance += recharge_num ###初始金額增加### recharge_now_balance += recharge_num ###當前余額增加### recharge_money += recharge_num ###充值金額增加### recharge_flag = 0 ###改變充值循環參數### print('充值成功,請查收'.center(80,' ')) ###提示充值成功### else: pass return (recharge_init_balance,recharge_now_balance,recharge_money) ###返回初始、當前、充值金額### #########################用戶結帳函數###################################### def user_billing(billing_list,my_cart,billing_balance): print('歡迎來到結算菜單'.center(80,'#')) if my_cart: ###購物車參數不為空### #############調用購物車商品列表函數################################ cart_goods_show(my_cart) billing_flag = input('請確認是否商品結算(y | n):') if billing_flag == 'y': ###商品結算確認### billing_file = open('info.txt','w') ###打開讀寫帳號文件### for user_info in billing_list: billing_file.writelines(user_info) ###回寫用戶列表信息### billing_file.close() ###關閉帳號文件### sys.exit('結帳成功,你當前余額 :%d'.center(80,' ') % billing_balance) else: print('退出結算菜單,繼續購物'.center(80,' ')) time.sleep(2) else: print('當前您的購物車為空,無需結算'.center(80,' ')) time.sleep(2) ################################主程序開始################################## ################################商品列表#################################### ###num為當前商品數量,sum為商品總數量### goods_list = { 'iphone6': {'price':6000,'num':10,'sum':10}, 'ipad': {'price':3000,'num':20,'sum':20}, 'mi4': {'price':2000,'num':43,'sum':43}, 'huawei6_plus': {'price':1999,'num':8,'sum':8}, } i = 0 while i < 3: ###只要用戶登錄異常不超過3次就不斷循環### username = input('請輸入用戶名:') ###輸入用戶名### password = input('請輸入密碼:') ###輸入隱藏密碼### user_file = open('info.txt','r') ###打開帳號文件### user_list = user_file.readlines() ###用戶列表信息### user_file.close() ###關閉帳號文件### for user_line in user_list: ###對帳號文件進行遍歷### ######################分別獲取帳號、密碼信息和當前余額############## (user,passwd,init_balance) = user_line.strip('\n').split() init_balance = int(init_balance) ###對總金額進行數字化### now_balance = init_balance ###對當前余額進行數字化### my_goods_sum = 0 ###初始化購買商品總金額### if username == user and password == passwd: ###如用戶名和密碼正常匹配### user_shopping_cart = {} ###初始化用戶購物車字典### user_shopping_cart_count = 0 ###初始化用戶購物車內商品的數量### recharge_value = 0 ###初始化充值金額### line_num = user_list.index(user_line) ###賦值匹配用戶的下標### first_flag = 1 ###定義第一層循環變量參數### while first_flag: ########################調用框架函數輸出用戶信息############ framework(username,init_balance,now_balance,recharge_value,user_shopping_cart_count) goods_output_dict = goods_list_show(goods_list) ###調用商品列表展示函數輸出商品信息### goods_index = input('請選擇菜單 :輸入商品編號 | 購物車(c) | 余額充值(r) | 結帳(b) | 退出(q) : ') if len(goods_index) != 0: ###如果輸入非空,對輸入進行判斷並轉化類型### goods_index = input_handle(goods_index) if goods_index == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif goods_index == 'c': ###如果輸入為c,則展示購物車### ###調用購物車顯示函數,並返回購物車商品總金額########### (my_goods_sum,user_shopping_cart_count,goods_list) = shopping_cart_show(user_shopping_cart,goods_list) now_balance = init_balance - my_goods_sum ###計算出當前余額### if now_balance < 0: print('您的余額不足,請及時充值,謝謝') time.sleep(2) elif goods_index == 'r': ###如果輸入為r,則進行余額充值### (init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value) elif goods_index == 'b': ###如果輸入為b,則進入結賬菜單### ##############更新用戶文件中用戶的余額################## user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n' user_billing(user_list,user_shopping_cart,now_balance) ###調用結算函數### elif goods_index in goods_output_dict: ###輸入編號為正確的商品編號### ###############################取出goods_index商品列表信息並進行賦值和展示############ (goods_name,goods_price,goods_num) = (goods_output_dict[goods_index][0], goods_output_dict[goods_index][1], goods_output_dict[goods_index][2]) print('【 編號:%-5d \t 名稱:%-15s \t 價格:%-5d(元) \t 數量:%-5d(個)】' % (goods_index,goods_name,goods_price,goods_num)) second_flag = 1 ###定義第二層循環變量參數### while second_flag: buy_num = input('請輸入購買商品個數(最大值為%d) | 返回(b) | 退出(q): ' % goods_num) if len(buy_num) != 0: ###如果輸入非空,對輸入進行判斷並轉化類型### buy_num = input_handle(buy_num) if buy_num == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif buy_num == 'b': ###如果輸入為b,則返回第一層循環,重新選擇商品編號### break elif type(buy_num) is int and buy_num > 0 and buy_num <= goods_num: ###輸入要求商品數量### my_goods_sum = goods_price * buy_num ###計算購買商品的總金額### if my_goods_sum <= now_balance: print('購買商品 %s 總價格為 : %d' % (goods_name,my_goods_sum)) add_flag = input('請確認是否加入購物車(y | n):') if add_flag == 'y': ###購買商品確認加入購物車### ###判斷購物車不存在該商品############### if goods_index not in user_shopping_cart: user_shopping_cart_count += 1 ###購物車里商品數量加1### ####將該商品加入用戶購物車字典中#### user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum] ####購物車已經存在該商品,則進行數量和金額累計計算############ else: user_shopping_cart[goods_index][3] += buy_num user_shopping_cart[goods_index][4] += my_goods_sum now_balance -= my_goods_sum ###計算出當前余額### goods_list[goods_name]['num'] -= buy_num ###商品列表的商品數量更新### second_flag = 0 ###設置第二層循環值為0,結束第二層循環#### else: break else: print('您的余額不足,請充值或重新選擇,謝謝') time.sleep(2) else: pass else: pass else: if i != 2: ###i=2時,是最后一次機會,不用在提示還剩余0次機會了### print('用戶或密碼錯誤,請重新輸入,還有 %d 次機會' % (2 - i)) i += 1 ###當用戶輸入錯誤時,循環值增加1### else: sys.exit('用戶或密碼輸入錯誤超過三次,退出系統,歡迎下次光臨') ###用戶輸入三次錯誤后,異常退出###
五、效果圖展示:
1、用戶成功登錄,顯示初始和當前的余額,還有商品:
2、選擇商品編號及購買的數量,數量不能超過總數量,並提示是否加入購物車:
3、成功將商品加入購物車后,會顯示當前的真實余額,並提示購物車內商品的種類數量:
4、當余額不足時,會提示用戶進行充值,充值金額不限:
5、查看購物車的商品數量及總金額情況:
6、並可以對購物車內的商品進行修改和刪除:
7、將商品mi4刪除或修改后,購物車的總金額、用戶的余額、購物車的商品數量均會相應的更新,並可以進行結帳:
8、結賬完成后,用戶當前的余額會回寫回用戶的信息文件。
六、針對二個版本的不同之處說明如下:
1、在python2.7下,數字和字符串可以進行比較,會有true或false返回
>>> a = 'b'
>>> aa = 1
>>> a > aa
True
在python3.4下,數字和字符串比較會報如下錯誤:
TypeError: unorderable types: str() > int()
故在二者比較判斷時,最好加上type(a) is int