chapter_1.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import collections
  2. from random import choice
  3. import math
  4. Card = collections.namedtuple('Card', ['rank', 'suit'])
  5. class FrenchDeck:
  6. ranks = [str(n) for n in range(2, 11)] + list('JQKA')
  7. suits = 'spades diamonds clubs hearts'.split()
  8. def __init__(self) -> None:
  9. self._cards = [Card(rank, suit) for suit in self.suits
  10. for rank in self.ranks]
  11. def __len__(self):
  12. return len(self._cards)
  13. def __getitem__(self, position):
  14. return self._cards[position]
  15. def spades_high(self, card: Card):
  16. rank_value = self.ranks.index(card.rank)
  17. print(rank_value*len())
  18. # return rank_value
  19. def foo(self):
  20. self.suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
  21. print(self.suit_values)
  22. def card_test():
  23. deck = FrenchDeck()
  24. card = choice(deck)
  25. print(deck[1])
  26. deck.spades_high(deck[1])
  27. # print(len(deck))
  28. # print(deck[0])
  29. # Выбрать случайный элемент коллекции
  30. # print(choice(deck))
  31. # print(deck[12::13])
  32. # for card in deck:
  33. # print(card)
  34. # deck.foo()
  35. '''
  36. vector: упрощенный класс, демонстрирующий некоторые специальные методы.
  37. '''
  38. class Vector:
  39. def __init__(self, x=0, y=0) -> None:
  40. self.x = x
  41. self.y = y
  42. def __repr__(self) -> str:
  43. return f'Vector({self.x!r}, {self.y!r})'
  44. # Абсолютная величина
  45. def __abs__(self):
  46. return math.hypot(self.x, self.y)
  47. def __bool__(self):
  48. return bool(abs(self))
  49. def __add__(self, other):
  50. x = self.x + other.x
  51. y = self.y + other.y
  52. return Vector(x, y)
  53. def __mul__(self, scalar):
  54. return Vector(self.x * scalar, self.y * scalar)
  55. def vector_test():
  56. v1 = Vector(3, 4)
  57. v2 = Vector(1, 2)
  58. v3 = v1 + v2
  59. v4 = v3 * 2
  60. print(abs(v1))
  61. print(v3)
  62. print(v4)
  63. def main():
  64. vector_test()
  65. def test():
  66. # ranks = [str(n) for n in range(2, 11)] + list('JQKA')
  67. # print(ranks)
  68. Car = collections.namedtuple('Car', 'color mileage')
  69. car1 = Car('red', 150)
  70. print(car1.color, car1.mileage)
  71. print(car1._fields)
  72. if __name__ == '__main__':
  73. main()
  74. # test()