python小项目练习(一)

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

"""
功能:
	1.用户注册,提示用户输入用户名和密码,然后获取当前注册时间,最后将用户名、密码、注册时间写入到文件。
	2.用户登录,只有三次错误机会,一旦错误则冻结账户(下次启动也无法登录,提示:用户已经冻结)。
	3.商品浏览,分页显示商品(小文件); 用户可以选择商品且可以选择数量然后加入购物车(在全局变量操作),
	  不再购买之后,需要讲购物车信息写入到文件,文件要写入到指定目录:
		shopping_car(文件夹)
			- 用户名A(文件夹)
				2019-11-11-09-59.txt
				2019-11-12-11-56.txt
				2019-12-11-11-47.txt
			- 用户B(文件夹)
				2019-11-11-11-11.txt
				2019-11-12-11-15.txt
				2019-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 datetime
import os,sys

def 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_warp
def 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 dic

def 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_warp
def 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(‘没有此商品‘)
        return

def 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_warp
def 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)

  

原文地址:https://www.cnblogs.com/jinyan-huang/p/11438317.html

时间: 2024-11-08 23:46:43

python小项目练习(一)的相关文章

超实用python小项目--基于python的手机通讯录二维码生成网站--1、项目介绍和开发环境

这个项目是我做完整的第一个python web项目,对于新手来说,这个项目绝对是一个特别好的练手项目. 起名还是困难,但是自己确实比较烦输入这么长的名字(手机通讯录二维码生成网站)去定义这个网站,所以还是给这个项目起个名字吧,叫什么呢?就叫 "鹅日通讯录"吧(Earth address list). --------------------------------------------------------------------------------------------我是

[IT学习]Python 小项目 通讯录 思路

建立一个通讯录查询软件,暂时只支持按姓名检索.出发点:无需登录企业门户,即可检索.要注意保护员工手机号,除非他自己同意显示. 欢迎您访问www.cnblogs.com/viphhs.转载请联系作者授权. 思路: 1.爬虫爬取基本数据,以字典加列表方式存放. 2.将该数据利用pandas存入csv. http://code-love.com/2017/04/30/ http://pandas.pydata.org/ http://pda.readthedocs.io/en/latest/chp5.

1.python小项目:大数据统计

大数据统计 1.项目需求,统计海量数据中某一参数的概率分布 2.实现过程 #!/usr/bin env python # -*- coding:utf-8 -*- import re def preprocess(fileName, pattern): ''' 将数据集进行预处理,比如取出RSSI那一列的数据 :param fileName: 接收相对路径 :param pattern: 接收正则表达式的模板 :return: 返回Region of interest数据集 ''' with o

给大家推荐:五个Python小项目,Github上的人气很高的

1.深度学习框架 Pytorch https://github.com/pytorch/pytorch PyTorch 是一个 Torch7 团队开源的 Python 优先的深度学习框架,提供两个高级功能: ● 强大的 GPU 加速 Tensor 计算(类似 numpy) ● 构建基于 tape 的自动升级系统上的深度神经网络 ● 你可以重用你喜欢的 python 包,如 numpy.scipy 和 Cython ,在需要时扩展 PyTorch. 2.deepfake 的深度学习技术 Facew

给大家推荐:五个Python小项目,Github上的人气很高的!

1.深度学习框架 Pytorch https://github.com/pytorch/pytorch PyTorch 是一个 Torch7 团队开源的 Python 优先的深度学习框架,提供两个高级功能: ● 强大的 GPU 加速 Tensor 计算(类似 numpy) ● 构建基于 tape 的自动升级系统上的深度神经网络 ● 你可以重用你喜欢的 python 包,如 numpy.scipy 和 Cython ,在需要时扩展 PyTorch. 2.deepfake 的深度学习技术 Facew

python小项目练习之转换像素图片为字符图

实例来源实验楼网站,没事可以多逛逛,在此多谢实验楼的无私分享 1 from PIL import Image 2 import argparse 3 4 """ 5 description: 6 将图片像素转换为字母重新绘制输出 7 """ 8 9 ascii_char = list("[email protected]%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<

3.python小项目:学生选课系统

学生选课系统 编程核心:在对象中封装对象 目录结构: 1.administrator.py import random import os import sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import time import pickle from lib import models from config import settings from lib.models import * # 全部导入

Python 小项目

随机产生句子 nouns = ['apple', 'ball', 'cat', 'dog', 'elephant', 'fish', 'goat', 'house', 'iceberg', 'jackal', 'king', 'llama', 'monkey', 'nurse', 'octopus', 'pie', 'queen', 'robot', 'snake', 'tofu', 'unicorn', 'vampire', 'wumpus', 'x-ray', 'yak', 'zebra']

几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python语法简洁清晰. 语法简洁清晰,那么我们用少量的Python代码能做哪些有趣的东西?温馨提示:文末必看. 一.画爱心表白 1.图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range:for Y in range)就会每行每列的打印. 2.Python代码与注释: 理清思路一行代