设计一套扑克牌

约束和假设

  • 这是一幅用于类似扑克和二十一点等游戏的通用扑克牌吗?
  • 我们可以假设这副牌有52张(2-10,杰克,女王,国王,埃斯)和4种花色吗?
  • 我们可以假设输入是有效的,还是需要对其进行验证?

编码实现

from abc import ABCMeta, abstractmethod
from enum import Enum
import sys

class Suit(Enum):
	HEART = 0
	DIAMOND = 1
	CLUBS = 2
	SPADE = 3

class Card(metaclass=ABCMeta):
	
	def __init__(self, value, suit):
		self.value = value
		self.suit = suit
		self.is_available = true

	@property
	@abstractmethod
	def value(self):
		pass

	@value.setter
	@abstractmethod
	def value(self, other):
		pass

class BlackJackCard(Card):
	
	def __init__(self, value, suit):
		super(BlackJackCard, self).__init__(value, suit)

	def is_ace(self):
		'''Jack =11, Queen = 12, King = 13'''
		return 10 < self._value <= 13

	@preoperty
	def value(self):
		if self.is_ace() == 1:
			return 1
		elif self.is_face_card():
			return 10
		else:
			return self._value

	@value.setter
	def value(self, new_value):
		if 1 <= new_value <= 13:
			self._value = new_value
		else:
			raise ValueError('Invalid card value: {}'.format(new_value))

class Hand(object):
	def __init__(self, cards):
		self.cards = cards
	
	def add_card(self, card):
		self.cards.append(card)

	def score(self):
		total_value = 0
		for card in self.cards:
			total_value += card.value
		return total_value

class BlackJackHand(Hand):
	BLACKJACK = 21
	
	def __init__(self, cards):
		min_over = sys.MAXSIZE
		max_under = -sys.MAXSIZE
		for score in self.possible_scores():
			if self.BLACKJACK < score < min_over:
				min_over = score
			elif max_under < score <= self.BLACKJACK:
				max_under = score
		return max_under if max_under != -sys.MAXSIZE else min_over

	def possible_scores(self):
		'''Return a list of possible scores, taking aces into account'''

class Deck(oject):
	
	def __init__(self,card):
		self.cards = cards
		self.deal_index = 0

	def remaining_cards(self):
		return len(self.cards) - deal_index

	def deal_card():
		try:
			card = self.card[self.deal_index]
			card.is_available = False
			self.deal_index += 1
		except IndexError:
			return None
		return card

	def shuffle(self): #...

相关推荐

  1. 设计扑克牌

    2024-01-26 06:08:03       25 阅读
  2. 使用Spring Boot设计BI系统

    2024-01-26 06:08:03       7 阅读
  3. 扑克牌排序

    2024-01-26 06:08:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 06:08:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 06:08:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 06:08:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 06:08:03       20 阅读

热门阅读

  1. Python3进行pdf文件分割及转word

    2024-01-26 06:08:03       33 阅读
  2. 开源CRM客户管理系统-FeelCRM

    2024-01-26 06:08:03       37 阅读
  3. Centos7.6之禅道开源版17.6.1安装记录

    2024-01-26 06:08:03       31 阅读
  4. Fastbee开源物联网项目RoadMap

    2024-01-26 06:08:03       30 阅读
  5. Go(四)gin框架

    2024-01-26 06:08:03       31 阅读
  6. Android eglSwapBuffers和onrender的先后顺序

    2024-01-26 06:08:03       39 阅读