请问,新手应该如何写出简洁的代码!

发布于 2022-09-12 23:06:10 字数 3100 浏览 11 评论 0

我该如何优化我的代码

  • 我目前正在学习Python ,今天学习了装饰器,尝试的写了一下三次验证登录以及登出后重登,我感觉我的代码还很差,请问各位大牛我的代码有哪些方面可以优化。小弟表示感激不尽
# 记录登录状态
login_status = {"user_name": None,
                "status": False}


def decorator(func):
    """装饰器 验证是否登录"""
    def inner(*args, **kwargs):
        if login():
            res = func(*args, **kwargs)
            return res
    return inner


def get_user_info():
    """用户名密码转换字典"""
    with open("./my_file.txt", "r+") as file:
        user_pass = file.read().strip()
        return {i.split("|")[0]: i.split("|")[1] for i in user_pass.split()}


def registered():
    """注册"""
    user_name_password = get_user_info()
    while 1:
        regis_name = input("请输入需要注册的用户名 >>> ").strip()
        if regis_name in user_name_password:
            print("该用户名已存在,请重新输入")
        else:
            break
    regis_pswod = input("请输入您的密码>>> ").strip()
    with open("./my_file.txt", "a") as file:
        file.write(f'{regis_name}|{regis_pswod}\n')


def login():
    """登录功能"""
    if login_status["status"] is True:
        return True
    name_password_dict = get_user_info()
    i = 2
    while 1:
        if i < 0:
            break
        login_name = input("请输入用户名 >>> ").strip()
        login_pswod = input("请输入密码 >>> ").strip()
        if login_name in name_password_dict and login_pswod == name_password_dict[login_name]:
            print("登录成功")
            login_status["user_name"] = login_name
            login_status["status"] = True
            return True
        if i >= 1:
            print(f"登录失败 还剩{i}次机会")
        else:
            print("连续错误三次,退出登录")
        i -= 1
    return False


@decorator
def article():
    print("测试:文章功能")


@decorator
def diary():
    print("测试:日记")
    return "Hello"


@decorator
def draft(item):
    print("测试:草稿")
    print(f"{item}")


if __name__ == '__main__':
    print("登录 【1】\n注册 【2】\n退出 【Q】")
    while 1:
        try:
            first_work = input("请输入您的操作:").strip()
            if first_work not in ["1", "2", "Q", "q"]:
                raise Exception
            elif first_work == "1":
                login()
                break
            elif first_work == "2":
                registered()
                break
            else:
                break
        except Exception:
            print("输入有误")
    while 1:

        print(f"{'=' * 50}\n文章 【1】\n日记 【2】\n草稿 【3】\n注销 【0】\n退出 【Q】\n{'='*50}")

        try:
            work = input("请输入您的操作:").strip()
            if work not in ["1", "2", "3", "0", "Q", "q"]:
                raise Exception
            elif work == "1":
                article()
            elif work == "2":
                diary()
            elif work == "3":
                draft("我是草稿")
            elif work == "0":
                print(f'退出 {login_status["user_name"]} 账号')
                login_status["user_name"] = None
                login_status["status"] = False
            else:
                break
        except Exception:
            print("输入有误")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时间海 2022-09-19 23:06:10

推荐个书:《代碼大全》(Code Complete),亦译作《軟體建構之道》,是一本由麦克康奈尔(Steve McConnell)所寫而由微軟所發行關於軟體開發的書。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文