Last active
February 5, 2025 14:32
-
-
Save mjhea0/5680216 to your computer and use it in GitHub Desktop.
python blackjack
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import random | |
deck = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]*4 | |
def deal(deck): | |
hand = [] | |
for i in range(2): | |
random.shuffle(deck) | |
card = deck.pop() | |
if card == 11:card = "J" | |
if card == 12:card = "Q" | |
if card == 13:card = "K" | |
if card == 14:card = "A" | |
hand.append(card) | |
return hand | |
def play_again(): | |
again = raw_input("Do you want to play again? (Y/N) : ").lower() | |
if again == "y": | |
dealer_hand = [] | |
player_hand = [] | |
deck = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]*4 | |
game() | |
else: | |
print "Bye!" | |
exit() | |
def total(hand): | |
total = 0 | |
for card in hand: | |
if card == "J" or card == "Q" or card == "K": | |
total+= 10 | |
elif card == "A": | |
if total >= 11: total+= 1 | |
else: total+= 11 | |
else: | |
total += card | |
return total | |
def hit(hand): | |
card = deck.pop() | |
if card == 11:card = "J" | |
if card == 12:card = "Q" | |
if card == 13:card = "K" | |
if card == 14:card = "A" | |
hand.append(card) | |
return hand | |
def clear(): | |
if os.name == 'nt': | |
os.system('CLS') | |
if os.name == 'posix': | |
os.system('clear') | |
def print_results(dealer_hand, player_hand): | |
clear() | |
print "The dealer has a " + str(dealer_hand) + " for a total of " + str(total(dealer_hand)) | |
print "You have a " + str(player_hand) + " for a total of " + str(total(player_hand)) | |
def blackjack(dealer_hand, player_hand): | |
if total(player_hand) == 21: | |
print_results(dealer_hand, player_hand) | |
print "Congratulations! You got a Blackjack!\n" | |
play_again() | |
elif total(dealer_hand) == 21: | |
print_results(dealer_hand, player_hand) | |
print "Sorry, you lose. The dealer got a blackjack.\n" | |
play_again() | |
def score(dealer_hand, player_hand): | |
if total(player_hand) == 21: | |
print_results(dealer_hand, player_hand) | |
print "Congratulations! You got a Blackjack!\n" | |
elif total(dealer_hand) == 21: | |
print_results(dealer_hand, player_hand) | |
print "Sorry, you lose. The dealer got a blackjack.\n" | |
elif total(player_hand) > 21: | |
print_results(dealer_hand, player_hand) | |
print "Sorry. You busted. You lose.\n" | |
elif total(dealer_hand) > 21: | |
print_results(dealer_hand, player_hand) | |
print "Dealer busts. You win!\n" | |
elif total(player_hand) < total(dealer_hand): | |
print_results(dealer_hand, player_hand) | |
print "Sorry. Your score isn't higher than the dealer. You lose.\n" | |
elif total(player_hand) > total(dealer_hand): | |
print_results(dealer_hand, player_hand) | |
print "Congratulations. Your score is higher than the dealer. You win\n" | |
def game(): | |
choice = 0 | |
clear() | |
print "WELCOME TO BLACKJACK!\n" | |
dealer_hand = deal(deck) | |
player_hand = deal(deck) | |
while choice != "q": | |
print "The dealer is showing a " + str(dealer_hand[0]) | |
print "You have a " + str(player_hand) + " for a total of " + str(total(player_hand)) | |
blackjack(dealer_hand, player_hand) | |
choice = raw_input("Do you want to [H]it, [S]tand, or [Q]uit: ").lower() | |
clear() | |
if choice == "h": | |
hit(player_hand) | |
while total(dealer_hand) < 17: | |
hit(dealer_hand) | |
score(dealer_hand, player_hand) | |
play_again() | |
elif choice == "s": | |
while total(dealer_hand) < 17: | |
hit(dealer_hand) | |
score(dealer_hand, player_hand) | |
play_again() | |
elif choice == "q": | |
print "Bye!" | |
exit() | |
if __name__ == "__main__": | |
game() |
I made one that im not giving out the code for but its able to be played by anyone in the world with real betting and tons of features for the mod/admins
A bug found on total(hand)
if the hand is [9, "A", 9], the result should be 19 instead of 29.
Though I would not hit when I get a [9, "A"], but there is still a logical error in this situation
Actually ace and 9 is 20 not 19
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Can someone check this? I can't figure out what's wrong. I can't get past the dealing cards phase. It just keeps running but doesn't move forward to the next step to ask me to hit or stand.
import random
import os
The Card class definition
class Card:
def init(self, suit, value, card_value):
Clear the terminal
def clear():
os.system("clear")
Print player stats
def print_stats(player_name, funds, wins, losses, ties, blackjacks, busts):
print('Player: ', player_name)
print('Funds: $', funds)
print(f'Wins: {wins} Losses: {losses} Ties: {ties} Blackjacks: {blackjacks} Busts: {busts}')
Function to print the cards
def print_cards(cards, hidden):
Function for a game of blackjack
def blackjack_game(deck):
end_game = False
play_again = 'Y'
if name == 'main':