jweinst1
11/11/2016 - 10:59 PM

blackjackiter.py

class Card:
		
	def __init__(self, member, suit):
		self.member = member
		self.suit = suit
	def __repr__(self):
		return "[{s}-{m}]".format(s=self.suit, m=self.member)


class Deck:
	suits = ["S", "C", "H", "D"]
	members = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
	
	
	def __init__(self):
		#do not use this on exam, random isn't taught in 61a
		from random import shuffle
		self.deck = [Card(x, y) for x in Deck.members for y in Deck.suits]
		self.deck_index = -1
		shuffle(self.deck)
		
	def __iter__(self):
		return self
		
	def __next__(self):
		if self.deck_index == len(self.deck):
			raise StopIteration
		else:
			self.deck_index += 1
			return self.deck[self.deck_index]
			

		
	
		

class Player:
	#simulates someone playing poker
	
	def __init__(self, deck):
		self.deck = iter(deck)
		self.hand = []
		self.total = 0
	
	def __repr__(self):
		return str(self.hand)
		
	def __iter__(self):
		return self
		
	def __next__(self):
		if self.total >= 21:
			raise StopIteration
		else:
			draw = next(self.deck)
			if draw.member == "A":
				if self.total + 11 > 21:
					self.total += 1
					self.hand.append(draw)
					return self.hand
				else:
					self.total += 11
					self.hand.append(draw)
					return self.hand
			else:
				if draw.member in ["J", "Q", "K"]:
					self.total += 10
					self.hand.append(draw)
					return self.hand
				else:
					self.total += int(draw.member)
					self.hand.append(draw)
					return self.hand