python小项目练习(一),,写了一天,感觉人要渣


写了一天,感觉人要渣。。收获蛮多,但也有不少BUG,先放上来,日后继续学习完善。。。。

"""功能:1.用户注册,提示用户输入用户名和密码,然后获取当前注册时间,最后将用户名、密码、注册时间写入到文件。2.用户登录,只有三次错误机会,一旦错误则冻结账户(下次启动也无法登录,提示:用户已经冻结)。3.商品浏览,分页显示商品(小文件); 用户可以选择商品且可以选择数量然后加入购物车(在全局变量操作),  不再购买之后,需要讲购物车信息写入到文件,文件要写入到指定目录:shopping_car(文件夹)- 用户名A(文件夹)2019-11-11-09-59.txt2019-11-12-11-56.txt2019-12-11-11-47.txt- 用户B(文件夹)2019-11-11-11-11.txt2019-11-12-11-15.txt2019-12-11-11-22.txt  注意:重复购买同一件商品时,只更改购物车中的数量。4.我的购物车,查看用户所有的购物车记录,即:找到shopping_car目录下当前用户所有的购买信息,并显示:2019-11-11-09-59飞机|1000|10个大炮|2000|3个2019-11-12-11-56.txt迫击炮|10000|10个手枪|123|3个5.用户未登录的情况下,如果访问 商品流程 、我的购物车 时,提示登录之后才能访问,让用户先去选择登录(装饰器实现)。"""from datetime import datetimeimport os,sysdef shoop_warp(func):    def inner(*args,**kwargs):        if not SUSS_USER:            print(‘请先登陆‘)            return        func(*args,**kwargs)    return inner#装饰器判断用户登陆def user_on_warp(func):    def inner(*args,**kwargs):        if ERR_USER.get(args[0],0) >=3:            print(‘账户已被冻结‘)            write_err_user()            return        elif args[0] in SUSS_USER:            print(‘登陆重复‘)            return        elif len(SUSS_USER) > 0:            print(‘已有账号登陆,请注销再登陆,当前账号为%s‘%(SUSS_USER[0]))            return        func(*args,**kwargs)    return inner# 装饰器:判断注册用户是否已被注册def user_warp(func):    ‘‘‘    1.加载用户文件,返回用户列表    2.判断用户名是否跟用户列表重名,返回False 则退出 return    3.判断用户必须为字母,返回False 则退出 return    4.满足以上条件后,则执行user_log函数    ‘‘‘    def inner(*args,**kwargs):        ls = read_user()        if ls.count(args[0]):            print(‘用户已存在‘)            return        if args[0].isdigit():            print(‘必须字母‘)            return        func(*args,**kwargs)    return inner#用户注册写入文件@user_warp #user_log = user_wap(user_log)def user_log(user_name,pwd):    ‘‘‘    1.获取当前注册时间    2.把用户名、密码、时间,拼接起来,用逗号分隔    3.获取文件user.txt文件路径    4.写入user.txt文件    5.执行建立用户的文件夹    ‘‘‘    date = datetime.now().strftime(r‘%Y-%m-%d‘)    s = ‘%s,%s,%s\n‘%(user_name,pwd,date)    path = os.path.join(os.path.dirname(__file__),‘user.txt‘)    with open(path,mode=‘a‘,encoding=‘utf-8‘) as f:        f.write(s)    create_user_dir(user_name)    print(‘创建成功重新执行程序‘)    sys.exit()#读取注册用户def read_user():    ‘‘‘    1.生成列表    2.读取user.txt文件内容    3.加入列表    4.返回列表    ‘‘‘    ls = []    path = os.path.join(os.path.dirname(__file__),‘user.txt‘)    with open(path,mode=‘r‘,encoding=‘utf-8‘) as f:        for line in f:            l = line.split(‘,‘)            ls.append(l[0])    return ls#读取注册用户密码def read_pwd():    ‘‘‘    1.生成列表    2.读取user.txt文件内容    3.加入列表    4.返回列表    ‘‘‘    ls = []    path = os.path.join(os.path.dirname(__file__),‘user.txt‘)    with open(path,mode=‘r‘,encoding=‘utf-8‘) as f:        for line in f:            l = line.split(‘,‘)            ls.append(l[1])    return ls#创建文件目录def create_user_dir(user_name):    ‘‘‘    1.获取文件夹绝对路径    2.创建目录名    3.创建目录绝对路径 + 文件名目录    ‘‘‘    path = os.path.join(r‘G:\PT_pro\day16\shopping_car‘,user_name)    os.mkdir(path)#用户登陆@user_on_warpdef user_on(user_name,pwd):    user_ls = read_user()    pwd_ls = read_pwd()    for u,p in zip(user_ls,pwd_ls):        if user_name == u and pwd == p:            print(‘登陆成功‘)            SUSS_USER.append(u)            return        elif user_name == u and pwd != p:            print(‘密码错误‘)            ERR_USER.setdefault(u,0)            ERR_USER[u] +=1            return    print(‘用户或密码错误‘)    return#写入锁定用户def write_err_user():    with open(‘err.txt‘,mode=‘w‘,encoding=‘utf-8‘) as f:        for k,v in ERR_USER.items():            f.write(‘%s:%s\n‘%(k,v))            f.close()#初始化读取锁定用户def read_err_user():    with open(‘err.txt‘,mode=‘r‘,encoding=‘utf-8‘) as f:        dic = {}        for line in f:            ls = line.strip().split(‘:‘)            dic[ls[0]] = int(ls[1])        return dicdef show_menu():    print(‘‘‘1.用户注册2.用户登陆3.退出当前账户4.商品游览5.我的购物车    ‘‘‘)#退出当前用户def log_out_user():    SUSS_USER.clear()def read_goods():    with open(‘goods‘,mode=‘r‘,encoding=‘utf-8‘) as f:        data = f.readlines()    return data@shoop_warpdef show_shopping():    count = 5    while True:        page = int(input(‘请输入页码‘))        start = (page-1)*count        end = (page*count)+1        date = GOODS_LIST[start:end]        # if not date:        #     print(‘超出范围‘)        #     continue        for i in date:            print(i)        seq = input(‘请输入需要购买的商品序号,输入q进行下一次输入,或输入N退出购买界面:‘)        if seq.lower() == ‘q‘:            continue        elif seq.lower() ==‘n‘:            return        num = int(input(‘请输入购买的数量:‘))        d=buy_good(seq,num)        if d:            print(‘购买成功‘)            write_good_file(SUSS_USER[0])def buy_good(seq,num):    dic = {}    for good in GOODS_LIST:        good = ‘|‘.join(good.split(‘.‘)).strip().split(‘|‘)        if seq == good[0]:            dic[seq] = good[1]            dic[‘price‘] = good[2]            dic[‘num‘] = num            add_goods(dic,seq,num)            return True    else:        print(‘没有此商品‘)        returndef add_goods(dic,seq,num):    if  not BUY_GOODS:        BUY_GOODS.append(dic)        return    for i in range(len(BUY_GOODS)):        if seq in BUY_GOODS[i].keys():            BUY_GOODS[i][‘num‘] += num            return    BUY_GOODS.append(dic)def write_good_file(username):    dir_path =os.path.join( r‘G:\PT_pro\day16\shopping_car‘,username)    date = datetime.now().strftime(‘%Y-%m-%d‘)    path = os.path.join(dir_path,date)+‘.txt‘    with open(path,mode=‘w‘,encoding=‘utf-8‘) as f:        for good in BUY_GOODS:            f.write(str(good)+‘\n‘)@shoop_warpdef my_shop_list(username):    abs = os.path.join(‘G:\PT_pro\day16\shopping_car‘,username[0])    re = os.listdir(abs)    for i in range(len(re)):        path = os.path.join(abs,re[i])        with open(path,mode=‘r‘,encoding=‘utf-8‘) as f:            print(re[i])            for line in f:                print(line.strip())#登陆成功的用户SUSS_USER = []#锁定用户字典ERR_USER = read_err_user()#初始化商品GOODS_LIST = read_goods()#购物车BUY_GOODS = []fucn_list = {"1":user_log,"2":user_on,"3":log_out_user,"4":show_shopping,"5":my_shop_list}while True:    show_menu()    num = input(‘请输入序号‘)    if num == ‘1‘:        username = input(‘请输入注册用户‘)        pwd = input(‘请输入密码‘)        fucn_list[num](username,pwd)    elif num == ‘2‘:        username = input(‘请输入账号‘)        pwd = input(‘请输入密码‘)        fucn_list[num](username,pwd)    elif num ==‘3‘:        fucn_list[num]()    elif num ==‘4‘:        fucn_list[num]()        GOODS_LIST.clear()    elif num ==‘5‘:        fucn_list[num](SUSS_USER)

  

python小项目练习(一)

评论关闭