Python夺命20问

1.请观看下列代码并回答问题:

import collections
from random import choice

Card = collection.namedtuple('Card', ['rank', 'suit'])

class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    
    def __init__(self):
        self._card = [Card(rank, suit) for suit in self.suits
                                                      for rank in self.ranks]
    
    def __len__(self):
        return len(self._card)
    
    def __getitem__(self, position):
        return self._cards[position]

#1
beer_card = Card('7', 'diamonds')
print(beer_card)
deck = FrenchDeck()
print(len(deck))
print(deck[0])
print(deck[-1])
#2
print(choice(deck))
print(choice(deck))
print(choice(deck))

(1)写出#1段代码的输出
(2)判断:

2段代码的输出一定不一样

FrenchDeck是可迭代的,也可以反向迭代
FrenchDeck是怎么样也无法改变顺序的(除非破坏这个类的封装性)

答案:

(1):
Card(rank=7, suit='diamonds')
52
Card(rank='2', suit='spades')
Card(rank='A', suit='hearts')
(2):
否
是
是

2.请观看下列代码并回答问题:

from math import hypot

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
    
    def __repr__(self):
        return 'Vector(%r, %r)' % (self.x, self.y)

    def __abs__(self):
        return hypot(sef.x, self.y)
    
    def __bool__(self):
        return bool(abs(self))
    
    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        return Vector(x, y)
    
    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)


v1 = Vector(2, 4)
v2 = Vector(3, 1)
print(v1 + v2)

v = Vector(3, 4)
print(abs(v))
print(v * 3)
print(abs(v * 3))

(1)写出#1段代码的输出
(2)判断:
__init__是用来初始化Vector类的
__repr__是用来输出对象的字符串表达形式的
__mul__是用来求Vector的模的

答案:

Vector(4, 5)
5.0
Vector(9, 12)
15.0
是
是
否

3.请观看下列代码并回答问题:

>>>t = (1, 2, [30, 40])
>>>t[2] += [50, 60]

请问下列哪个说法是对的:
A. t变成(1, 2, [30, 40, 50, 60])
B. 因为tuple不支持对它的元素赋值,所以会抛出TypeError异常
C. 以上两个都不对
D. A和B都是对的

答案:

D

--未完待续--

posted @ 2022-04-10 11:15  WindowsRegedit  阅读(59)  评论(0)    收藏  举报