第1章 Python的数据模型

示例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))

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值