今日作业详解

今日作业详解

1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化

# 1.获取指定路径
    import os

    target_path = input('请输入目录路径>>>:').strip()  # aaa
    # 2.获取目标后缀
    target_back = input('请输入目标后缀>>>:').strip()  # .txt
    # 3.获取指定路径下所有的文件名称
    file_name_list = os.listdir(target_path)  # ['111.py', '222.py', '333.py', 'a.txt', 'a1', 'b.txt']
    # 4.循环获取每一个文件名 然后判断是否以.txt结尾
    count = 0
    for file_name in file_name_list:
        if file_name.endswith(target_back):
            count += 1
    print(f'目录{target_path}下后缀名为{target_back}的文件数目有:{count}')     

2.针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便

import json

    d = {'name': 'jason3', 'pwd': 123}
    with open(r'userinfo.json', 'a', encoding='utf8') as f:
        # json.dump(d, f)  # 该方法无法实现换行多次写入
        res = json.dumps(d)
        f.write(res)
        f.write('\n')

    with open(r'userinfo.json','r',encoding='utf8') as f:
        for line in f:
            new_line = line.strip('\n')
            res = json.loads(new_line)
            print(res, type(res))
	 # ps:针对json格式数据 单文件单用户更方便一些

3.编程小练习
有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径

import os
    # 1.获取当前执行文件所在的路径
    base_dir = os.path.dirname(__file__)
    # 2.拼接存储多个文本文件目录的路径
    db_dir = os.path.join(base_dir, 'bbb')
    # 3.获取路径下所有的文件名称
    file_name_list = os.listdir(db_dir)
    while True:
        # 4.循环打印文件名称 并采用枚举的形式方便用户选择
        for i, j in enumerate(file_name_list, start=1):  # [11, 22, 33, 44, 55, 66, 77]
            print(i, j)
        # 5.获取用户想要打开的文件编号
        file_num = input('请输入您想要打开的文件编号>>>:').strip()
        # 6.判断编号是否是纯数字
        if not file_num.isdigit():
            print('文件编号只能是数字')
            continue
        file_num = int(file_num)
        # 7.判断数字是否在合理范围内
        if file_num not in range(1, len(file_name_list) + 1):
            print('文件编号超出了范围')
            continue
        # 8.获取目标文件名称
        file_name = file_name_list[file_num - 1]
        # 9.拼接文件的绝对路径
        file_path = os.path.join(db_dir, file_name)
        # 10.文件操作简单的读取展示
        with open(file_path, 'r', encoding='utf8') as f:
            print(f.read())

购物车

4.周末大作业(尝试编写)
项目功能
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
项目说明
用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
数据格式 {“name”:“jason”,“pwd”:123}
# ps:文件名可以直接用用户名便于校验
用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
{“balance”:15000,“shop_car”:{}}
添加购物车功能 商品列表可以自定义或者采用下列格式
good_list = [
[‘挂壁面’,3]
[‘印度飞饼’, 22]
[‘极品木瓜’, 666],
[‘土耳其土豆’, 999],
[‘伊拉克拌面’, 1000],
[‘董卓戏张飞公仔’, 2000],
[‘仿真玩偶’, 10000]
]
用户可以反复添加商品,在购物车中记录数量
{‘极品木瓜’:[个数,单价]}
结算购物车
获取用户购物车中所有的商品计算总价并结算即可
针对添加购物车和结算只有登录的用户才可以执行

import json
import os

# 1.先获取执行文件所在的路径
base_dir = os.path.dirname(__file__)
# 2.拼接db文件夹的路径
db_dir = os.path.join(base_dir, 'db')
# 3.判断db路径是否已存在 如果存在则无需创建 不存在则自动创建
if not os.path.exists(db_dir):
    os.mkdir(db_dir)

is_login = {
    'username': '',  # 用户登录成功之后 记录用户名 便于后续查找并修改用户对应的数据
}


# 校验用户登录装饰器
def login_auth(func_name):
    def inner(*args, **kwargs):
        # 1.判断全局字典键username是否已经有值
        if is_login.get('username'):
            res = func_name(*args, **kwargs)
            return res
        else:
            print('请先登录')
            login()  # 自动调用登录函数完成登录操作

    return inner


def register():
    while True:
        # 1.获取用户名和密码
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        confirm_pwd = input('confirm_pwd>>>:').strip()  # 密码的二次确认
        # 2.先判断两次密码是否一致  (含有很多细小的判断 比如输入不能为空 结束符...)
        if not password == confirm_pwd:
            print('两次密码不一致')
            continue
        # 补充校验:用户名是否已存在(思路1:可以使用os.listdir()   思路2:拼接用户文件路径)
        # 4.拼接存储用户数据的json文件完整路径
        file_path = os.path.join(db_dir, '%s.json' % username)  # ...db/jason.json
        if os.path.exists(file_path):
            print('用户名已存在')
            continue
        # 3.构建临时的用户字典数据
        temp_user_dict = {
            'name': username,
            'pwd': password,
            'balance': 15000,
            'shop_car': {}
        }
        # 5.文件操作将用户字典序列化到json文件中
        with open(file_path, 'w', encoding='utf8') as f:
            json.dump(temp_user_dict, f)
        print(f'用户{username}注册成功')
        return


def login():
    while True:
        # 1.获取用户名和密码
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 2.拼接当前用户文件路径
        file_path = os.path.join(db_dir, '%s.json' % username)
        # 3.判断文件路径是否存在(如果存在说明有该用户名对应的用户 如果不存在表示没有该用户)
        if not os.path.isfile(file_path):
            print('用户名不存在')
            continue
        # 4.根据文件路径获取对应用户的字典数据
        with open(file_path, 'r', encoding='utf8') as f:
            user_dict = json.load(f)
        # 5.判断用户密码是否一致
        if password == user_dict.get('pwd'):
            # 保存登录用户的用户名(登录状态)
            is_login['username'] = user_dict.get('name')
            print('登录成功')
            return
        else:
            print('密码错误')


@login_auth
def add_shop_car():
    # 1.获取商品数据(直接编写)
    good_list = [
        ['挂壁面', 3],
        ['印度飞饼', 22],
        ['极品木瓜', 666],
        ['土耳其土豆', 999],
        ['伊拉克拌面', 1000],
        ['董卓戏张飞公仔', 2000],
        ['仿真玩偶', 10000]
    ]
    # 定义一个临时存储用户想要购买商品的字典数据  {'印度飞饼':[10, 22], '仿真玩偶':[1, 10000]}
    temp_shop_dict = {}
    # 2.循环打印商品信息购用户选择
    while True:
        # 3.打印商品数据
        for i, j in enumerate(good_list):  # i 数值    j 列表
            print(f"商品编号:{i}    |   商品名称:{j[0]}     |   商品单价:{j[1]}")
        # 4.获取用户想要添加的商品编号
        target_good_id = input('请输入想要购买的商品编号(q)>>>:').strip()
        # 添加一个结束添加购物车的标识 一旦用户输入q则将用户临时购物车字典添加到用户json数据中
        if target_good_id == 'q':
            # 拼接当前登录用户数据文件路径
            file_path = os.path.join(db_dir, '%s.json' % is_login.get('username'))
            # 获取当前用户的具体数据
            with open(file_path, 'r', encoding='utf8') as f:
                user_dict = json.load(f)  # {"name": "jason", "pwd": "123", "balance": 15000, "shop_car": {}}
            # user_dict['shop_car'] = temp_shop_dict  # "shop_car": {'印度飞饼':[10, 22],'土耳其土豆':[20, 999]}
            """
            如果直接替换 那么可能会吧之前的购物车数据顶替 不够全面
            """
            # 先获取用户原有的购物车数据
            old_shop_car = user_dict.get('shop_car')  # {'印度飞饼':[10, 22],'土耳其土豆':[20, 999]}
            # 当前用户购物车数据 {'挂壁面': [300, 3], '土耳其土豆': [100, 999], '董卓戏张飞公仔': [200, 2000]}
            for good_name in temp_shop_dict:
                if good_name in old_shop_car:
                    old_shop_car.get(good_name)[0] += temp_shop_dict.get(good_name)[0]
                else:
                    old_shop_car[good_name] = temp_shop_dict.get(good_name)
            # 写入数据
            user_dict['shop_car'] = old_shop_car
            with open(file_path, 'w', encoding='utf8') as f:
                json.dump(user_dict, f)
            print('添加购物车成功')
            return

        # 5.小的逻辑校验(是否是纯数字 是否在范围内)
        if not target_good_id.isdigit():
            print('商品编号只能是数字')
            continue
        target_good_id = int(target_good_id)
        if target_good_id not in range(len(good_list)):
            print('商品编号超出了范围')
            continue
        # 6.根据用户输入的商品编号获取商品信息
        target_good_info = good_list[target_good_id]  # ['印度飞饼', 22]
        target_good_name = target_good_info[0]
        target_good_price = target_good_info[1]

        # 7.获取用户想要购买的数量
        target_good_num = input('请输入想要购买的商品数量>>>:').strip()
        if not target_good_num.isdigit():
            print('商品数量只能是数字')
            continue
        target_good_num = int(target_good_num)
        # 8.写入临时购物车字典
        # temp_shop_dict[target_good_info[0]] = [target_good_num, target_good_info[1]]
        """
        d = {}
        第一次买 印度飞饼  5
            d['印度飞饼'] = [5, 22]
                {'印度飞饼':[5, 22]}          
        第二次买 印度飞饼  5
            d['印度飞饼'] = [5, 22]
                {'印度飞饼':[5, 22]}
        判断临时购物车中是否已经含有该商品键 如果有的话 应该获取对应的值然后自增
        如果没有的话 才应该新增键值对
        """
        if target_good_name in temp_shop_dict:
            # 获取值列表 然后自增
            value_list = temp_shop_dict.get(target_good_name)  # [5, 22]
            value_list[0] += target_good_num  # [5+5, 22]
            temp_shop_dict[target_good_name] = value_list  #
        else:
            temp_shop_dict[target_good_name] = [target_good_num, target_good_price]


@login_auth
def buy_shop_car():
    # 1.拼接用户文件完整路径
    file_path = os.path.join(db_dir, '%s.json' % (is_login.get('username'),))
    # 2.读取用户数据
    with open(file_path, 'r', encoding='utf8') as f:
        user_dict = json.load(f)
    # print(user_dict)  # {'name': 'jason', 'pwd': '123',
    # 'balance': 15000, 'shop_car': {'挂壁面': [100, 3], '土耳其土豆': [50, 999], '印度飞饼': [33, 22]}}
    # 3.获取购物车商品数据
    shop_car = user_dict.get('shop_car')  # {'挂壁面': [100, 3], '土耳其土豆': [50, 999], '印度飞饼': [33, 22]}
    if not shop_car:
        print('你先去买东西 行不行')
        return
    # 4.计算商品的总价
    total_money = 0
    current_balance = user_dict.get('balance')
    for values in shop_car.values():  # [100, 3]      [50, 999]
        total_money += values[0] * values[1]
    # 5.判断余额是否充足
    if current_balance >= total_money:
        rest_money = current_balance - total_money
        user_dict['balance'] = rest_money
        user_dict['shop_car'] = {}
        with open(file_path, 'w', encoding='utf8') as f:
            json.dump(user_dict, f)
        print(f'今日消费:{total_money} 卡上余额:{rest_money}')
    else:
        print('你个穷逼 钱不够')
        return


func_dic = {
    '1': register,
    '2': login,
    '3': add_shop_car,
    '4': buy_shop_car
}
while True:
    print("""
1.注册功能
2.登录功能
3.添加购物车
4.结算购物车
""")
    choice = input('请输入功能编号>>>:').strip()
    if choice in func_dic:
        func_dic.get(choice)()
    else:
        print('输入不合法')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值