In [2]:
import collections
In [10]:
Card = collections.namedtuple('Card',['rank','suit'])
class FrechDeck():
ranks = [str(n) for n in range(2,11)] + list('JKQA')
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,postion):
return self._cards[postion]
In [11]:
beer_card = Card('7','diamonds')
beer_card
Out[11]:
In [12]:
deck = FrechDeck()
len(deck)
Out[12]:
In [13]:
deck[0]
Out[13]:
In [14]:
deck[-1]
Out[14]:
In [15]:
from random import choice
choice(deck)
Out[15]:
In [16]:
choice(deck)
Out[16]:
In [17]:
choice(deck)
Out[17]:
In [18]:
deck[:3]
Out[18]:
In [19]:
deck[12::13]
Out[19]:
In [20]:
for card in deck:
print(card)
In [21]:
for card in reversed(deck):
print(card)
In [22]:
Card('Q','hearts') in deck
Out[22]:
In [23]:
Card('7','beasts') in deck
Out[23]:
In [31]:
suit_values = dict(spades=3,hearts=2,diamonds=1,clubs=0)
def spades_high(card):
rank_value = FrechDeck.ranks.index(card.rank)
return rank_value * len(suit_values) + suit_values[card.suit]
In [32]:
for card in sorted(deck,key=spades_high):
print(card)
In [34]:
from math import hypot
class Vector:
def __init__(self, x=0,y=0):
self.x = x
self.y =y
def __repr__(self):
return f'Vector({self.x},{self.y})'
def __abs__(self):
return hypot(self.x, self.y)
def __bool__(self):
return book(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)
In [35]:
v1 = Vector(2,4)
v2=Vector(2,1)
v1+v2
Out[35]:
In [36]:
v=Vector(3,4)
abs(v)
Out[36]:
In [37]:
v*3
Out[37]:
In [38]:
abs(v*3)
Out[38]:
In [39]:
from collections import namedtuple
City = namedtuple('City','name country population coordinates')
tokyo = City('Tokyo','JP',36.933,(35.689722,139.691667))
tokyo
Out[39]:
In [40]:
tokyo.population
Out[40]:
In [41]:
tokyo[1]
Out[41]:
In [42]:
City._fields
Out[42]:
In [44]:
LatLong = namedtuple('LatLong','lat long')
delhi_data = ('Delhi NCR', 'IN', 21.935, LatLong(28.613889, 77.808889))
delhi = City._make(delhi_data)
delhi._asdict()
Out[44]:
In [45]:
for key,value in delhi._asdict().items():
print(key + ':', value)
In [46]:
board = [['_'] * 3 for i in range(3)]
board
Out[46]:
In [47]:
board[1][2] = 'X'
board
Out[47]:
In [57]:
board = []
for i in range(3):
row = ['_'] * 3
board.append(row)
board
Out[57]:
In [58]:
board[1][2] = 'X'
board
Out[58]:
In [59]:
weird_board = [['_'] * 3] * 3
weird_board
Out[59]:
In [60]:
weird_board[1][2] = 'X'
weird_board
Out[60]:
In [62]:
row = ['_'] * 3
weird_board = []
for i in range(3):
weird_board.append(row)
weird_board[1][2] = 'X'
weird_board
Out[62]:
In [63]:
l = [1,2,3]
id(l)
Out[63]:
In [64]:
l *= 2
l
Out[64]:
In [65]:
id(l)
Out[65]:
In [66]:
t=(1,2,3)
id(t)
Out[66]:
In [67]:
t *= 2
t
Out[67]:
In [68]:
id(t)
Out[68]:
In [69]:
import dis
dis.dis('s[a] += b')
In [ ]: