【腾讯云 Cloud Studio 实战训练营】基于Python实现的快速抽奖系统

news2025/2/26 5:37:14

文章目录

  • ⭐️ Cloud Studio - 简介
    • 🌟 操作步骤
    • 🌟 注册Cloud Studio
    • 🌟 创建工作空间
    • 🌟 启动对应的开发环境
  • ⭐️ 抽奖系统项目介绍
  • ⭐️ 抽奖系统代码结构图
  • ⭐️ 项目基础类 - 文件检查
    • 🌟 base.py 基础类文件检查示例如下:
    • 🌟 common 模块 的 error.py 脚本的代码如下:
    • 🌟 utils.py 模块 check_file 函数示例如下
  • ⭐️ base用户相关功能实现
    • 🌟 将 时间戳 封装为 utils.py 模块的一个公共函数
    • 🌟 对 base.py 模块中的 __read_user() 进行修改
  • ⭐️ base 模块 - 用户的修改与删除
  • ⭐️ 体验与感受

⭐️ Cloud Studio - 简介

Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能在线编程。Cloud Studio 作为在线 IDE,包含代码高亮、自动补全、Git 集成、终端等 IDE 的基础功能,同时支持实时调试、插件扩展等,可以帮助开发者快速完成各种应用的开发、编译与部署工作。

详细信息请参考官方文档,点击这里哦:Cloud Studio(云端 IDE)简介 | Cloud Studio

在这里插入图片描述

🌟 操作步骤

点击链接跳转到官网,并点击“注册/登录”,Cloud Studio官网

🌟 注册Cloud Studio

  • 这里Cloud Studio 提供了三种注册方式:
    • 使用 CODING 账号授权注册/登录
    • 使用微信授权注册/登录(推荐使用微信登陆)
    • 使用 GitHub 授权注册/登录 (若使用 GitHub 登陆则创建公开应用时需要实名认证)

在这里插入图片描述

🌟 创建工作空间

登陆之后我们进入 Cloud Studio社区的主页之后可以点击创建应用,这里有非常多的模版,有兴趣的小伙伴可以在我们实验完成后,对它有了一个基本的认识和熟悉后再去操作。

在这里插入图片描述
其实云IDE这种产品,对我来说,最大的好处就是比如我要学习什么语言学习什么框架的话,不用在本地搭建各种开发环境,从而把自己的电脑搞得也许装了很多开发环境,但是用的却没多少个,同时比如不同语言或者相同语言不同版本之间又会出现一些配置问题,导致自己的开发环境受到污染;这个时候云IDE很好的解决了这个问题,想学什么想练什么语言的代码,一键启动即可。

🌟 启动对应的开发环境

点击 “完成” 后,环境会自动开始配置,正常情况下大概1-2分钟左右,开发环境就配好了,是不是超级的方便!启动成功后,我们进入了一个欢迎界面。

在这里插入图片描述

通过对代码和README的简单解读我们发现,这是一个默认的Flask项目搭建起来的临时页面。

⭐️ 抽奖系统项目介绍

该系统一共有三个模块。

第一个模块:base 模块,即基础模块。

该模块实现的功能为:

  • 功能点:

    • 避免业务逻辑,只做底层的相关操作;比如对用户的增删改查,奖品的增删改查(这些功能只是单纯的操作文件,而不是处理复杂的业务逻辑),直接和 storage 模块的关联。(稍后介绍 storage 模块)。
  • 知识点:

    • 父类的创建。
    • son文件的读写,私有函数的定义。
    • 字典的练习,循环的练习。
    • 条件语句的练习。
    • 异常的处理与抛出。

第二个模块:admin 模块,这是给管理员的模块。

该模块实现的功能为:

  • 功能点:

    • 继承 base 模块
    • 开发用户的增删改查
    • 开发奖品的增删改查
    • PS:似乎与 base 模块相同,其实不然。admin 模块的 增删改查 是添加业务逻辑处理的,比如满足了某些条件才能够执行修改或删除…
  • 知识点:

    • 类的继承
    • 多态的练习 super 函数
    • 条件语句的练习
    • 循环语句的练习

第三个功能模块: user 模块,主要实现用户的验证与抽奖操作

该模块的功能未:

  • 功能点:

    • 用户身份验证
    • 抽奖功能的实现
  • 知识点:

    • 类的继承
    • 父类私有函数的调用
    • 启蒙与强化开发思维

⭐️ 抽奖系统代码结构图

  • cloudstudio 中会自动生成一个工作空间,然后我们分别创建 common 包与 storage 包

    • 创建 common 包,在 common 包内分别创建 error.pyconsts.pyutils.py 模块。
    • 创建 storage 包(其实就是个文件夹),创建 user.jsongift.json 分别存储用户信息和奖品信息。
    • 而我们的 base、admin、user 模块则是直接创建在项目根目录下即可,见下图:

    PS:这也是一个比较简单的代码结构。


在这里插入图片描述


⭐️ 项目基础类 - 文件检查

接下来通过 base.py 来书写基础类,当前要实现的基本功能就是导入 user.json 与 gift.json 进行文件检查

  • 我们需要自定义三个异常类用来判断文件的异常:
    • 1、判断文件地址路径是否存在 —> NotPathError
    • 2、判断文件是否是 json 格式 —> FormatError
    • 3、判断是否是文件 —> NotFileError

🌟 base.py 基础类文件检查示例如下:

# coding:utf-8


"""
    1:导入 user.json ,文件检查
    2:导入 gift.json ,文件检查
"""


import os
from common import error


class Base(object):
    def __init__(self, user_json, gift_json):
        self.user_json = user_json
        self.gift_json = gift_json

        self.__check_user_json()
        self.__check_gift_json()

    def __check_user_json(self):
        if not os.path.exists(self.user_json):  # 判断文件地址路径是否存在
            raise error.NotPathError("not found {} ".format(self.user_json))

        if not self.user_json.endswith('.json'):   # 判断文件是否是 json 格式
            raise error.FormatError()

        if not os.path.isfile(self.user_json):     # 判断是否是文件
            raise error.NotFileError()

    def __check_gift_json(self):
        if not os.path.exists(self.gift_json):  # 判断文件地址路径是否存在
            raise error.NotPathError("not found {} ".format(self.gift_json))

        if not self.gift_json.endswith('.json'):  # 判断文件是否是 json 格式
            raise error.FormatError()

        if not os.path.isfile(self.gift_json):
            raise error.NotFileError()


if __name__ == '__main__':

    user_path = os.path.join(os.getcwd(), "storage", "user.json")
    gift_path = os.path.join(os.getcwd(), "storage", "gift.json")
    print(user_path)
    print(gift_path)

    base = Base(user_json=user_path, gift_json=gift_path)
    print(base)

🌟 common 模块 的 error.py 脚本的代码如下:

# coding:utf-8


class NotPathError(Exception):		# 文件路径错误
    def __init__(self, message):
        self.message = message


class FormatError(Exception):		# 文件格式后缀错误
    def __init__(self, message="file need json format"):
        self.message = message


class NotFileError(Exception):		# 非文件错误
    def __init__(self, message="It's not file"):
        self.message = message

此时在 base.py 基础模块中我们发现, __check_user_json()__check_gift_json() 函数的基本功能是一样的,都是检查文件。这个时候就可以将其封装为一个公共函数 check_file 用以调用,所以我们可以在 utils.py 模块定义一个 check_file 函数。

🌟 utils.py 模块 check_file 函数示例如下

# coding:utf-8


import os
from .error import NotPathError, NotFileError, FormatError


def check_file(path):
    if not os.path.exists(path):  # 判断文件地址路径是否存在
        raise NotPathError("not found {} ".format(path))

    if not path.endswith('.json'):  # 判断文件是否是 json 格式
        raise FormatError()

    if not os.path.isfile(path):  # 判断是否是文件
        raise NotFileError()

那么此时我们的 base.py 基础模块优化后的脚本代码就如下:

# coding:utf-8


"""
    1:导入 user.json ,文件检查
    2:导入 gift.json ,文件检查
"""


import os
from common.utils import check_file


class Base(object):
    def __init__(self, user_json, gift_json):
        self.user_json = user_json
        self.gift_json = gift_json

        self.__check_user_json()
        self.__check_gift_json()

    def __check_user_json(self):
        check_file(self.user_json)

    def __check_gift_json(self):
        check_file(self.gift_json)


if __name__ == '__main__':

    user_path = os.path.join(os.getcwd(), "storage", "user.json")
    gift_path = os.path.join(os.getcwd(), "storage", "gift.json")
    print(user_path)
    print(gift_path)

    base = Base(user_json=user_path, gift_json=gift_path)
    print(base)

执行结果如下:


在这里插入图片描述


尝试做几个文件异常的判断:


在这里插入图片描述


⭐️ base用户相关功能实现

base.py 模块基础上,增加 __read_users()__write_user() 函数。

所以接下来,我们就实现一下前三个目标。

# coding:utf-8


"""
    1:导入 user.json ,文件检查
    2:导入 gift.json ,文件检查
    *************************
    3、确定用户表中每个用户的信息字段
	4、读取 `user.json` 文件
	5、写入 `user.json` 文件(检测该用户是否存在),存在则不可写入
"""


import os
import json
import time

from common.utils import check_file
from common.error import UserExistsError


class Base(object):
    def __init__(self, user_json, gift_json):
        self.user_json = user_json
        self.gift_json = gift_json

        self.__check_user_json()
        self.__check_gift_json()

    def __check_user_json(self):    # 调用 utils 模块的公共函数 check_file 检查 user.json 文件
        check_file(self.user_json)

    def __check_gift_json(self):    # 调用 utils 模块的公共函数 check_file 检查 gift.json 文件
        check_file(self.gift_json)

    def __read_user(self):          # 读取 user.json 文件
        with open(self.user_json) as f:
            data = json.loads(f.read())
        return data

    def __write_user(self, **user):     # 写入用户信息(进行写入时的判断)
        if "username" not in user:
            raise ValueError("missing username")    # 缺少 username 信息
        if "role" not in user:
            raise ValueError("missing role")        # 缺少角色信息(缺少权限信息)

        user['active'] = True       # 初始化用户基础信息
        user['create_time'] = time.time()
        user['update_time'] = time.time()
        user['gifts'] = []

        users = self.__read_user()      # 读取 user.json
#        print(users)		# 打印输出 users 是为了调试
#        return				# 打印输出调试 users ,return 是为了不在执行后面的代码
        if user['username'] in users:   # 判断用户信息是否存在,如果存在则抛出 'error.py' 模块自定义的 UserExistsError
            raise UserExistsError('username {} had existe'.format(user['username']))

        users.update(
            {user['username']: user}
        )

        json_users = json.dumps(users)
        with open(self.user_json, 'w') as f:
            f.write(json_users)


if __name__ == '__main__':

    user_path = os.path.join(os.getcwd(), "storage", "user.json")
    gift_path = os.path.join(os.getcwd(), "storage", "gift.json")
    print(user_path)
    print(gift_path)

    base = Base(user_json=user_path, gift_json=gift_path)
    print(base)

    base.write_user(username='Neo', role='admin')

🌟 将 时间戳 封装为 utils.py 模块的一个公共函数

# coding:utf-8


import os
import time
from .error import NotPathError, NotFileError, FormatError


def timestamp_to_string(timestamp):
    time_obj = time.localtime(timestamp)    # 将传入的时间戳实例化成一个时间对象
    time_str = time.strftime('%Y-%m-%d %H:%M:%S ', time_obj)
    return time_str


def check_file(path):
    if not os.path.exists(path):  # 判断文件地址路径是否存在
        raise NotPathError("not found %s " % path)

    if not path.endswith('.json'):  # 判断文件是否是 json 格式
        raise FormatError()

    if not os.path.isfile(path):  # 判断是否是文件
        raise NotFileError()

🌟 对 base.py 模块中的 __read_user() 进行修改

# coding:utf-8


"""
    1:导入 user.json ,文件检查
    2:导入 gift.json ,文件检查
    *************************
    3、确定用户表中每个用户的信息字段
	4、读取 `user.json` 文件
	5、写入 `user.json` 文件(检测该用户是否存在),存在则不可写入
	******************************************************
"""


import os
import json
import time

from common.utils import check_file, timestamp_to_string
from common.error import UserExistsError


class Base(object):
    def __init__(self, user_json, gift_json):
        self.user_json = user_json
        self.gift_json = gift_json

        self.__check_user_json()
        self.__check_gift_json()

    def __check_user_json(self):    # 调用 utils 模块的公共函数 check_file 检查 user.json 文件
        check_file(self.user_json)

    def __check_gift_json(self):    # 调用 utils 模块的公共函数 check_file 检查 gift.json 文件
        check_file(self.gift_json)

    def __read_user(self, time_to_str=True):   # 读取 user.json 文件;
                                                # timestamp_to_string 修改为 True 时时间戳为可读的格式(调试)
        with open(self.user_json, 'r') as f:
            data = json.loads(f.read())

        if time_to_str == True:
            for username, t in data.items():
                t['create_time'] = timestamp_to_string(t['create_time'])
                # print(t['create_time'])       # 打印输出时间格式是否改为 可读的 "%Y-%m-%d %H:%M:%S" 格式
                t['update_time'] = timestamp_to_string(t['update_time'])
                data[username] = t
            print(data)       # 调试打印输出 __read_user() 的用户信息

        return data

    def write_user(self, **user):     # 写入用户信息(进行写入时的判断)
        if "username" not in user:
            raise ValueError("missing username")    # 缺少 username 信息
        if "role" not in user:
            raise ValueError("missing role")        # 缺少角色信息(缺少权限信息)

        user['active'] = True       # 初始化用户基础信息
        user['create_time'] = time.time()
        user['update_time'] = time.time()
        user['gifts'] = []

        users = self.__read_user()      # 读取 user.json
        print(users)		# 打印输出 users 是为了调试
        return				# 打印输出调试 users ,return 是为了不在执行后面的代码
        if user['username'] in users:   # 判断用户信息是否存在,如果存在则抛出 'error.py' 模块自定义的 UserExistsError
            raise UserExistsError('username {} had existe'.format(user['username']))

        users.update(
            {user['username']: user}
        )

        json_users = json.dumps(users)
        with open(self.user_json, 'w') as f:
            f.write(json_users)

        print(users)    # 调试打印输出 users 的用户信息


if __name__ == '__main__':

    user_path = os.path.join(os.getcwd(), "storage", "user.json")
    gift_path = os.path.join(os.getcwd(), "storage", "gift.json")
    print(user_path)
    print(gift_path)

    base = Base(user_json=user_path, gift_json=gift_path)

    base.write_user(username='Neo', role='admin')

这里将代码中的如下两行取消注释,且将 def __read_user(self, time_to_str=False) 改为 def __read_user(self, time_to_str=True)可以看到调试的 读取文件时,时间戳变为 "%Y-%m-%d %H:%M:%S" 的时间格式

        # print(users)		# 打印输出 users 是为了调试
        # return				# 打印输出调试 users ,return 是为了不在执行后面的代码
#*******************************************************************************
        print(users)		# 打印输出 users 是为了调试
        return				# 打印输出调试 users ,return 是为了不在执行后面的代码

⭐️ base 模块 - 用户的修改与删除

接下来我们继续对 base.py 模块关于 user.json 文件进行相关的操作,同样是三个目标。

1、对于某个用户 role 权限的修改(或者说是身份的修改) __change_role() 函数

2、对于 acitve 用户的活跃度的修改

3、delete_user 删除某个用户的修改


PS:以上三个函数,依然是 base 类的内置函数;大家可能会有个疑问,为什么现在使用的一些函数都是内置函数呢?原因是未来我们开发 "admin"、"user" 相关类的时候,会覆盖或包裹这些内置函数在它们的外层进行业务相关的开发


  • 用户信息的字段:
    • username:姓名
    • role:角色(normal 或 admin)
    • active:活跃度(身份是否有效:True or False)
    • create_time:创建时间(timestamp)
    • update_time:更新时间(timestamp)
    • gifts:奖品列表(用以存储用户抽到了哪些奖品)
  • 用户信息存储格式:(字典)
    • username:{username, role, active}

先来编写 __change_role() 函数

# coding:utf-8


"""
    1:导入 user.json ,文件检查    "__check_user_json() 函数"
    2:导入 gift.json ,文件检查    "__check_gift_json() 函数"
    *******************************************************
    3、确定用户表中每个用户的信息字段
	4、读取 `user.json` 文件         "__read_users() 函数"
	5、写入 `user.json` 文件(检测该用户是否存在),存在则不可写入;"__write_user() 函数" ,这里方便调试,先使用 write_user()
	***********************************************************************************************************
	6、对于某个用户 `role` 权限的修改(或者说是身份的修改) `__change_role() 函数`; 同样方便调试,先使用 change_role()
	7、对于 acitve 用户的活跃度的修改; `__change_acitve() 函数`; 
    8、delete_user 删除某个用户的修改
    ***********************************************************************************************************
"""



import os
import json
import time

from common.consts import ROLES
from common.error import UserExistsError, RoleError, UserNameNotExist
from common.utils import check_file, timestamp_to_string


class Base(object):
    def __init__(self, user_json, gift_json):
        self.user_json = user_json
        self.gift_json = gift_json

        self.__check_user_json()
        self.__check_gift_json()

    def __check_user_json(self):    # 调用 utils 模块的公共函数 check_file 检查 user.json 文件
        check_file(self.user_json)

    def __check_gift_json(self):    # 调用 utils 模块的公共函数 check_file 检查 gift.json 文件
        check_file(self.gift_json)

    def __read_users(self, time_to_str=False):   # 读取 user.json 文件;
                                                # timestamp_to_string 修改为 True 时时间戳为可读的格式(调试)
        with open(self.user_json, 'r') as f:
            data = json.loads(f.read())

        if time_to_str == True:
            for username, t in data.items():
                t['create_time'] = timestamp_to_string(t['create_time'])
                # print(t['create_time'])       # 打印输出时间格式是否改为 可读的 "%Y-%m-%d %H:%M:%S" 格式
                t['update_time'] = timestamp_to_string(t['update_time'])
                data[username] = t
            print(data)       # 调试打印输出 __read_user() 的用户信息

        return data

    def write_user(self, **user):     # 写入用户信息(进行写入时的判断)
        if "username" not in user:
            raise ValueError("missing username")    # 缺少 username 信息
        if "role" not in user:
            raise ValueError("missing role")        # 缺少角色信息(缺少权限信息)

        user['active'] = True       # 初始化用户基础信息
        user['create_time'] = time.time()
        user['update_time'] = time.time()
        user['gifts'] = []

        users = self.__read_users()      # 读取 user.json
        # print(users)		# 打印输出 users 是为了调试
        # return				# 打印输出调试 users ,return 是为了不在执行后面的代码
        if user['username'] in users:   # 判断用户信息是否存在,如果存在则抛出 'error.py' 模块自定义的 UserExistsError
            raise UserExistsError('username {} had existe'.format(user['username']))

        users.update(
            {user['username']: user}
        )

        json_users = json.dumps(users)
        with open(self.user_json, 'w') as f:
            f.write(json_users)

        print(users)    # 调试打印输出 users 的用户信息


    def change_role(self, username, role):    # 定义修改用户 role 信息函数
        users = self.__read_users()		# 获取当前所有用户信息
        user = users.get(username)		# 根据传入的 username 获取该用户的信息
        if not user:            # 判断用户是否存在 user.json 文件内,若不合法则抛出自定义 "error.py" 模块的 UserNameNotExist 异常
            raise UserNameNotExist('username \'{}\' not exist'.format(username))

        if role not in ROLES:   # 判断用户角色信息是否合法,若不合法则抛出自定义 "error.py" 模块的 RoleError 异常
                                # "consts.py" 模块的 "ROLES"的值是写死的: ROLES = ['admin', 'normal']
            raise RoleError('not use role {}'.format(role))

        user['role'] = role
        user['update_time'] = time.time()
        users[username] = user

        json_data = json.dumps(users)       # 将 change_role 更新后的内容写入 user_json 文件
        with open(self.user_json, 'w') as f:
            f.write(json_data)
        print(json_data)

        return '\'{}\' 的 \'role\' 信息已变更为 \'{}\''.format(user['username'], user['role'])



if __name__ == '__main__':

    user_path = os.path.join(os.getcwd(), "storage", "user.json")
    gift_path = os.path.join(os.getcwd(), "storage", "gift.json")
    print(user_path)
    print(gift_path)

    base = Base(user_json=user_path, gift_json=gift_path)

    # base.write_user(username='Neo', role='admin')

    result = base.change_role(username='Neo', role='normal')
    print(result)

运行结果如下:

在这里插入图片描述

⭐️ 体验与感受

关于这个小项目的具体细节,暂时就不做了,总的来说这次的体验让我模拟了在一台新的机器设备上,从 0 到 1 体验Cloud Studio云 IDE 给我们带来的优势,不需要装各种环境,简单易用,开箱即可上手。

腾讯云 Cloud Studio 提供了一个方便的在线开发平台,让开发者可以在云端进行开发工作,而无需在本地安装和配置开发环境。Cloud Studio 提供了丰富的开发工具和功能,如代码编辑器、终端、调试工具等,同时也支持与腾讯云其他服务的集成,方便开发者进行云上应用的开发和部署。

总之,Cloud Studio 操作简单、功能强大,希望这个产品能够越做越好。也欢迎大家一起探索 Cloud Studio 更多的功能,为工作中进行赋能!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/862893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【踩坑系列记录 】Anaconda环境将torch由cpu换成gpu

概要 很早前做过深度学习,配环境之类的坑由于没记录都记不清了。这段时间开始做深度学习的项目,于是用Anaconda给项目创建了一个环境,其他的环境配置很顺利,就是到了安装pytorch时,我用pytorch官网的代码一直下载的是…

法学领域的技术创新点

文章目录 一、中国法研杯-2019方案分享1 相似案件检索——法律文书的相似判断方案1 -冠军方案2——三等奖 2 裁判文书论辩挖掘 二、中国法研杯2018总述Overview of CAIL2018: Legal Judgment Prediction Competition 三、中国法研杯2022-任务概述事件检测文书校对类案检索司法摘…

对留学生来说,ChatGPT究竟是福是祸?

ChatGPT,“出道即顶流”。教师们防ChatGPT如洪水猛兽,学生们使用起来依然肆无忌惮。抄袭、作弊、代写……围绕着ChatGPT的争议不绝于耳。其堪比人类的流畅写作技能和逻辑思维,更引发一些人的担忧:ChatGPT会终结大学申请文书时代吗…

智能离子风棒联网监控静电消除器的主要功能和特点

智能离子风棒联网监控静电消除器是一种集成了智能化和网络化监控功能的设备,用于监测和消除静电现象。它的工作原理是通过产生大量的正负离子,将空气中的静电中和和消除,从而达到防止静电积累和放电的目的。 智能离子风棒联网监控静电消除器的…

无涯教程-Perl - last函数

描述 这不是功能。 last关键字是一个循环控制语句,该语句立即导致循环的当前迭代变为最后一个。不再执行任何语句,循环结束。如果指定了LABEL,则它将退出LABEL标识的循环,而不是当前封闭的循环。 语法 以下是此函数的简单语法- last LABELlast返回值 这不会返回任何值。 …

米家/南卡/松下/明基哪款护眼台灯最值得入手?(附护眼台灯选购技巧)

写这篇文章的时候,我总有种悔不当初的痛感:上学时只喜欢造型好看的台灯,总是把老妈买的护眼灯丢在一边,导致现在眼睛高度近视。 虽然不念书了,但平日使用电脑浏览信息、阅读纸质书仍是抛弃不掉的生活习惯,…

【Java】产生死锁的必要条件和如何避免死锁

首先我们先简单了解一下什么是死锁 我们模拟A,B是两个资源,而下面是两个要抢占资源的任务 首先左边的任务执行,抢占了A的锁资源 当他想拿继续执行任务,拿B的锁资源的时候,B的资源被右边的任务抢走了 这时候我们应该…

OCP China Day 2023:五大社区齐聚,加速开源开放创新与落地

8月10日,2023年开放计算中国社区技术峰会(OCP China Day 2023)在北京举行。智慧时代,计算多元化、应用多样化、技术复杂化正驱动数据中心新一轮变革,开源开放社区已成为推动数据中心持续创新的重要力量,通过…

YOLOv5、YOLOv8改进:添加ShuffleAttention注意力机制

广泛应用的注意力机制主要有空间注意力机制和通道注意力机制,其目的分别是捕捉像素级的成对关系和通道依赖关系。虽然将两种机制融合在一起可以获得比单独更好的性能,但计算开销不可避免。因而,本文提出Shuffle Attetion,即SA&…

力扣:59. 螺旋矩阵 II(Python3)

题目: 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - 全…

【1572. 矩阵对角线元素的和】

来源:力扣(LeetCode) 描述: 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1: 输入:mat [[1,2,3]…

AtCoder Beginner Contest 313D题题解

文章目录 [ Odd or Even](https://atcoder.jp/contests/abc313/tasks/abc313_d)问题建模问题分析1.分析每次查询的作用2.利用异或运算的性质设计查询方法 Odd or Even 问题建模 有n个数,每个数为0或者1,最多可以进行n次询问,每次询问选择k个…

第04天 Spring是如何解决循环依赖的

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

推出稳定代码:人工智能辅助编码的新视野

推荐:使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景 在不断发展的软件开发环境中,对效率和可访问性的追求导致了各种工具和平台的创建。最新的创新之一是StableCode,这是Stability AI的大型语言模型(LLM)生…

Flv格式视频怎么转MP4?视频格式转换方法分享

FLV格式的视频是一种早期的视频格式,不支持更高的分辨率和比特率,这意味着视频的清晰度和质量受限制,无法很好地保留细节和质量,这种格式的视频已经逐渐被更高质量的视频格式所替代,例如MP4格式,不仅具有很…

创新不辍,再结硕果 | 蓝奥声“无线联动监控技术”

随着无线电通信技术的迅速发展,无线远程监控系统也得到了技术上的更新,它将嵌入式产品与现代无线通信技术相结合,共同构成了一种新型的监测控制系统。物联网及其相关无线联动通信技术是智能科技快速发展的重要支撑技术之一,由此带…

主流国产GPU产品及规格概述(2023)

​ 美国对 AI 芯片出口管制,自主可控要求下国产芯片需求迫切。2022 年 10 月 7 日美国商务部工业安全局(BIS)发布《美国商务部对中华人民共和国(PRC)关于先进计算和半导体实施新的出口管制制造》细则,其中管…

复古游戏库管理器RomM

什么是 RomM ? RomM(代表 Rom Manager)是一个专注于复古游戏的游戏库管理器。通过 Web 浏览器管理和组织您的所有游戏。受 Jellyfin 的启发,允许您从现代界面管理所有游戏,同时使用 IGDB 元数据丰富它们。 RomM 支持的…

电脑自动重启是什么原因?这几个原因不可忽视!

“感觉我的电脑也没有用多久呀,怎么总是会出现自动重启的情况呢?由于我对电脑不是很熟悉,都不知道该如何解决这个问题,有没有朋友可以解释一下这是为什么呀?“ 在使用电脑时,如果电脑总是自动重启&#xff…

MySQL_索引的使用与设计

最左前缀法则 最左前缀法则适用于联合索引;查询从索引的最左列开始,不跳过其中的列,如果跳过其中的列将会导致索引失效(后面字段的索引失效)。 验证最左前缀法则 三个列的联合索引都同时使用 explain select * from u…