diff --git a/Python/51.Black-jack/black-jack.py b/Python/51.Black-jack/black-jack.py new file mode 100644 index 0000000..d1a10c1 --- /dev/null +++ b/Python/51.Black-jack/black-jack.py @@ -0,0 +1,213 @@ +import random + +suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs') +ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace') +values = {'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7, 'Eight':8, 'Nine':9, 'Ten':10, 'Jack':10, 'Queen':10, + 'King':10, 'Ace':10} + +playing = True + +class Card(): + + def __init__(self,suit,rank): + self.suit = suit + self.rank = rank + + def __str__(self): + return self.rank + ' of ' + self.suit + +class Deck: + + def __init__(self): + self.deck = [] # start with an empty list + for suit in suits: + for rank in ranks: + self.deck.append(Card(suit,rank)) + + def __str__(self): + deck_comp = '' + for card in self.deck: + deck_comp += '\n' + card.__str__() + return 'The Deck has: ' + deck_comp + + def shuffle(self): + random.shuffle(self.deck) + + def deal(self): + single_card = self.deck.pop() + return single_card + +class Hand: + def __init__(self): + self.cards = [] # start with an empty list as we did in the Deck class + self.value = 0 # start with zero value + self.aces = 0 # add an attribute to keep track of aces + + def add_card(self,card): + self.cards.append(card) + self.value += values[card.rank] + + if card.rank == 'Ace': + self.aces += 1 + + def adjust_for_ace(self): + + + while self.value > 21 and self.aces: + self.value -= 10 + self.aces -= 1 + +class Chips: + + def __init__(self,total = 100): + self.total = total # This can be set to a default value or supplied by a user input + self.bet = 0 + + def win_bet(self): + self.total += self.bet + + def lose_bet(self): + self.total -= self.bet + +def take_bet(chips): + + while True: + try: + chips.bet = int(input('How many chips would you like to bet? ')) + except ValueError: + print('Sorry, a bet must be an integer!') + else: + if chips.bet > chips.total: + print("Sorry, your bet can't exceed",chips.total) + else: + break + +def hit(deck,hand): + + hand.add_card(deck.deal()) + hand.adjust_for_ace() + +def hit_or_stand(deck,hand): + global playing # to control an upcoming while loop + + while True: + x = input("Would you like to Hit or Stand? Enter 'h' or 's' ") + + if x[0].lower() == 'h': + hit(deck,hand) # hit() function defined above + + elif x[0].lower() == 's': + print("Player stands. Dealer is playing.") + playing = False + + else: + print("Sorry, please try again.") + continue + break + +def show_some(player,dealer): + print("\nDealer's Hand:") + print("