Advertisement
stinxu

Untitled

Dec 1st, 2019
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. """Blackjack game."""
  2. import requests
  3.  
  4.  
  5. class Card:
  6. """Class for card."""
  7.  
  8. def __init__(self, value: str, suit: str, code: str):
  9. """
  10. Konstruktor teeb kaardi objekti, võttes sisendparameetriteks kaardi väärtuse, masti ja koodi.
  11.  
  12. Väärtused peab salvestama sama nimega isendiväljadele (card, suit, code).
  13.  
  14. values = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'JACK', 'QUEEN', 'KING', 'ACE']
  15.  
  16. suits = ['SPADES', 'DIAMONDS', 'HEARTS', 'CLUBS']
  17.  
  18. codes = {'AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', '0S', 'JS', 'QS', 'KS',
  19. 'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', '0D', 'JD', 'QD', 'KD',
  20. 'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', '0C', 'JC', 'QC', 'KC',
  21. 'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', '0H', 'JH', 'QH', 'KH'}.
  22. """
  23. values = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'JACK', 'QUEEN', 'KING', 'ACE']
  24.  
  25. suits = ['SPADES', 'DIAMONDS', 'HEARTS', 'CLUBS']
  26.  
  27. codes = {'AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', '0S', 'JS', 'QS', 'KS',
  28. 'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', '0D', 'JD', 'QD', 'KD',
  29. 'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', '0C', 'JC', 'QC', 'KC',
  30. 'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', '0H', 'JH', 'QH', 'KH'}
  31. self.top_down = False
  32. self.value = value
  33. self.suit = suit
  34. self.code = code
  35.  
  36. def __str__(self):
  37. """Prindib kaardi koodi juhul, kui top_down == False, vastasel juhul prindib ??."""
  38. return self.code if not self.top_down else "??"
  39.  
  40. def __repr__(self) -> str:
  41. """Tagastab code-väljal oleva väärtuse."""
  42. return self.code
  43.  
  44. def __eq__(self, other) -> bool:
  45. """
  46. Võrdleb Card objekti teise objektiga. Tagastab True, kui teine object on Card tüüpi.
  47.  
  48. ja sama masti ning väärtusega.
  49. """
  50. return isinstance(other, Card) and self.suit == other.suit and self.value == other.value
  51.  
  52.  
  53. class Deck:
  54. """Class for deck."""
  55.  
  56. DECK_BASE_API = "https://deckofcardsapi.com/api/deck/"
  57.  
  58. def __init__(self, deck_count: int = 1, shuffle: bool = False):
  59. """
  60. Konstruktor teeb Deck objekti. Saab sisendiks pakkide arvu (mitu 52 kaardist pakki on) ja boolean muutuja.
  61.  
  62. mis määrab, kas kaardipakid peavad olema segatud või ei. Salvestada tuleb deck_count ning ka shuffeled
  63. väärtused. Viimase salvestamiseks kasutada isendimuutujat nimega is_shuffled. Lisaks peab isendimuutujas nimega
  64. remaining hoidma kaardipakis olevate kaartide arvu (võib kasutada ka property'd) Kaardipaki genereerimiseks
  65. kasutada
  66.  
  67. Kuna klass peab toimima ka ilma interneti ühenduseta, siis on tuleb valmis genereerida ka n-ö tagavara
  68. kaardipakk, mida saaks kasutada, kui api lõpetab töötamise. Tagavara kaardipakk salvestada muutujasse
  69. _backup_deck. Seda tagavara pakki on mõistlik sünkroniseerida API-st tuleneva pakiga. Ehk siis kui API ütleb,
  70. et järgmine kaart on S3, siis tuleks see ka tagavara pakist eemaldada jne.
  71. """
  72. self.deck_count = deck_count
  73. self.shuffle = shuffle
  74. self._backup_deck = []
  75. self.remaining = -1
  76. try:
  77. self.response = requests.get(Deck.DECK_BASE_API)
  78. except requests.exceptions.ConnectionError:
  79. self.response = None
  80. if self.response is not None and self.response.status_code == requests.codes.ok:
  81. self.result = self.response.json()
  82. self.is_shuffled = self.result["shuffled"]
  83. self.remaining = self.result["remaining"]
  84. self.deck_id = self.result["deck_id"]
  85.  
  86. def shuffle(self) -> None:
  87. """Segab kaardipaki, kasutada https: // deckofcardsapi.com / api / deck / << deck_id >> / shuffle /."""
  88.  
  89. def draw_card(self, top_down: bool = False): # -> Optional[Card]
  90. """
  91. Draw card from the deck.
  92.  
  93. :return: card instance.
  94. """
  95. pass
  96.  
  97. def _request(self, url: str) -> dict:
  98. """Update deck."""
  99. pass
  100.  
  101. @staticmethod
  102. def _generate_backup_pile(): # -> List[Card]:
  103. """Generate backup pile."""
  104. return []
  105.  
  106.  
  107. if __name__ == '__main__':
  108. d = Deck(shuffle=True)
  109. print(d.remaining) # 52
  110. card1 = d.draw_card() # Random card
  111. print(card1 in d._backup_deck) # False
  112. print(d._backup_deck) # 51 shuffled cards
  113. d2 = Deck(deck_count=2)
  114. print(d2._backup_deck) # 104 ordered cards (deck after deck)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement