python之編寫購物車(第二天)


作業:
編寫購物車

具體實現了如下功能:
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('用戶或密碼輸入錯誤超過三次,退出系統,歡迎下次光臨')          ###用戶輸入三次錯誤后,異常退出###
購物車python2.7

 

 

四、具體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('用戶或密碼輸入錯誤超過三次,退出系統,歡迎下次光臨')          ###用戶輸入三次錯誤后,異常退出###
購物車python3.4

 

五、效果圖展示:

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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM