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]
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 "..."