Search code examples
pythonblackjack

How to avoid lots of manual work while making blackjack in python?


I'm currently working on a little project. I'm attempting to make blackjack, in python. I can calculate the sum of the cards, but its a very lengthy process. I have to manually type each and every thing. Is there some way I can make my code shorter? Any suggestions would be appreciated.

import random
stringlist=[2,3,4,5,6,7,8,9,10,"J","Q","K","A"]
cards=[]
cardssum=0
def deal():
    cards.append(stringlist[random.randrange(0,13)])
    cards.append(stringlist[random.randrange(0,13)])
    print "First hand :"+str(cards)
blackjack="false"
def blackjack1(cards):
    if cards[0]=="A" and cards[1]=="K":
        print "BlackJack!"
        blackjack="true"
    elif cards[0]=="A" and cards[1]=="Q":
        print "BlackJack!"
        blackjack="true"
    elif cards[0]=="A" and cards[1]=="J":
        print "BlackJack!"
        blackjack="true"
    elif cards[0]=="A" and cards[1]==10:
        print "BlackJack!"
        blackjack="true"
    elif cards[0]=="K" and cards[1]=="A":
        print "BlackJack!"
        blackjack="true"
    elif cards[0]=="Q" and cards[1]=="A":
        print "BlackJack!"
        blackjack="true"
    elif cards[0]=="J" and cards[1]=="A":
        print "BlackJack!"
        blackjack="true"
    elif cards[0]==10 and cards[1]=="A":
        print "BlackJack!"
        blackjack="true"
cardsum=0
def givesum(cardsum):
    if type(cards[0])==int and type(cards[1])==int:
        print "Your Cards add up to "+str(cards[0]+cards[1])
        cardsum+=cards[0]+cards[1]
        blackjack="false"
    elif cards[0]=="A" and type(cards[1])==int:
        print "Your Cards add up to "+str(11+cards[1])
        cardsum+=11+cards[1]
        blackjack="false"
    elif type(cards[0])==int and cards[1]=="A":
        print "Your Cards add up to "+str(11+cards[0])
        cardsum+=11+cards[0]
        blackjack="false"
    elif cards[0]=="K" and type(cards[1])==int:
        print "Your Cards add up to "+str(10+cards[1])
        cardsum+=10+cards[1]
        blackjack="false"
    elif type(cards[0])==int and cards[1]=="K":
        print "Your Cards add up to "+str(10+cards[0])
        cardsum+=10+cards[0]
        blackjack="false"
    elif cards[0]=="Q" and type(cards[1])==int:
        print "Your Cards add up to "+str(10+cards[1])
        cardsum+=10+cards[1]
        blackjack="false"
    elif type(cards[0])==int and cards[1]=="Q":
        print "Your Cards add up to "+str(10+cards[0])
        cardsum+=10+cards[0]
        blackjack="false"
    elif cards[0]=="J" and type(cards[1])==int:
        print "Your Cards add up to "+str(10+cards[1])
        cardsum+=10+cards[1]
        blackjack="false"
    elif type(cards[0])==int and cards[1]=="J":
        print "Your Cards add up to "+str(10+cards[0])
        cardsum+=10+cards[0]
        blackjack="false"
    elif cards[0]=="K" and cards[1]=="K":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="K" and cards[1]=="Q":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="Q" and cards[1]=="K":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="K" and cards[1]=="J":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="J" and cards[1]=="K":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="Q" and cards[1]=="Q":
        print "Your Cards add up 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="Q" and cards[1]=="J":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="J" and cards[1]=="Q":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="J" and cards[1]=="J":
        print "Your Cards add up to 20"
        cardsum+=20
        blackjack="false"
    elif cards[0]=="A" and cards[1]=="A":
        print "Close Call. Your Cards add up to 12"
        cardsum+=12
        blackjack="false"

deal()
blackjack1(cards)
givesum(cardsum)
var=raw_input("Would you like another card? Enter HIT or STAND").upper()

def deal2():
    if var=="HIT" and cardsum<21 and blackjack=="false":
        cards.append(stringlist[random.randrange(0,13)])
        print cards
    elif var=="STAND":
        print "CHECK FOR DEALER'S CARDS"
deal2()

def givesum2(cardsum):
    if cards[3]=="K" or cards[3]=="Q" or cards[3]=="J" or cards[3]

Solution

  • You could map various cards to values using a dictionary and then use that, plus in your blackjack1 method you could print "BlackJack!" just once...

    e.g (demo):

    import random
    stringlist=['2','3','4','5','6','7','8','9','10',"J","Q","K","A"]
    
    bmap = { 'A' : 11,
             'K' : 10,
             'Q' : 10,
             "J" : 10,
             '10': 10,
             '9' : 9,
             '8' : 8,
             '7' : 7,
             '6' : 6,
             '5' : 5,
             '4' : 4, 
             '3' : 3, 
             '2' :2
           }
    cards=[]
    cards.append(stringlist[random.randrange(0,13)])
    cards.append(stringlist[random.randrange(0,13)])
    print "Got %s and %s. Sum: %s"  % (cards[0],cards[1], bmap[cards[0]] + bmap[cards[1]])
    if(bmap[cards[0]] + bmap[cards[1]] == 21):
        print "Yay"
    else:
        print "..."