Card Matching Game on Python
Question: I am current building a simple card matching game in python, with a 5x4
(row*column) grid, in which two players try to match a deck of twenty cards
(2,10 of only suit Hearts) * 2.

The problem I am running into is in iterating through the deck, printing the
cards out in a grid fashion so it would look like this:

    
    
    -----     -----    -----     -----
    -   -     -   -    -   -     -   -
     4-H       6-H      7-H       8-H
    -   -     -   -    -   -     -   - 
    -----     -----    -----     -----
    

The code I currently have is below:

    
    
    #needed import for shuffle function
    from random import shuffle
    
    #class for my deck
    class Deck:
        #constructor starts off with no cards
        def __init__( self ):
            self._deck = []
    
        #populate the deck with every combination of suits and values    
        def Populate( self ):
            #Heart, Diamond, Spades, Clubs
            for suit in 'HDSC':
                #Jack = 11, Queen = 12, King = 13, Ace = 14
                for value in range(2, 15):
                    if value == 11:
                        value = 'J'
                    elif value == 12:
                        value = 'Q'
                    elif value == 13:
                        value = 'K'
                    elif value == 14:
                        value = 'A'
                    #add to deck list
                    self._deck.append(str(value) + '-' + suit)
    
        #populate the deck with only hears hearts and all cards except face cards and aces (2, 3, 4, 5, 6, 7, 8, 9, 10) twice
        def gamePop( self ):
            suit = 'H'
            for x in range(2):
                for value in range(2, 11):
                    self._deck.append(str(value) + '-' + suit)
    
        #shuffle the deck with the random import             
        def Shuffle( self ):
            shuffle( self._deck )
    
        #length of the deck
        def len( self ):
            return len( self._deck )
    
        def stringIt( self ): 
            #Returns the string representation of a deck
            result = ''
            for c in self._deck:
                result = result + str(c) + '\n'
            return result
    
    #class for a single card
    class Card:
        #constructor for what type of card it is
        def __init__( self, value, suit ):
            self._value = value
            self._suit = suit
            self._card = self._value + self._suit
    
        #print the type of card    
        def Description( self ):
            return ( self._card )
    
        #overloaded ==
        def __eq__( self, another ):
            if ( self._card == another.Description() ):
                return True
            else:
                return False
    #main function which plays the game
    def main():
    
        #sets player counters to zero,
        pOneCount = 0
        pTwoCount = 0
    
        #creates the deck to be put on the board
        gameDeck = Deck()
        gameDeck.gamePop()
        gameDeck.Shuffle()
    
        print(gameDeck._deck)
        currentCard = 0
        for row in range(5):
            for card in range(0,4+i):
                mystring = 
            print ('-------  ' * 4)
            print ('|     |  ' * 4)
            for x in range(4):
                print ('|  ' +gameDeck._deck[currentCard]+'|'),
                currentCard += 1
            print ('|     |  ' * 4)
            print ('-------  ' * 4)
    

Edit: I cleared up the code which I've tried.

The current output is this:

    
    
    -------  -------  -------  -------  
    |     |  |     |  |     |  |     |  
    |  7-H|
    |  5-H|
    |  7-H|
    |  9-H|
    |     |  |     |  |     |  |     |  
    -------  -------  -------  -------  
    


Answer: the problem is in the def main():

def main():

    
    
        print ('-------  ' * 4)
        print ('|     |  ' * 4)
        for x in range(4):
            print ('|  ' +gameDeck._deck[currentCard]+'|'),
            currentCard += 1
        print ('|     |  ' * 4)
        print ('-------  ' * 4)
    

the * 4 just mean that this:

    
    
    print ('-------  ' * 4)
    

will become this:

    
    
    print ('-------  ' + '-------  ' + '-------  ' + '-------  ' )
    

it can also be type as:

    
    
    print ('-------  -------  -------  -------  ' )
    

so. your problem is here:

    
    
        for x in range(4):
            print ('|  ' +gameDeck._deck[currentCard]+'|'),
            currentCard += 1
    

this would print as:

    
    
    |  7-H|
    |  5-H|
    |  7-H|
    |  9-H|
    

you need to put it as something like this:

    
    
            print ('|  ' +gameDeck._deck[currentCard]+'|'+'|  ' +gameDeck._deck[currentCard+1]+'|'+'|  ' +gameDeck._deck[currentCard+2]+'|'+'|  ' +gameDeck._deck[currentCard+3]+'|')
    

so it would print in one line like how you want it:

    
    
        |  7-H|  |  5-H|  |  7-H|  |  9-H|
    

here is the code that i clean up a little. if it work like it should, it
should work:

    
    
    def main():
    
        #sets player counters to zero,
        pOneCount = 0
        pTwoCount = 0
    
        #creates the deck to be put on the board
        gameDeck = Deck()
        gameDeck.gamePop()
        gameDeck.Shuffle()
    
        print(gameDeck._deck)
        currentCard = 0
        for row in range(5):
            for card in range(0,4+i): 
            print (' ------- ' * 4)
            print (' |     | ' * 4)
            print (' | ' +gameDeck._deck[currentCard]+' | '+' | ' +gameDeck._deck[currentCard+1]+' | '+' | ' +gameDeck._deck[currentCard+2]+' | '+' | ' +gameDeck._deck[currentCard+3]+' | ')
            print (' |     | ' * 4)
            print (' ------- ' * 4)
    

oh, and like John Y say (copy and paste):

The main function has a dangling mystring =, which is a blatant syntax error

here what i use to test, because the whole code don't work for me, i just
tested the print part:

    
    
    print (' ------- ' * 4)
    print (' |     | ' * 4)
    print (' | ' +"1-H"+' | '+' | ' +"2-H"+' | '+' | ' +"3-H"+' | '+' | ' +"4-H"+' |  ')
    print (' |     | ' * 4)
    print (' ------- ' * 4)
    

that got me:

    
    
     -------  -------  -------  ------- 
     |     |  |     |  |     |  |     | 
     | 1-H |  | 2-H |  | 3-H |  | 4-H |  
     |     |  |     |  |     |  |     | 
     -------  -------  -------  ------- 
    >>> 
    

