• 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 

    做人一定要靠自己
  • 相关阅读:
    整数划分《递归法》
    hdu 1224 Free DIY Tour
    HTTP Response Status Code HTTP响应代码中文详解
    Webserive学习站点
    页面的回传与回调
    JS中apply和call函数的运用
    SOAP协议详解
    JS在firefox和IE下差异及解决方案
    关于路径的问题
    .NET中IDisposable接口的基本使用 (转)
  • 原文地址:https://www.cnblogs.com/wushank/p/5087502.html
Copyright © 2020-2023  润新知