Python/MemoAdmin (Mark)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39591494/article/details/89069319
admin_administror.py
#!/usr/bin/env python

import os
import pickle
import json
import sys
import admin_login
import lo32

memo_file = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

log = lo32.yankerp(log_file=memo_file + r'\log\Admin.log') # 定义Log
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

admin_json = BASE_DIR + r"\db\admin.json"
user_json = BASE_DIR + r"\db\users.json" 
user_pkl = BASE_DIR + r"\db\users.pkl"

admin_data = {
    "username" : "admin",
    "password" : "admin",
    "type" : "admin"
}


class Admin:
    def __init__(self):
        self.data = {}
        self.data_list = []
        self.save = self.save_admin()
    
    def save_admin(self):
        with open(admin_json, "w", encoding="utf-8") as f:
            f.write(json.dumps(admin_data, indent=4))

    @admin_login.Admin('admin_login')
    def user_auth(self):
        log.info("启动授权认证函数成功...")
        if os.path.exists(user_pkl) and os.path.exists(user_json):
            with open(user_pkl, "rb") as f:
                user_data = pickle.load(f)
                for i in user_data:
                    self.data = i

            self.data['enable'] = 1
            self.data_list.append(self.data)

            with open(user_pkl, "wb") as f:
                pickle.dump(self.data_list, f)
            
            with open(user_json, "w", encoding='utf-8') as f:
                f.write(json.dumps(self.data, indent=4))
                print("授权用户成功".center(60, "-"))
            return True
        else:
            log.error("系统提示:目前没有用户不能做授权相关的操作")
            return False

    def put_user(self):
        log.info('启动查看用户函数成功')
        if os.path.exists(user_pkl) and os.path.exists(user_json):
            print("以下为目前的用户信息".center(60, "-"))
            with open(user_pkl, "rb") as f:
                data = pickle.load(f)
                for i in data:
                    for k, v in i.items():
                        print(f"{k}:{v}")
        else:
            print("目前没有用户信息".center(60, "-"))
            return False

    def menu(self):
        count = True
        while(count):
            admin_menu = {
                "1" : "授权用户",
                "2" : "查看用户",
                "Q" : "退出此程序"
            }

            for k, v in admin_menu.items():
                print(f"{k}:{v}")
            your = input("请您输入相关的选项:").strip().upper()
            if your == "1":
                A = Admin()
                A.user_auth()
            elif your == "2":
                self.put_user()
            elif your == "Q":
                log.info('退出成功,欢迎您再次使用')
                sys.exit()
admin_login.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import json
from functools import wraps

memo_file = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
admin_json = memo_file + r"\db\admin.json"


class Admin:
    def __init__(self, funcname):
        self.funcname = funcname
    
    def __call__(self, func):
        @wraps(func)
        def wrapper(*args, **kw):
            if hasattr(self, self.funcname):
                my_func = getattr(self, self.funcname)
                if (my_func(func)):
                    func(*args, **kw)
        return wrapper

    def admin_login(self, func):
        count = True
        while(count):
            admin_user = input("请您输入管理员账号:").strip()
            admin_password = input("请您输入管理员密码:").strip()

            if self.admin_login_pro(admin_user, admin_password):
                return True
            else:
                count = True
    
    def admin_login_pro(self, name, password):
        with open(admin_json, "r") as f:
            data = json.load(f)

        if data['username'] == name and data['password'] == password:
            print("管理员账号密码检测成功".center(60, "-"))
            return True
        else:
            print("管理元账号密码检测失败,请重试".center(60, "-"))
            return False
iamge_result.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import csv
from PIL import ImageColor 
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont

__Author__ = "YanZanG"


class ImageUtils:
    def __init__(self, image_file):
        self.image = image_file
    
    def create_image(self):
        Count = True
        while(Count):
            try:
                image_width = int(input('请您输入图片的宽:').strip())
                image_high = int(input('请您输入图片的高:').strip())
                im_t_w = int(input('请您输入图片中的内容的宽:').strip())
                im_t_h = int(input('请您输入图片中的内容的高:').strip())
                image_text = input("请您输入内容:").strip()
                image_save_name = input('请您输入保存图片的名称:')
                
                IM_new = Image.new('RGBA', (int(image_width), int(image_high)), 'white')
                pic = ImageDraw.Draw(IM_new)
                pic.text((int(im_t_w), int(im_t_h)), image_text, fill='red')
                IM_new.save(os.path.join(self.image, image_save_name + '.png'))
                IM_new.show()
                Count = False
            except Exception as f:
                print(f)

    def image_logo(self):
        Count = True
        while(Count):
            try:
                if os.path.exists(self.image):
                    Your_logo = input('请您输入logo图片的名称:').strip()
                    Your_image = input('请您输入需要添加logo的图片名称').strip()
                    logo_name = os.path.join(self.image, Your_logo)
                    image_name = os.path.join(self.image, Your_image)
                    if os.path.isfile(logo_name) and os.path.isfile(image_name):
                        logo_image = Image.open(logo_name)
                        logo_i_w, logo_i_h = logo_image.size
                        # 打开目标文件
                        ret_image = Image.open(image_name)
                        ret_i_w, ret_i_h = ret_image.size
                        
                        image_copy = ret_image.copy()
                        image_copy.paste(logo_image, (int(ret_i_w-logo_i_w), int(ret_i_h-logo_i_h)))
                        image_success = input("添加Logo成功,请您输入需要保存的图片名称:").strip()
                        image_copy.save(os.path.join(self.image, image_success + '.jpeg'))
                        image_copy.show()
                        Count = False
                else:
                    print("nonononono")
                    Count = True
            except Exception as e:
                print(e)
    
    def enhance_image(self):
        Count = True
        while(Count):
            if os.path.exists(self.image):
                enhance_image = input("请您输入需要增强图片的名称:").strip()
                enhance_image_result = os.path.join(self.image, enhance_image)
                if os.path.isfile(enhance_image_result):
                    enhance_name = input("请您输入增强后图片的名称").strip()
                    IM = Image.open(enhance_image_result)
                    enh = ImageEnhance.Contrast(IM)
                    IM.save(os.path.join(self.image, enhance_name + '.jpeg'))
                    enh.enhance(1.8).show("增强图片后的效果")
                    Count = False
                else:
                    print("对不起,您输入的文件不存在,请您重新输入!!!")
                    Count = True
            else:
                print(f"您输入的'{self.image}'不存在,请您重新输入!!!")
                Count = True

    def rotate_image(self):
        if os.path.exists(self.image):
            os.chdir(self.image)
            rotate_image = input('请您输入需要翻转的图片名称:').strip()
            image_rota = os.path.join(self.image, rotate_image)
            if os.path.isfile(image_rota):
                IM = Image.open(image_rota)
                Count = True
                while(Count):
                    rotate_data = {
                        "1" : "水平翻转",
                        "2" : "镜像翻转",
                        "3" : "度数翻转",
                        "Q" : "退出翻转"
                    }
                    for k, v in rotate_data.items():
                        print(f"{k}、{v}")
                    Your_x = input("请您输入选项:").strip().upper()

                    if Your_x == "1":
                        IM.transpose(Image.FLIP_LEFT_RIGHT).save("水平翻转.jpg")
                        print(f"图片翻转成功,请在{image_rota}中查看")
                    elif Your_x == "2":
                        IM.transpose(Image.FLIP_TOP_BOTTOM).save("上下翻转.jpg")
                        print(f"图片翻转成功,请在{image_rota}中查看")
                    elif Your_x == "3":
                        image_d = int(input("请您输入需要翻转多少度:").strip())
                        IM.rotate(int(image_d)).save('度数翻转图.jpg')
                        print(f"图片翻转成功,请在{image_rota}中查看")
                    elif Your_x == "Q":
                        Count = False
                    else:
                        print("对不起,您输入的内容有误,请您重新输入!!!")
                        Count = True
            else:
                print("文件输入错误!!!")
        else:
            print("路径检测失败!!!")

    def quit(self):
        sys.exit()

    def iamge_memu(self):
        user_menu = {
            "1" : "创建图像",
            "2" : "添加LOGO",
            "3" : "增强效果图",
            "4" : "翻转图像",
            "Q" : "退出此程序"
        }

        user_menu2 = {
            "1" : "create_image",
            "2" : "image_logo",
            "3" : "enhance_image",
            "4" : "rotate_image",
            "Q" : "quit"
        }
        Count = True
        while(Count):
            for k, v in user_menu.items():
                print(f"{k}、{v}")
            User_choice = input("请您输入选项:").strip().upper()
            if User_choice == "":
                print("选项不能为None,请您重新输入!!!")
                Count = True
            else:
                if hasattr(self, user_menu2.get(User_choice)):
                    func = getattr(self, user_menu2.get(User_choice))
                    func()
                else:
                    print("系统检测错误,请您输入正确的选项")


def main():
    Count = True
    while(Count):
        file_image = input("请您输入图片所在的路径:").strip()
        if os.path.exists(file_image):
            IM = ImageUtils(file_image)
            IM.iamge_memu()
        else:
            print("路径检测错误,请您重新输入路径!!!")
            Count = True

if __name__ == "__main__":
    main()
lo32.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import logging

def yankerp(logger_name="YANKAI-LOG", log_file="yankai.log", level=logging.DEBUG):
    # 创建logger对象
    logger = logging.getLogger(logger_name)
    logger.setLevel(level)

    # 创建控制台
    ch = logging.StreamHandler()
    ch.setLevel(level)

    # 创建文件
    fh = logging.FileHandler(filename=log_file, encoding="utf-8")

    # create formatter
    formatter = logging.Formatter('%(asctime)s - %(filename)s - %(name)s - [line:%(lineno)d]- %(levelname)s - %(message)s')

    # 添加 formatter

    ch.setFormatter(formatter)
    fh.setFormatter(formatter)

    logger.addHandler(ch)
    logger.addHandler(fh)

    return logger
main.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
import os
import MemoAdmin
import admin_administror
import lo32

memo_file = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

log = lo32.yankerp(log_file=memo_file + r'\log\memo_main.log') # 定义Log


def main_menu():
    log.info("开始启动main_menu函数")
    count = True
    while(count):
        print("请您选择您的身份".center(60, "-"))
        menu = {
            "1" : "普通用户登陆",
            "2" : "管理员用户登陆",
            "Q" : "退出此程序"
        }
        for k, v in menu.items():
            print(f"{k}:{v}")
        your = input("请您输入相关选项:").strip().upper()
        if your == "1":
            A = MemoAdmin.Memo_Admin()
            A.user_input()
        elif your == "2":
            B = admin_administror.Admin()
            B.menu()
        elif your == "Q":
            log.info("退出main_menu函数成功")
            sys.exit("退出成功")            
        else:
            log.error("对不起,您输入的选项有误,请您重新输入!")
            count = True


def main():
    main_menu()

if __name__ == "__main__":
    main()
memo_email.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import smtplib
from smtplib import SMTP_SSL 
from email.header import Header 
from email.mime.text import MIMEText


class Email(object):
    def __init__(self, email_from, email_to, password, email_title, email_text):
        self.password = password
        self.email_from = email_from
        self.email_to = email_to
        self.email_text = email_text
        self.email_title = email_title

    def get_password(self):  #  获取邮箱授权码
        return self.password

    def send_email(self):
        try:
            smtp = SMTP_SSL("smtp.qq.com", "465")  #  邮件服务器地址
            smtp.login(self.email_from, self.get_password())  #  邮件账户密码

            msg = MIMEText(self.email_text, "plain", "utf-8")
            msg["Subject"] = Header(self.email_title, "utf-8")  #  邮件的标题.
        
            smtp.sendmail(self.email_from, self.email_to, msg.as_string())
            smtp.quit()
        except smtplib.SMTPException as e:
            print(e)


def main():
    Count = True
    while(Count):
        Your_from = input("请您输入发件邮箱:")
        Your_to = input("请您输入收件人邮箱...")
        Your_password = input("请您输入发件邮箱密码:")
        Your_title = input("请您输入邮件标题:")
        Your_text = input("请您输入邮件内容:")
        if Your_from == "" and Your_to == "":
            print("发件人邮箱地址或收件人邮箱地址不能为空。。。")
            Count = True
        elif Your_password == "" and Your_title == "":
            print("邮箱密码,邮件内容不能为空!!!")
            Count = True
        elif Your_text == "":
            print("发件内容不能为空!!!")
            Count = True
        else:
            try:
                A = Email(Your_from, Your_to, Your_password, Your_title, Your_text)
                A.send_email()
                Count = False
            except Exception as e:
                print("发送邮件失败,请您重试....".center(50, "-"))
                print(e)
                Count = False
MemoAdmin.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import time
import json
import pickle
import lo32
import os
import sys
import memo_email
import utilts

memo_file = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

log = lo32.yankerp(log_file=memo_file + r'\log\memo.log') # 定义Log
data_pkl = memo_file + r'\db\memo.pkl' #  定义data_pkl 文件的路径
data_text = memo_file + r'\db\memo.txt'  #  定义data_text文件的路径
data_json = memo_file + r'\db\memo.json'  #  定义json文件的路径

__Author__ = "YanZanG"  #  创造者

memo_list = []
memo_json_data = {}


class Memo_Admin:
    """
    备忘录程序类
    """
    log.info("启动备忘录程序成功....")

    def __init__(self):
        self.memo_data_dict = {}

    @utilts.Chatends('log')
    def add_memo(self):
        """
        添加备忘录
        """
        if os.path.exists(data_pkl):
            with open(data_pkl, "rb") as f:
                data = pickle.load(f)
                for i in data:
                    memo_list.append(i)
        Count = True
        while(Count):
            Memo_Title = input("请您输入备忘录标题:").strip()
            Memo_Event = input("请您输入备忘录事件:").strip()
            
            if Memo_Title == "" or Memo_Event == "":
                log.error("标题或事件不能为空,请您重新输入!")
                Count = True
            else:
                Memo_ID = self.memo_id()
                Memo_date = self.date_memo()

                self.memo_data_dict["Memo_ID"] = Memo_ID
                self.memo_data_dict["Memo_Title"] = Memo_Title
                self.memo_data_dict["Memo_Event"] = Memo_Event
                self.memo_data_dict["Memo_date"] = Memo_date

                memo_list.append(self.memo_data_dict)
                log.info(f"添加备忘录信息成功,目前一共有{len(memo_list)}条数据.....")
                self.memo_data_dict = {}
                Count = False

                print("添加数据成功,您是否继续添加?(yes/no)")

                N = input("请您输入:").strip()
                if N == "yes" or N == "y":
                    Count = True
                else:
                    self.save_data_memo()
                    self.save_text_memo()
                    self.save_json_memo()
                    Count = False

    def memo_json_API(self, Count):
        "Json数据接口"
        ret = {'status': 0, 'statusText': 'ok', 'data': {}} # TODO
        with open(data_json) as f:
            data = json.load(f)
        try:
            ret["data"] = data[Count]
        except Exception as f:
            ret["status"] = "1"
            ret["statusText"] = f
        return ret

    def inquire_memo(self):
        """
        查找备忘录
        """
        if os.path.exists(data_pkl):
            Count = True
            while(Count):
                menu = {
                    "1" : "备忘录ID查找",
                    "2" : "备忘录月份查找",
                    "Q" : "退出查找备忘录"
                }
                for k, v in menu.items():
                    print(f"{k}、{v}")

                Your_chose = input("请您选择:").strip().upper()
                if Your_chose == "1":
                    ID = int(input("请您输入备忘录ID号:"))

                    with open(data_pkl, "rb") as f:
                        data = pickle.load(f)
                        try:
                            for k, v in data[ID].items():
                                print(f"{k}:{v}")
                        except Exception as f:
                            print(f)
                elif Your_chose == "2":
                    Your_num = int(input("请您输入您需要查询的月份:"))
                    if Your_num <= 9:
                        data = self.memo_json_API("0" + str(Your_num))
                    print(data['data'])
                elif Your_chose == "Q":
                    Count = False
        else:
            print("您目前没有数据,是否需要添加数据?(yes/no)")
            Your_chose2 = input("请您选择:").strip()
            if Your_chose2 == "yes":
                self.add_memo()
            elif Your_chose2 == "no":
                sys.exit("欢迎您再次使用,再见".center(50, "-"))

    def delete_memo(self):
        """
        删除备忘录
        """
        Count = True
        if os.path.exists(data_pkl):
            with open(data_pkl, "rb") as f:
                data = pickle.load(f)
                for i in data:
                    memo_list.append(i)
                    for k, v in i.items():
                        print(f"{k}-{v}")
                Your_del = int(input("请您输入需要删除的ID:").strip())
                memo_list.pop(Your_del)
                self.save_data_memo()
                self.save_text_memo()
                self.save_json_memo()
        else:
            print("您目前没有数据是否现需要添加数据?(yes/no)")
            Your_chose3 = input("请您输入选项:")
            if Your_chose3 == "yes":
                self.add_memo()
            else:
                log.info("欢迎您再次使用,再见~")

    def serach_memo(self):
        "查找历史备忘录"
        if os.path.exists(data_pkl):
            with open(data_pkl, "rb") as f:
                data = pickle.load(f)
                for i in data:
                    for k, v in i.items():
                        print(f"{k}:{v}")
        else:
            log.info("请添加数据后重试!!!")

    def memo_id(self):
        """
        获取memo_id
        """
        return len(memo_list)

    def save_data_memo(self):
        """
        保存备忘录为PKL
        """
        with open(data_pkl, 'wb') as f:
            pickle.dump(memo_list, f)
        log.info("备忘录数据将成功添加到PKL文件中....")

    def save_text_memo(self):
        """
        保存备忘录数据为txt
        """
        if os.path.exists(data_text):
            os.remove(data_text)
        for i in memo_list:
            for k, v in i.items():
                with open(data_text, "a") as f:
                    f.write(f"{k}:{v}" + "\n")
        log.info("备忘录数据将成功的添加到txt文本文件中....")

    def save_json_memo(self):
        """
        保存备忘录数据为json
        """
        C = str(time.strftime("%m", time.localtime()))
        memo_json_data[C] = memo_list

        with open(data_json, 'w') as f:
            json.dump(memo_json_data, f, indent=4)
        log.info("备忘录数据将成功的添加到json文件中....")

    def email(self):
        "调用email"
        memo_email.main()

    def date_memo(self):
        """
        输出当前备忘录记录时间
        """
        return time.strftime("%Y-%m-%d %X", time.localtime())

    @utilts.Chatends('log')
    def exit_memo(self):
        "退出备忘录"
        log.info("退出备忘录成功!!!")
        sys.exit()

    @utilts.Chatends('user_registered')
    @utilts.Chatends('user_login')
    @utilts.Chatends('log')
    def user_input(self):
        user_menu = {
            "1" : "添加备忘录",
            "2" : "删除备忘录",
            "3" : "查找备忘录",
            "4" : "查看历史备忘录信息",
            "5" : "发送邮件",
            "Q" : "退出备忘录"
        }

        user_menu2 = {
            "1" : "add_memo",
            "2" : "delete_memo",
            "3" : "inquire_memo",
            "4" : "serach_memo",
            "5" : "email",
            "Q" : "exit_memo"
        }

        Count = True
        while(Count):
            for k, v in user_menu.items():
                print(f"{k}、{v}")
            User_choice = input("请您输入选项:").strip().upper()
            if User_choice == "":
                log.error("选项不能为None,请您重新输入!!!")
                Count = True
            else:
                if hasattr(self, user_menu2.get(User_choice)):
                    func = getattr(self, user_menu2.get(User_choice))
                    func()
                else:
                    log.error("系统检测错误,请您输入正确的选项")
            
if __name__ == "__main__":
    memo = Memo_Admin()
    memo.user_input()
utilts.py
#!/usr/bin/env python

import re
import json
import pickle
import os
import logging
from functools import wraps

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

admin_json = BASE_DIR + r"\db\admin.json"
user_json = BASE_DIR + r"\db\users.json"
user_pkl = BASE_DIR + r"\db\users.pkl"
function_log = BASE_DIR + r"\log\function.log"


class Chatends:
    def __init__(self, funcname, filename=function_log):
        self.funcname = funcname
        self.filename = filename
        self.user_data = {}
        self.user_list = []
    
    def __call__(self, func):
        @wraps(func)
        def wrapper(*args, **kw):
            if hasattr(self, self.funcname):
                my_func = getattr(self, self.funcname)
                if (my_func(func)):
                    func(*args, **kw)
        return wrapper
    
    def log(self, func):
        str_log = "函数{}开始运行了....".format(func.__name__)
        with open(self.filename, 'a', encoding='utf8') as f:
            print(str_log)
            f.write(str_log + '\n')
        return True
    
    def user_verification(self, name, password):
        user_name = re.compile(r"^[a-zA-Z]\w{3,8}")
        user_password = re.compile(r"^[a-zA-Z]\w{3,16}")
        
        if user_name.match(name) and user_password.match(password):
            return True
        else:
            return False
    
    def user_login_ver(self):
        if os.path.exists(user_json) and os.path.exists(user_pkl):
            with open(user_pkl, "rb") as f:
                data = pickle.load(f)
                for i in data:
                    name = i
            return name
        else:
            return False

    def add_users(self, name, password):
        self.user_data["username"] = name
        self.user_data["password"] = password
        self.user_data["type"] = "user"
        self.user_data["enable"] = 0
        self.user_list.append(self.user_data)

        if len(self.user_list) > 0:
            return True
        else:
            return False

    def save_users_json(self, name, password):
        with open(user_json, "w", encoding="utf-8") as f:
            f.write(json.dumps(self.user_data, indent=4))
    
    def save_users_pkl(self, name, password):
        with open(user_pkl, "wb") as f:
            pickle.dump(self.user_list, f)

    def user_login(self, func):
        print("欢迎来到登陆页面".center(60, "-"))
        count = True
        while(count):
            your_name = input("请您输入您的用户名:").strip()
            your_password = input("请您输入您的密码:").strip()

            if self.user_verification(your_name, your_password):
                result_name = self.user_login_ver()
                if result_name["username"] == your_name and result_name["password"] == your_password:
                    print("登陆成功....")
                    if result_name['enable'] == 1:
                        print("管理员授权成功,正在跳转至功能页面")
                        return True
                    else:
                        print(f"对不起,用户{result_name['username']}暂无授权,请联系管理员进行授权".center(60, "-"))
                        return False
                else:
                    print("对不起,您输入的内容有误,您是否需要输出账号密码信息?(yes/no)")
                    Your_chose = input("请您选择:").strip()
                    if Your_chose == "yes":
                        with open(user_pkl, "rb") as f:
                            data = pickle.load(f)
                            for i in data:
                                for k, v in i.items():
                                    print(f"{k}:{v}")
                    else:
                        return False
            else:
                print("对不起,您输入的用户名密码有误,请您重新输入".center(60, "-"))
                count = True

    def user_registered(self, func):
        print("欢迎来到注册页面".center(60, "-"))
        prompt = """
        1、用户名必须以英文3-8位
        2、密码均不接受特殊字符,符号,可用英文+数字 3-16位
        """
        if os.path.exists(user_json) and os.path.exists(user_pkl):
            print("已检测到用户,正在跳转至登陆页面".center(60, "-"))
            return True
        else:
            print(prompt)
            Count = True
            while(Count):
                Your_reg_name = input("请您设置您的用户名:").strip()
                Your_reg_password = input("请您设置您的密码:").strip()

                if self.user_verification(Your_reg_name, Your_reg_password):
                    print("用户名密码合法...")
                    if self.add_users(Your_reg_name, Your_reg_password):
                        self.save_users_json(Your_reg_name, Your_reg_password)
                        self.save_users_pkl(Your_reg_name, Your_reg_password)
                        print("注册成功,正在跳转至登陆页面".center(60, "-"))
                        return True
                    else:
                        False
                else:
                   print("对不起,您的用户名密码输入不合法,请您重新输入".center(60, "-"))
                   Count = True
    

猜你喜欢

转载自blog.csdn.net/qq_39591494/article/details/89069319