专业编程基础技术教程

网站首页 > 基础教程 正文

如果你能回答这9个问题,你在Python上很棒

ccvgpt 2024-11-18 09:23:39 基础教程 7 ℃

9个棘手的Python问题,我相信大多数读者在不作弊的情况下,至少无法正确回答其中7个问题。我想让你证明我错了。

作弊意味着:运行代码,查找东西等,你得到它

如果你能回答这9个问题,你在Python上很棒

我们走吧

1)装饰器的东西

def add(符号):
    def wrapper1(func):
        def wrapper2(*args, **kwargs):
            返回func(*args,**kwargs)+符号
    退货包装1

@add('!!')
def hello(名称):
    返回“你好”+姓名

打印(你好('汤姆'))

打印了什么?

  • A) hello tom
  • B) hello tom!
  • C)hello tom!!
  • D)<function add.<locals>.wrapper1.<locals>.wrapper2 at 0x1053c1080>
  • E)TypeError: ‘NoneType’ object is not callable
  • F)SyntaxError: iterable argument unpacking follows keyword argument unpacking

2)一些神奇的方法

狗类:
    def __init__(自我,名称):
self.name = 名称

    def __getattr__(自我,密钥):
        归还“苹果”
    
    def __getattribute__(自我,密钥):
        返回“橙色”
    
    def __getitem__(自我,密钥):
        返回“pear”

狗=狗('rocky')
打印(狗名)#??

这个打印的是什么?

  • A)'rocky'
  • B)'apple'
  • C)'orange'
  • D)'pear'
  • E)出现语法
  • F)发生KeyError

3)一群星星

x = [*[1,2]*2*3]

打印(x)

打印x是做什么的?

  • A)语法错误
  • B)ValueError:值太多,无法解压
  • C)[1, 2, 2, 3]
  • D)[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
  • E)[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  • F)[[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]]

4)列出理解诡计

出来 = []
对于我在[1,2,3]:
    行 = []
    对于j在[4,5,6]:
row.append(i+j)
out.append(行)

哪个列表理解与上述相同?

  • A)out = [[i+j for j in [4,5,6]] for i in [1,2,3]]
  • B)out = [[i+j for i in [4,5,6]] for j in [1,2,3]]
  • C)out = [i+j for i in [4,5,6] for j in [1,2,3]]
  • D)out = [i+j for j in [1,2,3] for i in [4,5,6]]
  • E)out = [i+j for i,j in zip([1,2,3], [4,5,6])]
  • F)out = [[i,j] for i,j in enumerate(zip(*[1,2,3], *[4,5,6]))]

5)切换诡计

a,b,c,d = 1,2,3,4
a,b,c,d = b,c,d,a
a,b,c,d = b,c,d,a
a,b,c,d = b,c,d,a
a,b,c,d = b,c,d,a

打印(a、b、c、d)

这里印了什么?

  • A)1 2 3 4
  • B)2 3 4 1
  • C)3 4 1 2
  • D)4 1 2 3
  • E)4 3 2 1
  • F)1 4 3 2

6)Lambda函数

哪个lambda函数无效?

  • A)lambda a, b, c: [*(a, b, c)]
  • B)lambda *a, **b: print(a, b)
  • C)lambda **b, *a: print(a, b)
  • D)lambda a, b: map(int, [a, b])
  • E)上述所有lambda函数
  • F)上面没有lambda函数

7)班神诡计

狗类:
    def __getattr__(自我,密钥):
        返回狗()

    def __getitem__(自我,密钥):
        返回0
    
狗=狗()

以下哪个选项会导致错误?

  • A)dog._.__._.___._.__._______._.___._____.__
  • B)dog.狗.狗.狗.狗.狗.狗.狗.狗.狗.狗.狗
  • C)dog.狗.狗['apple 3.14159']
  • D)dog.__123._1234.___654
  • E)dog[dog]
  • F)dog.14_._14.14_._14

8)-

x = -1-2----3----4-----5
打印(x)

当我们打印x时会发生什么?

  • A)语法错误
  • B)操作员错误
  • C)缩进错误
  • D)内存错误
  • E)-1
  • F)-3

9)Bitwise Shenanigans

x = 9
x = ~~~~x << 5 >> 2 << 5 >> 8 | 9 & 9 ^ 16 ^ 16
打印(x)

当我们打印x时会发生什么?

  • A)0
  • B)-9
  • C)9
  • D)25
  • E)零分区错误
  • F)语法错误

警告——答案如下

一定要花点时间试试这些,尽量不要作弊!

以下是答案

1)装饰器的东西

def add(符号):
    def wrapper1(func):
        def wrapper2(*args, **kwargs):
            返回func(*args,**kwargs)+符号
    退货包装1

@add('!!')
def hello(名称):
    返回“你好”+姓名

打印(你好('汤姆'))

打印了什么?

  • A) hello tom
  • B) hello tom!
  • C)hello tom!!
  • D)<function add.<locals>.wrapper1.<locals>.wrapper2 at 0x1053c1080>
  • E)TypeError: ‘NoneType’ object is not callable
  • F)SyntaxError: iterable argument unpacking follows keyword argument unpacking

答案:E)TypeError:NoneType对象不可调用

请注意,在wrapper1中,wrapper2返回。因此,默认情况下,callingwrapperwrapper1返回None。这就是为什么我们有NoneType object is not callable

2)一些神奇的方法

狗类:
    def __init__(自我,名称):
self.name = 名称

    def __getattr__(自我,密钥):
        归还“苹果”
    
    def __getattribute__(自我,密钥):
        返回“橙色”
    
    def __getitem__(自我,密钥):
        返回“pear”

狗=狗('rocky')
打印(狗名)#??

这个打印的是什么?

  • A)'rocky'
  • B)'apple'
  • C)'orange'
  • D)'pear'
  • E)出现语法
  • F)发生KeyError

答案:C)“橙色”

  • __getattr__当我们dog.key和key不存在时,定义行为
  • __getattribute__定义我们dog.key时的行为,无论密钥是否存在。这覆盖了__getattr__
  • __getitem__定义我们dog[key]时的行为,这不被使用

3)一群星星

x = [*[1,2]*2*3]

打印(x)

打印x是做什么的?

  • A)语法错误
  • B)ValueError:值太多,无法解压
  • C)[1, 2, 2, 3]
  • D)[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
  • E)[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  • F)[[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]]

答案:E

x = [*[1,2]*2*3]
= [* ([1,2]*2*3) ]
= [* ([1,2,1,2]*3) ]
= [* [1,2,1,2,1,2,1,2,1,2,1,2] ]
= [1,2,1,2,1,2,1,2,1,2,1,2]

^第一个*解包,而后一个*乘以

4)列出理解诡计

出来 = []
对于我在[1,2,3]:
    行 = []
    对于j在[4,5,6]:
row.append(i+j)
out.append(行)

哪个列表理解与上述相同?

  • A)out = [[i+j for j in [4,5,6]] for i in [1,2,3]]
  • B)out = [i+j for i,j in [i for i in [[1,2,3],[4,5,6]]]]
  • C)out = [i+j for i in [4,5,6] for j in [1,2,3]]
  • D)out = [i+j for j in [1,2,3] for i in [4,5,6]]
  • E)out = [i+j for i,j in zip([1,2,3], [4,5,6])]
  • F)out = [[i,j] for i,j in enumerate(zip(*[1,2,3], *[4,5,6]))]

答案:A

B、E和F是胡说八道。C和D不会产生嵌套列表。

5)切换诡计

a,b,c,d = 1,2,3,4
a,b,c,d = b,c,d,a
a,b,c,d = b,c,d,a
a,b,c,d = b,c,d,a
a,b,c,d = b,c,d,a

打印(a、b、c、d)

这里印了什么?

  • A)1 2 3 4
  • B)2 3 4 1
  • C)3 4 1 2
  • D)4 1 2 3
  • E)4 3 2 1
  • F)1 4 3 2

答案:A)1 2 3 4

a, b, c, d = 1, 2, 3, 4 # a=1 b=2 c=3 d=4
a, b, c, d = b, c, d, a # a=2 b=3 c=4 d=1
a, b, c, d = b, c, d, a # a=3 b=4 c=1 d=2
a, b, c, d = b, c, d, a # a=4 b=1 c=2 d=3
a, b, c, d = b, c, d, a # a=1 b=2 c=3 d=4

每次我们a, b, c, d = b, c, d, a,我们把a,b,c,d的值向右移动一步。但如果我们做4次,我们就会回到圆圈1, 2, 3, 4

6)Lambda函数

哪个lambda函数无效?

  • A)lambda a, b, c: [*(a, b, c)]
  • B)lambda *a, **b: print(a, b)
  • C)lambda **b, *a: print(a, b)
  • D)lambda a, b: map(int, [a, b])
  • E)上述所有lambda函数
  • F)上面没有lambda函数

答案:C

当我们定义函数(这包括lambda函数)时,任何*args必须在任何**kwargs之前定义。在C中,**b*a之前定义,所以这是错误的。

7)班神诡计

狗类:
    def __getattr__(自我,密钥):
        返回狗()

    def __getitem__(自我,密钥):
        返回0
    
狗=狗()

以下哪个选项会导致错误?

  • A)dog._.__._.___._.__._______._.___._____.__
  • B)dog.狗.狗.狗.狗.狗.狗.狗.狗.狗.狗.狗
  • C)dog.狗.狗['apple 3.14159']
  • D)dog.__123._1234.___654
  • E)dog[dog]
  • F)dog.14_._14.14_._14

答案:F

  • A)由于__getattr__返回另一个Dog对象,无论我们使用多少.__等,我们都会继续获得Dog对象
  • B)与A相同,但只是使用中文Unicode字符——这是一个有效的变量名
  • C)与A相同。但我们最后是dog[key],所以我们得到了0
  • D)与A相同。变量名可以以__开头并包含数字
  • E)这将简单地返回0
  • F)变量名不能以数字开头。所以这是错误的

8)-

x = -1-2----3----4-----5
打印(x)

当我们打印x时会发生什么?

  • A)语法错误
  • B)操作员错误
  • C)缩进错误
  • D)内存错误
  • E)-1
  • F)-3

答案:F

x = -5 # x 是 -5
x = --5 # x 是 5
x = ---5 # x 是 -5
x = ----5 # x 是 5
x = -----5 # x 是 -5

^添加更多-在5之前只会不断翻转其符号,因为负5等于5。

x = -1-2----3----4-----5
= -1-(-2)-(--3)-(---4)-(----5)
= -1-(-2)-(3)-(-4)-(5)
= -1+2-3+4-5
= -3

9)Bitwise Shenanigans

x = 9
x = ~~~~x << 5 >> 2 << 5 >> 8 | 9 & 9 ^ 16 ^ 16
打印(x)

当我们打印x时会发生什么?

  • A)0
  • B)-9
  • C)9
  • D)25
  • E)零分区错误
  • F)语法错误

答案:C)9

  • ~~x翻转x两次,所以~~x等于x
  • ~~~~x因此也等于x
  • x << 5 >> 2 << 5 >> 8左移x乘5,右移x乘2,左移x乘5,右移x乘8。这对x没有任何影响,所以在这种情况下,x将保持为9
  • 9 | 9只会给我们9
  • 9 & 9只会给我们9
  • 9 ^ 16(XOR操作员)将给我们25
  • 但如果我们XOR两次,我们会拿回9
  • (9 ^ 16) ^ 16会再次给我们9

结论

你设法在没有作弊的情况下正确回答了其中多少个?

  • 如果你设法正确回答了所有问题,那就干得好!
  • 如果你设法至少正确回答了7个,那还是做得很好!
  • 否则,没关系——这并不意味着你不擅长Python

希望你尝试这些问题时玩得开心!

最近发表
标签列表