Hi
I have been working on a blackjack program and i have hit a brick wall as one of my Global assignments isn't working for some reason

import random
class Cards(object):
    def __init__(self):
        global cards
        global player  
        global comp
        global comp_tot
        global playert
        cards = {2:4,3:4,4:4,5:4,6:4,7:4,8:4,9:4,10:16,'ace':4}
        player = []
        playert = 0
        comp_tot=0
        comp = []
        print playert,'hi'
        print "The Game is Blackjack"
    def draw(self):
        f = cards.keys()
        a = random.choice(cards.keys())
        cards[a]-=1
        if cards[a] == 0:
            del cards[a]
            if len(cards)==0:
                print "out of cards"
                return False
        return a
    def First_turn(self):
        print comp_tot
        print cards
        print player
        print playert
        card1=self.draw()
        card2=self.draw()
        card2='ace'
        if card1 is not 'ace' and card2 is not 'ace':
            player.append(card1)
            player.append(card2)
            value=card1+card2
            print "your cards are:",card1,"and",card2
            print value
            playert+=value
        else:
            player.append(card1)
            player.append(card2)
            count =0
            if card1 =='ace':
                count = 'c1'
                if playert+11>21:
                    val = 1
                else:
                    val=11
            elif card2 == 'ace':
                count ='c2'
                if playert + 11 >21:
                    val = 1
                else:
                    val = 11
            
                

c = Cards()
c.First_turn()

every other global variable works exept playert. Any help on how to fix this would be appreciated. Oh also the error i am getting goes like this

Traceback (most recent call last):
  File "C:/Documents and Settings/Paul/My Documents/Python/projects/Blackjack/jack1.0.py", line 61, in <module>
    c.First_turn()
  File "C:/Documents and Settings/Paul/My Documents/Python/projects/Blackjack/jack1.0.py", line 30, in First_turn
    print playert
UnboundLocalError: local variable 'playert' referenced before assignment

oh and also sorry for all the added prints, they were for debugging purposes

Recommended Answers

All 3 Replies

One advantage of the class structure is that you don't use globals but self.var_name.

import random
class Cards(object):
    def __init__(self):
        self.cards = {2:4,3:4,4:4,5:4,6:4,7:4,8:4,9:4,10:16,'ace':4}
        self.player = []
        self.playert = 0
        self.comp_tot=0
        self.comp = []
        print self.playert,'hi'
        print "The Game is Blackjack"
    def draw(self):
        f = self.cards.keys()
        a = random.choice(self.cards.keys())
        self.cards[a]-=1
        if self.cards[a] == 0:
            del self.cards[a]
            if len(self.cards)==0:
                print "out of cards"
                return False
        return a
    def First_turn(self):
        print self.comp_tot
        print self.cards
        print self.player
        print self.playert
        card1=self.draw()
        card2=self.draw()
        card2='ace'
        if card1 is not 'ace' and card2 is not 'ace':
            self.player.append(card1)
            self.player.append(card2)
            value=card1+card2
            print "your cards are:",card1,"and",card2
            print value
            playert+=value
        else:
            self.player.append(card1)
            self.player.append(card2)
            count =0
            if card1 =='ace':
                count = 'c1'
                if self.playert+11>21:
                    val = 1
                else:
                    val=11
            elif card2 == 'ace':
                count ='c2'
                if self.playert + 11 >21:
                    val = 1
                else:
                    val = 11
            
                

c = Cards()
c.First_turn()

Welcome to the world of self! Just a side note, the Python style guide recommends to start class names with upper case and function/method names with lower case. If you write larger programs, this really helps.

The Python style guide by GVR himself:
http://www.python.org/peps/pep-0008.html

OH thanks that really did the trick!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.