首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >蓝桥楼赛第9期-修复未正确实现的实验类

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

作者头像
Spaceack
发布2020-11-04 14:39:27
发布2020-11-04 14:39:27
1.5K0
举报
文章被收录于专栏:编程使我快乐编程使我快乐

题目描述

  • 程序存放的位置 /home/shiyanlou/lab.py ;
  • 实验类名应该为 Lab ;
  • 实验对象中不能插入重复标签;
  • Python 中对象引用问题,尤其如复合对象 list, dict, tuple 的引用问题;
  • 代码中 FIXME 所在上下文存在 Bug;

要求

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

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

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

示例

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

代码语言:javascript
复制
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
代码语言:javascript
复制
来源:蓝桥(实验楼)
链接:https://www.lanqiao.cn/challenges/2997/

解题思路

  • 初始化函数: 传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针) Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值;如果是列表,字典则传址; copy使用场景:列表或字典,且内部元素为数字,字符串或元组 deepcopy使用场景:列表或字典,且内部元素包含列表或字典

题解1:

代码语言:javascript
复制
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

测试

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 要求
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档