• python 学习分享-购物车实操篇


    程序要求如下:

    '''购物车程序:
    启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
    允许用户根据商品编号购买商品
    用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    可随时退出,退出时,打印已购买商品和余额
    在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
    用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
    允许查询之前的消费记录
    '''

    做题的整体思路如下,主要是封装了两个函数,然后调用函数,写到主程序中,写完了所有的代码

    '''考虑到程序需要读取用户名、密码、salary、已购物品、物品列表'''
    '''创建了三个文件,一个文件存放用户名、密码、salary,为了判断用户是不是第一次登陆,所以在文件中直接写入salary ='n',第二个文本存放物品清单,第三个文件存放用户名、对应的已购物品、及消费时间'''
    '''创建第一个认证函数,认证用户名、密码,并在成功后,打开第三个文件(已购物品文件),写入到dict中,返回用户字典、已购物品字典、用户名。这里不能用salary是否为n来判断已购文件是否不存在该用户的购物记录。如果用户第一次登陆后输入了salary,但是未购买任何物品,已购清单仍然为空'''
    '''创建第二个物品列表函数,将物品文件中的内容拿出来,组成一个列表'''
    '''编写主程序,验证salary是否为n,消费、查询、退出,最后将内容写回文件中,完成'''

    总结

    本程序对我这个水平的人来说还是很有难度的,经历了多次改写,更换解题思路,然后又因为对字典、列表、int、str不熟悉,导致写完的程序,各种错误,测试改错又用了很长时间,差不多10多个小时,才完成了这个程序。多练还是有好处的! 

    代码部分

    '''购物车程序:
    启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
    允许用户根据商品编号购买商品
    用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    可随时退出,退出时,打印已购买商品和余额
    在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
    用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
    允许查询之前的消费记录
    '''
    import time
    def user_get():
        user_o = open('user.txt','r')
        user_p_m = {}
        for line in user_o.readlines():
            if not line:
                continue
            line_u = line.strip().split()[0]
            user_p_m[line_u] = {}
            user_p_m[line_u]['password']=line.strip().split()[1]
            user_p_m[line_u]['money']=line.strip().split()[2]
        user_o.close()
        count = 0
        while 1:
            username = input('input your username:')
            password = input('input your password:')
            if count < 3:
                if user_p_m.get(username) and user_p_m[username]['password']==password:
                    print('Welcome login!')
                    break
                else:
                    print('your username or password is wrong')
            else:
                print('you have try so many times,you will exit')
                exit()
            count+=1
        sav_goods_o = open('savegoods.txt', 'r')
        sav_d = {}
        for line_s in sav_goods_o.readlines():
            if not line_s:
                continue
            line_k = line_s.strip().split()[0]
            line_vg = line_s.strip().split()[1]
            line_vt = line_s.strip().split()[2]
            if not sav_d.get(line_k):
                sav_d[line_k] = []
            sav_d[line_k].append({line_vg: line_vt})
        sav_goods_o.close()
        return username,user_p_m,sav_d
    def goods_get():
        goods_o = open('goods.txt', 'r')
        goods_d = []
        for line in goods_o.readlines():
            if not line:
                continue
            goods_g = line.strip().split()[0]
            goods_m = line.strip().split()[1]
            goods_d.append([goods_g, goods_m])
        goods_o.close()
        return goods_d
    
    username,user_d_m,sav_d = user_get()
    goods_d = goods_get()
    goods_t = []
    while 1:
        if user_d_m[username]['money'] == 'n':
            money = input('input your salary:')
            if money.isdigit():
                user_d_m[username]['money'] = int(money)
            else:
                print('33[34;1m非法33[0m字符,请重新输入!')
        else:
            user_d_m[username]['money']=int(user_d_m[username]['money'])
            print('商品列表'.center(30,'*'))
            for i in range(len(goods_d)):
                print(i, goods_d[i][0], '  ', goods_d[i][1] + '')
            print('*'.center(35,'*'))
            goods_num = input('33[33;1m请输入您需要的商品编号33[0m
    或者按33[35;1mh33[0m查看历史记录,按33[36;1mq33[0m键退出程序:')
            if goods_num.isdigit():
                if int(goods_num)  in range(len(goods_d)):
                    if user_d_m[username]['money']>=int(goods_d[int(goods_num)][1]):
                        time_now=time.strftime('%Y-%m-%d',time.localtime(time.time()))
                        user_d_m[username]['money']-=int(goods_d[int(goods_num)][1])
                        if sav_d.get(username):
                            sav_d[username].append({goods_d[int(goods_num)][0]:time_now})
                        else:
                            sav_d[username]=[{goods_d[int(goods_num)][0]:time_now}]
                        goods_t.append(goods_d[int(goods_num)][0])
                        print('您购买了33[32;1m%s33[0m,花费33[31;1m%s33[0m元'%(goods_d[int(goods_num)][0],goods_d[int(goods_num)][1]))
                    else:
                        print('余额为33[31;1m%s33[0m,不足'%(user_d_m[username]['money']))
                else:
                    print('您输入的编号33[34;1m有误33[0m,请重新输入!')
            else:
                if goods_num == 'h':
                    if sav_d.get(username):
                        print('您的购买记录如下:33[32;1m%s33[0m' %(sav_d[username]))
                    else:
                        print('您还未购买任何物品')
                elif goods_num == 'q':
                    if len(goods_t):
                        print('您的余额为33[31;1m%s33[0m,您本次购买了33[32;1m%s33[0m'%(str(user_d_m[username]['money']),goods_t))
                    else:
                        print('您的余额为33[31;1m%s33[0m,您本次未购买任何商品' % (str(user_d_m[username]['money'])))
                    break
                else:
                    print('33[34;1m非法33[0m字符,请重新输入!')
    
    
    user_w = open('user.txt','w')
    for us_l in user_d_m:
        us_l_w = us_l +' '+ user_d_m[us_l]['password']+' '+str(user_d_m[us_l]['money']) + '
    '
        user_w.write(us_l_w)
    user_w.close()
    sav_goods_o = open('savegoods.txt', 'a')
    
    for goods_save in range(len(goods_t)):
        sa_l_w = username + ' '+ goods_t[goods_save] + ' '+time_now+ '
    '
        sav_goods_o.write(sa_l_w)
    sav_goods_o.close()
    exit()
  • 相关阅读:
    推荐一款适合Dynamics 365/Dynamics CRM 2016 使用的弹出窗插件AlertJs
    SSRS 报表开发过程中,除数为0的处理
    [Dynamics 365] 关于Currency的一点随笔
    [Microsoft Dynamics CRM 2016]Invalid Action – The selected action was not valid 错误的诱因及解决方法
    [Dynamics CRM 2016]如何配置多语言显示
    获取经过跳转后的url地址
    Microsoft Dynamics CRM 2013 --针对特定实体,取消保存功能(包含自动保存)
    Microsoft Dynamics CRM 2013 --选项集的多选
    我自己也是找了好久这样的远程打印软件
    QTextStream 读取文件乱码的解决办法
  • 原文地址:https://www.cnblogs.com/laay/p/6413386.html
Copyright © 2020-2023  润新知