周总结--20221023

近期遗忘知识回顾

代码打开文件时注意:
with open(文件路径,模式,字符编码)as 变量名
这个地方变量名相当于就是指代了文件名,一般用f来指代,如果得到的文件路径是字符串格式的,那么就不需要r'路径'  了,模式r是只读,w是只写,a是追加,t是文本模式,b是二进制模式。
单写一个r,w,a,时默认是rt,wt,at 文本模式操作。 rb,wb,ab,是二进制模式打开。

文件想要读或者for循环,那么打开必须是'r'模式打开。

只要用'w'只写模式打开后,再执行f.write(),会先清空调打开的这个文件,再往里面写。
如果文件名不存在,执行w模式打开后,会自动创建一个该名字的文件。

'a'追加模式,打开文件后,f.write(),自动在该文件末尾追加内容。
装饰器语法糖总结

image

生成器总结

image

json模块与os模块的使用

image

sys模块的使用一般配合os模块的使用
os.path.dirname(__file __)方法获取路径,
sys.path得到的是电脑系统的环境变量,再通过.append()方法将获取到的路径添加到环境变量中去,这样就能实现执行文件再cmd里面运行时,被导入的模块电脑依然能正常找到。
判断用户名是否存在的套路
由于先阶段一个用户的信息存放在一个用户文件中,该用户文件的文件名都是用户名.json的格式,所以只要判断有没有这个文件名就能得出有没有该用户名的存在了!!!
两种方法:
1.利用os.listdir()方法获取到db文件夹里面的所有文件名称,所有文件名称都在一个列表里面,这个时候可以拿获取到的用户名拼接一个.json后,再与列表里面的文件名比较判断在不在,或者将列表里面的文件名用strip方法脱除掉.json后,再与用户输入的用户名进行比较,都比较烦
2.直接用户名.json与db文件夹得路径拼接一下,拼成的路径,再用os.path.isfile()方法判断该拼接出的文件路径存不存在,如果已经存在了,说明已经注册过了!!!一般用该方法判断用户名是否存在!!!

项目文件代码套路

core文件夹下建一个src.py文件,该文件下写项目的主体框架代码,都写好后用一个自定义把整体包一下,一般自定义函数名就直接写run
bin文件下建一个start.py文件,一般就3行启动src里面run函数的代码,如果有需要在前3行代码的上方,再加3行添加项目路径到环境变量的代码,也就是start.py文件里面就最多6行代码!!

各个功能函数的代码一般不复杂就可以直接都写在common.py文件里面,和装饰器等放在一起,
或者太复杂可以一个功能放一个文件里面,那么每一个功能函数的上面都要把装饰器的名称给导进来,这样在功能函数的代码的最上面就可以@装饰器函数名  给功能函数进行装饰了!!!

代码实战篇

要求

.按照软件开发⽬录规范创建出完整⽬录

.核⼼逻辑⽂件中编写调用⽤户注册登录功能,

.注册功能要有校验⽤户是否存在和数据保存的功能

.common.py⽂件中编写⼀个可以统计函数运⾏时间的装饰器给每个核⼼逻辑功能添加上统计执⾏功能

.⽤户数据保存使⽤json格式并且单⽤户单⽂件

.添加查看全体⽤户数据功能

.⽤户选择需要查看的⽤户数据后直接打印出该⽤户数据的全部信息

(⾃由发挥 可以直接打印反序列化后的字典或者格式化美化输出)

.添加执⾏操作系统命令功能,⽤户选择该功能后 获取⽤户想要执⾏的操作命令 交由操作系统执⾏,将返回结果打印给⽤户查看

.

  • 先写整体框架结构代码,core文件夹里面建一个src.py文件
from lib.common import register, login, check1          # 导入对应的功能函数的对应函数名

func_dict = {                                       # 定义一个功能函数名为值的字典
    '1': register,
    '2': login,
    '3': check1,
}
def run():                        # 函数主体运行的框架代码
    while True:
        print("""
        1.注册功能
        2.登录功能
        3.查看用户数据
        0.退出程序
        """)
        func_n = input('请输入要执行的功能编号')
        if func_n not in func_dict:
            print('没有您要执行的功能编号')
        if func_n == '0':
            break
        func_dict.get(func_n)()        # 根据用户输入编号,在字典里面找到对应的功能函数名再加括号运行函数

image
.
.

  • 开始写各功能函数的代码
import os
import json
import time


base_dir = os.path.dirname(os.path.dirname(__file__))  # dirname获取当前文件所在的目录路径,嵌套使用就是获取上一级的路径
db_dir = os.path.join(base_dir,'db')        # 项目根目录路径与'db'拼接
if not os.path.isdir(db_dir):  # 判断db文件目录是否存在,就是判断db文件夹存不存在
    os.mkdir(db_dir)           # 不存在就创建一个



# 装饰器
def outer(func):
    def inner(*args,**kwargs):
        start_time = time.time()                          # 获取时间戳
        res = func(*args,**kwargs)
        end_time = time.time()                           # 再获取时间戳
        use_time = end_time - start_time
        print(f'程序执行时间为{use_time}')                  # 打印统计时间
        return res
    return inner



@outer
def register():           # 先写注册功能
    while True:
        username = input('请输入用户名q>>:').strip()
        if username == 'q':
            break
        user_file_path = os.path.join(db_dir, f'{username}.json')  # 将db文件路径与用户名.json文件名拼接,形成字符串,后续打开不需要r''了
        if os.path.isfile(user_file_path):  # 判断拼接的路径是否已经存在
            print('该用户名已经存在,请重新注册')
            continue
        password = input('请输入密码').strip()  # 获取用户密码
        age = input('请输入年龄').strip()       # 获取用户年龄
        user_dict = {
            'real_name': username,  # 构建用户字典
            'real_pwd': password,
            'real_age':age,
            'real_account': 10000,
            'shop_car': []
        }
        with open(user_file_path, 'w', encoding='utf8')as f:  # 用w模式打开该文件,如果这个文件不存在,就会自动创建该文件了
            json.dump(user_dict, f)                       # 先将字典转为json格式,再写入文件
            print('用户注册成功')
            break




@outer
def login():               # 再写登录功能
    while True:
        username = input('请输入用户名q>>:').strip()
        if username == 'q':
            break
        user_file_path = os.path.join(db_dir, f'{username}.json')     # 还是先拼接出用户名文件路径
        if not os.path.isfile(user_file_path):     # 判断这个路径存不存在
            print('该用户名不存在')
            continue
        password = input('请输入密码').strip()
        with open(user_file_path, 'r', encoding='utf8')as f:        # r模式打开用户文件
            user_dict2 = json.load(f)                # 先读出来,再反序列化将json格式数据转为正常格式数据
            if user_dict2.get('real_pwd') == password:   # 判断密码是否正确
                print('登录成功')
                break
            else:
                print('密码错误')




@outer
def check1():              # 再写查看功能
    while True:
        username = input('请输入用户名(q):').strip()
        user_file_path = os.path.join(db_dir, f'{username}.json')    # 还是先拼接出用户名文件路径
        if username == 'q':
            break
        with open(user_file_path, 'r', encoding='utf8') as f:
            user_dict = json.load(f)
            print(f"""
            ------------user_info----------
            姓名:{user_dict.get('real_name')}
            年龄:{user_dict.get('real_age')}
            账户余额:{user_dict.get('real_account')}
            -------------------------------
            """)


image
.
image
.
image
.
image

.
.

  • 最后再写一个start文件
from core.src import run        # 导入src模块

import os, sys                  # 导入os与sys模块

base_dir = os.path.dirname(os.path.dirname(__file__))  # 获取项目根路径
sys.path.append(base_dir)  # 将项目根路径添加到系统环境变量中去

if __name__ == '__main__':   # 设置执行文件运行脚本
    run()                     # 调用运行src里的,项目框架函数体代码

image

posted @   tengyifan  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示