首页 > 其他分享 >蓝桥楼赛第9期-修复未正确实现的实验类 题解

蓝桥楼赛第9期-修复未正确实现的实验类 题解

时间:2023-03-20 23:00:35浏览次数:40  
标签:tags 题解 self 楼赛 lab 蓝桥 tag user def

题目描述

  • 程序存放的位置 /home/shiyanlou/lab.py ;

  • 实验类名应该为 Lab ;

  • 实验对象中不能插入重复标签;

  • Python 中对象引用问题,尤其如复合对象 list, dict, tuple 的引用问题;

  • 代码中 FIXME 所在上下文存在 Bug;

要求

题目需使用 Python 3.6 完成,不能使用标准库 和 第三方库。

函数传入 text 为字符串类型,可能为空。

函数返回列表,且应按 text 字符串中的出现的正确用户名次数降序排列,次数相等无先后顺序,且不重复。

示例

然后修复 lab.py 中已经实现的 class Lab,使其能正常工作,lab.py 部分代码如下:

class Lab(object):
""" 实验
"""

    def __init__(self, name, tags=[]):
        self.name = name
        # FIXME
        self._tags = tags

    def insert_tag(self, tag):
        """ 插入标签,需要检查标签是否存在
        """
        # FIXME
        self._tags.append(tag)

    @property
    def tags(self):
        return self._tags[:]

    def can_be_started(self, user):
        """判断用户能否启动实验,只有登录的会员用户才能启动实验
        """
        # 传入的 user 为用户对象,is_authenticated 为 True 表示已登录
        # FIXME
        if not user.is_authenticated:
            # 如果用户没有登陆
            can = False
        elif user.is_member:
            # 如果用户是会员
            can = True
        return can

来源:蓝桥(实验楼)
链接:https://www.lanqiao.cn/challenges/2997/

  • 解题思路

    • 初始化函数:

      传值:被调函数局部变量改变不会影响主调函数局部变量

      传址:被调函数局部变量改变会影响主调函数局部变量

      传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针)

      Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值;如果是列表,字典则传址;

      copy使用场景:列表或字典,且内部元素为数字,字符串或元组

      deepcopy使用场景:列表或字典,且内部元素包含列表或字典

  • 题解1:

    import copy
    class Lab(object):
        """ 实验
        """
    
        def __init__(self, name, tags=[]):
            self.name = name
            # FIXED
            tags = copy.deepcopy(tags)
            self._tags = tags
    
        def insert_tag(self, tag):
            """ 插入标签,需要检查标签是否存在
            """
            # FIXED
            if tag:
                if tag not in self._tags:
                    self._tags.append(tag)
    
        @property
        def tags(self):
            return self._tags[:]
    
        def can_be_started(self, user):
            """判断用户能否启动实验,只有登录的会员用户才能启动实验
            """
            # 传入的 user 为用户对象,is_authenticated 为 True 表示已登录
            # FIXED
            can = False
            if user.is_authenticated:
                if user.is_member:
                    can = True
            return can
    
    • 测试
    class User(object):
        def __init__(self, is_authenticated, is_member):
            self.is_authenticated = is_authenticated
            self.is_member = is_member
        user = User(True, True)
    
    lab = Lab('LLL', ['python', 'C'])
    print(lab.tags)  # ['python', 'C']
    lab.insert_tag('C++')
    print(lab.tags) # ['python', 'C', 'C++']
    lab.insert_tag('C')
    print(lab.tags) # ['python', 'C', 'C++']
    c = lab.can_be_started(user)
    print(c) True
    
    

标签:tags,题解,self,楼赛,lab,蓝桥,tag,user,def
From: https://blog.51cto.com/spaceack/6138678

相关文章

  • 【AT_abc294_g 题解】
    题意给定一颗\(n\)个节点的带权无向树。给出\(q\)个操作:1iw:把第\(i\)条边的边权变成\(w\)。2uv:求\(u\tov\)简单路径的边权和。解法根据树上差分。......
  • ABC288Ex 题解
    题意传送门给定\(n,m,x\),询问有多少个长度为\(n\)的非负整数序列满足以下条件:\(0\lea_1\lea_2\le\dots\lea_n\lem\)\(a_1\oplusa_2\oplus\dots\oplusa_n=x\)......
  • 问题解决01:默认不执行.ps1文件 - 无法双击.ps1文件
    默认不允许执行.ps1文件扩展名为.ps1的文件是用PowerShell写好的脚本文件。在Windows系统中,默认情况下是不允许执行.ps1文件。想双击一下执行.ps1文件?双击ps1文件很有......
  • 【题解】CF1034E
    题目描述给定\(n\)和长度为\(2^n\)的数列\(a_{0},a_{1}...a_{2^n-1}\)和\(b_{0},b_1...b_{2^n-1}\),保证每个元素的值属于\([0,3]\)生成序列\(c\),对于\(......
  • 【题解】CF889E
    题目描述\[f(x,n)=x\moda_n\]\[f(x,i)=(x\moda_i)+f(x\moda_i,i+1)\]给出a序列,当x取遍所有非负整数时\(f(x,1)\)的最大值。题解首先注意到\(a_i\)只......
  • 【题解】CF1368E
    题目描述有一个由\(n\)个点\(m\)条边组成的有向无环图,每个点出度至多为2。您需要标记一些点(不超过\(\frac{4}{7}n\)个)。标记一个点\(u\)将会删除所有与\(u\)连......
  • 【题解】CF1225F
    题目描述给出一棵n个节点的有根树T,点编号为0∼n−1。记f(u)为u的父节点。初始时你有一条n个点的链L(标号任意),每次操作你可以令f(u)←f(f(u))。需要将链改造......
  • 【题解】CF1439A2
    题目描述给定一个\(n\timesm\)的\(01\)矩阵,每次操作可以将某个\(2\times2\)的矩阵内的\(3\)个数取反,请在\(n\timesm\)步内将矩阵变为全\(0\)。题解这种题......
  • [第十届蓝桥杯省赛C++B组]等差数列
    来源:第十届蓝桥杯省赛C++B组算法标签:数论最大公约数题目描述数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N个整数。现在给......
  • C# 上传接口返回错误: (413) Request Entity Too Large问题解决
    问题报错:Failedtoloadresource:theserverrespondedwithastatusof413(RequestEntityTooLarge)找了很多方法,说什么反向代理配置啥的其实很多项目并没有开反......