python基础day2作业:购物车
生活随笔
收集整理的這篇文章主要介紹了
python基础day2作业:购物车
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#功能:
1.可注冊賬號
2.登錄買家賬號
3.可查詢編輯購物車里商品
4.可以余額充值
5.可提示余額不足
6.購物車結算
#使用:
1.第一次使用先注冊賬號填寫賬號金額
2.賬號金額信息保存在buyer_account.txt (默認為空)
3.只針對帳號文件里的用戶進行判斷并鎖定,針對用戶和密碼各有三次錯誤重試機會。
?
?
流程圖:
?
代碼:
#!/usr/bin/env python3#antuor:Alanfrom prettytable import PrettyTable import sys,os import getpass,time#用戶注冊函數# def register():new_username = input('請輸入注冊用戶名:')new_password = input('請輸入新用戶密碼:')bank_money = 0while True:new_password_again = input('請再次確認新用戶密碼:') ###再次確認密碼if new_password_again != new_password: ###密碼錯誤則循環(huán)continueelse:break ###正確則跳出循環(huán)執(zhí)行下一個循環(huán)while True:bank_money = input('請輸入你要充值的金額:') ###輸入金額數字if bank_money.isdigit(): ###判斷金額是否為數字bank_money = int(bank_money) ###金額數字整數化breakelse: ###如果金額非數字則不斷循環(huán)print('請輸入正確的金額')user_account = "%s %s %d" % (new_username,new_password,bank_money)# file = open('login_account.txt','a+')# save_file = file.write(user_account)# file.close()# print (("++++++++++恭喜你注冊成功:%s++++++++++++") % (user_account))with open('login_account.txt','a+') as file: ###把用戶信息存入文檔,a+為讀寫追加模式file.write(user_account+'\n') ###寫入并換行print (("==============恭喜你注冊成功:%s==============") % (user_account))print("================請重新登錄你的賬號======================") ############################################################################def digit_input(s):if str.isdigit(s): #對輸入是否是數字進行判斷s = int(s) #如果輸出的是個數字,則轉化為整數類型return s #返回輸入字符#用戶信息函數# def shopping_func(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) #充值金額數字化###########################通過prettytable模塊將輸出內容如表格方式整齊#########product_page = PrettyTable(['用戶名','金額','當前余額','充值余額','購物車'])product_page.align['用戶名'] = '1' #對齊product_page.add_row([user,init_money,now_money,recharge_money,value])print(product_page)#商品頁面展示函數# def products_page(my_dict):items_dict = {} #定義函數內部字典############對商品列表進行遍歷并加上數字編號###########################i = 1print('商品列表 : ')print(30*'===')print('%-5s \t %-20s \t%s \t%-10s \t %s' % ('編號','商品名稱','商品價格(元)','商品總數量(個)','商品剩余數量(個)'))for k in my_dict:v = my_dict[k]if type(v) is dict:print('%-5d %-30s %-10d %-10d %-40d' % (i,k,v['price'],v['sum'],v['num']))items_dict[i] = [k,v['price'],v['num'],v['sum']] #將商品列表賦值到items_dicti += 1print(30*'===')return items_dict #返回格式化后的字典########################顯示購物車商品列表函數############################# def shopping_cart(show_dict):show_all_sum = 0 #初始化購物車商品總價show_all_num = 0 #初始化購物車商品數量############對商品列表進行遍歷并加上數字編號###########################print('%s ,%s ,%-10s,%s,%s,%s' % ('編號','商品名稱','商品價格(元)','商品總數量(個)','購買數量(個)','購買金額(元)'))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 shopping_cart_edit(modify_dict,modify_goods_dict):a_flag = 1 #初始化第一層編號循環(huán)標記while a_flag:index = input('請輸入商品編號 | 完成修改(q) : ')if len(index) != 0: #商品編號不為空進行字符轉化index = digit_input(index) #調用函數(自建)if index == 'q': #輸入為q,即完成修改退出breakelif index in modify_dict: #輸入為正確編號###b_flag = 1 #初始化第二層數量循環(huán)標記name = modify_dict[index][0] #對name賦值商品名稱while b_flag:num = input('請輸入新的商品數量(最大值為%d) | 完成修改(q) : ' % modify_dict[index][2] )if len(num) != 0: #商品數量不為空進行字符轉化###num = digit_input(num)if num == 'q': #輸入為q,即完成修改退出###breakelif num == 0: #輸入為0,即刪除字典中的這個條目modify_goods_dict[name]['num'] = modify_dict[index][2] #商品列表中的商品數量變?yōu)槌跏贾礵el modify_dict[index] #購物車刪除這個商品b_flag = 0elif num > 0 and num <= modify_dict[index][2]: #輸入為要求數字,則進行數量和金額修改modify_dict[index][3] = nummodify_dict[index][4] = modify_dict[index][1] * nummodify_goods_dict[name]['num'] = modify_dict[index][2] - num #更新商品列表中的商品數量b_flag = 0else:passelse:passreturn (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) = shopping_cart(my_cart)choice = input('請進行如下操作 : 修改記錄(c) | 繼續(xù)購物(!c)')if choice == 'c': ###對購物車商品列表進行修改###(my_shop_cart,my_goods_dict) = shopping_cart_edit(my_cart,my_goods_dict) ###調用商品修改函數,并返回新的商品列表###(goods_all_sum,goods_all_num) = shopping_cart(my_shop_cart) ###購物車商品展示,并返回最新的商品總價###else:passelse: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 #充值循環(huán)參數初始化###while recharge_flag:recharge_num = input('請輸入充值金額 | 返回(b) | 退出(q):')if len(recharge_num) != 0: #如果輸入非空,對輸入進行判斷并轉化類型recharge_num = digit_input(recharge_num)if recharge_num == 'q': #如果輸入為q,則退出程序sys.exit(0)elif recharge_num == 'b': #如果輸入為b,則返回第一層循環(huán),重新選擇商品編號breakelif 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 #改變充值循環(huán)參數print('充值成功,請查收'.center(80,' ')) #提示充值成功else:passreturn (recharge_init_balance,recharge_now_balance,recharge_money) #返回初始、當前、充值金額#用戶結帳函數# def pending_order(billing_list,my_cart,billing_balance):print('歡迎來到結算菜單'.center(80,'#'))if my_cart: #購物車參數不為空#############調用購物車商品列表函數################################shopping_cart(my_cart)billing_flag = input('請確認是否商品結算(y | n):')if billing_flag == 'y': #商品結算確認billing_file = open('buyer_account','w') #打開讀寫帳號文件for user_info in billing_list:billing_file.writelines(user_info) #回寫用戶列表信息billing_file.close() #關閉帳號文件sys.exit('結帳成功,你當前余額 :%d'.center(80,' ') % billing_balance)else:print('退出結算菜單,繼續(xù)購物'.center(80,' '))time.sleep(2)else:print('當前您的購物車為空,無需結算'.center(80,' '))time.sleep(2)################################主程序開始##################################################################商品列表####################################goods_list = {'iphone6s': {'price':6000,'num':10,'sum':10}, #num為當前庫存,sum為商品總數量'ipad pro': {'price':3000,'num':20,'sum':20},'Bike': {'price':2000,'num':15,'sum':15},'DLS Camera': {'price':1999,'num':8,'sum':8},'macbook pro': {'price':14000,'num':5,'sum':5},'macbook air': {'price':7000,'num':10,'sum':10},'Fountain Pen':{'price':15,'num':50,'sum':50},}######用戶注冊,寫入login_account.txt文件里######################ask_question = input('是否已經有賬號? y|n:') ###是否有賬號,是則登錄,不是則注冊while True:if ask_question == 'y':breakelse:register() ###調用登錄函數break############################################################## i = 0 while i < 3: ###只要用戶登錄異常不超過3次就不斷循環(huán)###username = input('請輸入用戶名:') ###輸入用戶名###password = input('請輸入密碼:') ###輸入隱藏密碼###user_file = open('login_account.txt','r') ###打開帳號文件####next(user_file)user_list = user_file.readlines() ###用戶列表信息###user_file.close() ###關閉帳號文件###for user_line in user_list: #對帳號文件進行遍歷,因為只有三個用戶,所以只讀前3行######################分別獲取帳號、密碼信息和當前余額##############(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 ###定義第一層循環(huán)變量參數###while first_flag:########################調用框架函數輸出用戶信息############shopping_func(username,init_balance,now_balance,recharge_value,user_shopping_cart_count)goods_output_dict = products_page(goods_list) ###調用商品列表展示函數輸出商品信息###goods_index = input('請選擇菜單 :輸入商品編號 | 購物車(c) | 余額充值(r) | 結帳(b) | 退出(q) : ')if len(goods_index) != 0: ###如果輸入非空,對輸入進行判斷并轉化類型###goods_index = digit_input(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'pending_order(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 ###定義第二層循環(huán)變量參數###while second_flag:buy_num = input('請輸入購買商品個數(最大值為%d) | 返回(b) | 退出(q): ' % goods_num)if len(buy_num) != 0: ###如果輸入非空,對輸入進行判斷并轉化類型###buy_num = digit_input(buy_num)if buy_num == 'q': ###如果輸入為q,則退出程序###sys.exit(0)elif buy_num == 'b': ###如果輸入為b,則返回第一層循環(huán),重新選擇商品編號###breakelif 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_numuser_shopping_cart[goods_index][4] += my_goods_sumnow_balance -= my_goods_sum ###計算出當前余額###goods_list[goods_name]['num'] -= buy_num ###商品列表的商品數量更新###second_flag = 0 ###設置第二層循環(huán)值為0,結束第二層循環(huán)####else:breakelse:print('您的余額不足,請充值或重新選擇,謝謝')time.sleep(2)else:passelse:passelse:if i != 2: ###i=2時,最后一次機會,不在提示還剩余0次機會了##print('用戶或密碼錯誤,請重新輸入,還有 %d 次機會' % (2 - i))i += 1 ###當用戶輸入錯誤時,循環(huán)值增加1### else:sys.exit('用戶或密碼輸入錯誤超過三次,退出系統(tǒng),歡迎下次光臨') #三次錯誤后,異常退出###?
?
轉載于:https://www.cnblogs.com/alan-babyblog/p/5161883.html
總結
以上是生活随笔為你收集整理的python基础day2作业:购物车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcdn指的是什么意思
- 下一篇: 乔恩与加菲猫引发的思考