• 刷题(四)


    题目一

    What gets printed?()

    print r"
    woow"
    

    A. new line then the string: woow
    B. the text exactly like this: r" woow"
    C. the text like exactly like this: woow
    D. the letter r and then newline then the text: woow
    E. the letter r then the text like this: nwoow

    分析

    python中字符串前置r代表原始字符串标识符,该字符串中的特殊符号不会被转义,适用于正则表达式中繁杂的特殊符号表示。不加r表示要转义成换行,一般为了输出字符串" ",有两种做法:在前面加上r或者对进行转义(即" ")

    答案

    C

    题目二

    下面代码运行后,a、b、c、d四个变量的值,描述错误的是()

    import copy
    a = [1, 2, 3, 4, ['a', 'b']]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    a.append(5)
    a[4].append('c')
    

    A. a == [1,2, 3, 4, ['a', 'b', 'c'], 5]
    B. b == [1,2, 3, 4, ['a', 'b', 'c'], 5]
    C. c == [1,2, 3, 4, ['a', 'b', 'c']]
    D. d == [1,2, 3, 4, ['a', 'b', ‘c’]]

    分析

    • 直接赋值:就是对象的引用(别名)
    • 浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象
    • 深拷贝(deepcopy):完全拷贝父对象及其子对象
    b = a:赋值引用,a和b都指向同一个对象
    

    img

    b = a.copy():浅拷贝,a和b都是一个独立的对象,但它们的子对象是指向同一对象(是引用)
    

    img

    b = copy.deepcopy(a):深拷贝,a和b完全拷贝了父对象和子对象,两者是完全独立的
    

    img
    所以d = [1, 2, 3, 4, ['a', 'b']],a和d是是完全独立的,a的变化不会引起d的变化

    答案

    D

    题目三

    下列代码运行结果是?()

    a = 'a'
    print a > 'b' or 'c'
    

    A. a
    B. b
    C. c
    D. True
    E. False

    分析

    python中支持逻辑运算符,以下假设变量 a = 10, b = 20:

    运算符 逻辑表达式 描述 实例
    and x and y 布尔与:如果x为False,x and y返回False,否则它返回y的计算值 ( a and b )返回20
    or x or y 布尔或:如果x为True,它返回x的值,否则它返回y的计算值 ( a or b )返回10
    not not x 布尔非:如果x为True,返回False,如果x为False,返回True not( a and b) 返回False

    当 a > 'b'。即'a' > 'b'为False时(因为'a'的ASCII码比'b'小),所以返回'c'

    答案

    C

    题目四

    python代码如下:

    foo = [1, 2]
    foo1 = foo
    foo.append(3)
    

    A. foo值为[1, 2]
    B. foo值为[1, 2, 3]
    C. foo1值为[1, 2]
    D. foo1值为[1, 2, 3]

    分析

    列表在python中是以"列表类"的形式存在,创建一个列表,即实例化一个类。python里面的对象赋值实际上是对象的引用。foo = [1, 2], foo1 = foo就是将列表对象赋给foo1,此时foo和foo1都是指向内存中的同一个对象,而append()是列表类的方法,append()方法是在自身对象上进行操作,因为foo和foo1都是指向同一个列表对象,所以会得到相同的结果。另一个例子,foo = [2], foo1 = foo, foo = [3]的结果为foo1 = [2], foo = [3],因为foo = [3] 会实例化一个新的列表类

    答案

    BD

    题目五

    python中单下划线_foo与双下划线__foo与__foo__的成员,下列说法正确的是?()
    A. _foo 不能直接用于’from module import *’
    B. __foo解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名
    C. __foo__代表python里特殊方法专用的标识
    D. __foo 可以直接用于’from module import *’

    分析

    python中主要存在四种命名方式:
    1.object #公共方法
    2._object #半保护,被看做是"protect",只有类对象和子类对象自己能访问到这些变量,在模块或类外不能使用,不能用"from module import"导入
    3.__object #全私有,私有方法"private",只有类对象自己能访问,连子类对象也不能访问,不能使用"from module import"导入,为了避免和子类的方法名称冲突,对于该标识符描述的方法,父类的方法不能轻易被子类方法覆盖,它的名字实际上是_classname__methodname
    4. __object__ #内建方法,用户不要这样定义

    答案

    ABC

  • 相关阅读:
    【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]
    【BZOJ2648】SJY摆棋子 [KD-tree]
    【BZOJ3237】【AHOI2013】连通图 [CDQ分治]
    【BZOJ1901】Dynamic Rankings [整体二分]
    【BZOJ2527】【POI2011】Meteors [整体二分]
    【BZOJ3624】【APIO2008】免费道路 [生成树][贪心]
    【BZOJ2663】灵魂宝石 [二分]
    【BZOJ4653】【NOI2016】区间 [线段树]
    【BZOJ2049】【SDOI2008】洞穴勘测 [LCT]
    【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
  • 原文地址:https://www.cnblogs.com/my_captain/p/12729154.html
Copyright © 2020-2023  润新知