BEGINNER: Python value error: invalid literal for int ()

Im makes a simple blackjack program in python, but im gets "ValueError: invalid literal for int () with base 10: ...". To get the total value of the player’s hands, after creating the card object, I try to get the card rank: rank1 = Card.Card.getRank (card1)

heres class method:

 def getRank(self):
      if self.__rank == ('J'):
          self.__rank = 10
          return self.__rank
      elif self.__rank == ('Q'):
          self.__rank = 10
          return self.__rank
      elif self.__rank ==  ('K'):
          self.__rank = 10
          return self.__rank
      elif self.__rank == ('A'):
          self.__rank = 11
          return self.__rank
      else:
          self.__rank = self.__rank
          return int(self.__rank)`

the only time it returns a ValueError value: an invalid literal for int () with base 10 - this is a rank - it is "Q" or "K", it returns 10 for "J" and 11 for "A". I don’t understand why it returns an error for β€œQ” or β€œK”, since the code is the same for β€œJ” and β€œA” ... any help would be appreciated ... if that helps, before that I had

whole class

#Card class

#Class card holds ranks and suits of deck
#

TEN = 10
FOUR = 4

class Card():
     #Create rank list
     RANK= ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]*FOUR


     #Create list with rank names
     rankNames=[None, 'Ace', 'Two', 'Three', 'Four', 'Five', 'Six', 
                'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King']


     #Create suit list
     suitNames = ['CLUBS','DIAMONDS', 'HEARTS', 'SPADES']


     #Takes in rank, suit to create a deck of cards
     def __init__(self, rank, suit):
          self.__rank = rank
          self.__suit = suit


     #Returns the rank of card
     def getRank(self):
          if self.__rank == ('J'):
              print (repr(self.__rank))
              self.__rank = 10
              return self.__rank
          elif self.__rank == ('Q'):
              self.__rank = 10
              print (repr(self.__rank))
              return self.__rank
          elif self.__rank ==  ('K'):
              print (repr(self.__rank))
              self.__rank = 10
              return self.__rank
          elif self.__rank == ('A'):
              print (repr(self.__rank))
              self.__rank = 11
              return self.__rank
          else:
              self.rank = self.__rank
              print (repr(self.__rank))
              return int(self.__rank)   


     #Returns suit of card
     def getSuit(self):
          return self.__suit


     #Returns number of points the card is worth
     def BJVaue(self):
          if self.rank < 10:
               return self.rank
          else:
               return TEN


     def __str__(self):
          return "%s of %s" % ([self.__rank], [self.__suit])

Here where I create map objects

#Create a player hand                
player = []    
#Draw two cards for player add append
player.append(drawCard())
player.append(drawCard())

#Display players cards
print ("You currently have:\n" , player)

#Get the rank of the card
card1 = player[0]
card2 = player[1]

#Update players card status
print (card1)
print (card2)

#Get the total of the hand
rank1 = Card.Card.getRank(card1)
rank2 = Card.Card.getRank(card2)

#Get the ranks of players cards
playerRank = [rank1 , rank2]

#Get total of players hand
totalPlayer = getTotal(playerRank)

#Display players total
print ("Your current total is: ", totalPlayer)

getTotal

def getTotal(rank):
    #Create and set accumulator to 0
    total = 0

    #for each value in the rank
    for value in rank:
        #add to total
        total += value

    #Return total
    return total

,

+3
5

:

  if self.__rank == ('J' or 'Q' or 'K'):

('J' or 'Q' or 'K') 'J', , self.__rank == 'J'.

:

  if self.__rank in ('J', 'Q', 'K'):

, . , ? Python, . , , - .

+3

- , ( ?), OO, ..

: "ValueError: int() 10:..." , int() , , . : ?

    VALUE = {
        '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10,
        'J':10, 'Q':10, 'K':10, 'A':11
    }
    def getValue(self):
        try:
            return Card.VALUE[self.__rank]
        except KeyError:
            print "%s is not a valid rank" % (self.__rank)

, . , drawCard , Card.getValue , .

:

TEN = 10
FOUR = 4

, ; FOUR , 4, , FOUR TEN (, FOUR - 3, ). FACECARD_VALUE NUMBER_OF_SUITS.

"", : , , . ; !

, drawCard() ; , ? , , Ace of Spades? Deck, 52 , , deck.getCard() , .

, :

import random

class Deck():
    def __init__(self):
        self.cards = [Card(f,s) for f in Card.FACE for s in Card.SUIT]
        self.shuffle()

    def shuffle(self):
        random.shuffle(self.cards)

    def getCard(self):
        return self.cards.pop()

class Card():
    # Class static data
    FACE = ('A',   '2',   '3',     '4',    '5',    '6',   '7',     '8',     '9',    '10',  'J',    'Q',     'K')
    NAME = ('Ace', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King')
    RANK = (11,    2,     3,       4,      5,      6,     7,       8,       9,      10,    10,     10,      10)
    SUIT = ('Clubs','Diamonds', 'Hearts', 'Spades')

    def __init__(self, face, suit):
        ind = Card.FACE.index(face)
        self.__face = Card.FACE[ind]   # the long way around, but keeps it consistent
        self.__name = Card.NAME[ind]
        self.__rank = Card.RANK[ind]

        ind = Card.SUIT.index(suit)
        self.__suit = Card.SUIT[ind]

    def getFace(self):
        return self.__face

    def getName(self):
        return self.__name

    def getRank(self):
        return self.__rank

    def getSuit(self):
        return self.__suit

    def __str__(self):
        return "%s of %s" % (self.__name, self.__suit)

    def __repr__(self):
        return "%s%s" % (self.__face, self.__suit[:1])

class Player():
    def __init__(self):
        self.cards = []

    def drawCard(self, deck):
        self.cards.append(deck.getCard())

    def drawCards(self, deck, num=2):
        for i in range(num):
            self.drawCard(deck)

    def getRank(self):
        return sum( c.getRank() for c in self.cards )

    def __str__(self):
        cards = ', '.join(str(c) for c in self.cards)
        return  "%s: %d" % (cards, self.getRank())

    def __repr__(self):
        return ' '.join([repr(c) for c in self.cards])

class Game():
    def __init__(self):
        self.deck = Deck()
        self.player1 = Player()
        self.player2 = Player()

    def test(self):
        self.player1.drawCards(self.deck, 2)
        print "Player 1:", self.player1

        self.player2.drawCards(self.deck, 2)
        print "Player 2:", self.player2

def main():
    g = Game()
    g.test()

if __name__=="__main__":
    main()
+1
rank1 = Card.Card.getRank(card1)

, getRank . getRank , . , Card, , , . , . .

, , .

Update:

?

RANK= ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]*FOUR

4 ?

0

, Python. , getRank() :

class Card(object):
    RANK = {"A":1, "2":2,  "3": 3, "4":4,  "5": 5, "6": 6, "7":7,
            "8":8, "9":9, "10":10, "J":10, "Q":10, "K":10}

    def __init__(self, draw): # just for example
        self.__rank = draw

    def getRank(self):
        self.__rank = Card.RANK[self.__rank]
        return self.__rank
    #  ...

print Card('A').getRank()
# 1
print Card('4').getRank()
# 4
print Card('J').getRank()
# 10
print Card('K').getRank()
# 10
0

from itertools import product

card_values = (
    ("1", "1", 1),
    ("2", "2", 2),
    ("3", "3", 3),
    ("4", "4", 4),
    ("5", "5", 5),
    ("6", "6", 6),
    ("7", "7", 7),
    ("8", "8", 8),
    ("9", "9", 9),
    ("10" ,"10", 10),
    ("Jack", "J", 10),
    ("Queen", "Q", 10),
    ("King", "K", 10),
    ("Ace", "A", 11))

card_suits = ("Spades", "Clubs", "Hearts", "Diamonds")

class Card(object):
    def __init__(self, name, short_name, rank, suit):
        self.name = name
        self.short_name = short_name
        self.rank = rank
        self.suit = suit  

cards = []
for (name, short_name, rank), suit in product(card_values, card_suits):
    cards.append(Card(name, short_name, rank, suit))
0

Source: https://habr.com/ru/post/1779897/


All Articles