示例1.1 一摞有序的纸牌
生成的纸牌不能洗牌
import collections
from random import choice
Card = collections.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._cards=[Card(rank,suit) for suit in self.suits
for rank in self.ranks]
def __len__(self):
return len(self._cards)
def __getitem__(self, item):
return self._cards[item]
beer_card =Card('7','diamonds')
deck=FrenchDeck()
print(len(deck))
print(deck.__len__())
print(deck[0],deck[-1])
print(choice(deck))
print(deck[:3])
print(deck[12::13])
for card in deck:
print(card)
for card in reversed(deck):
print(card)
print(Card('Q',"bearts") in deck)
suit_values=dict(spades=3,hearts=2,diamonds=1,clubs=0)
def spades_high(card):
rank_value = FrenchDeck.ranks.index(card.rank)
return rank_value*len(suit_values)+suit_values[card.suit]
for card in sorted(deck,key=spades_high):
print(card)
输出结果:
只截取了示例1.1部分输出结果
示例1.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({},{})'.format(self.x, self.y)
#return 'Vector(%r,%r)'%(self.x,self.y)
def __abs__(self):
return hypot(self.x,self.y)
def __bool__(self):
return bool(self.x or self.y)
def __add__(self, other):
x=self.x+other.x
y=self.y+other.y
return Vector(x,y)
def __mul__(self, other):
return Vector(self.x * other,self.y * other)
v1=Vector(2,4)
v2=Vector(2,1)
print(v1+v2)
v3=Vector(0,0)
print(bool(v3))
输出结果: