Python Programming an OldMaid Card Game python

  • Thread starter garr6120
  • Start date
I am having trouble removing the same cards from my hand in my game of oldMaid. this is my source:
Mod note: Added code tags to preserve indentation, and modified code slightly (replacing index i in arrays with j.
Python:
    deck=[]
    suits = ['\u2660', '\u2661', '\u2662', '\u2663']
    ranks = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
    for suit in suits:
        for rank in ranks:
            deck.append(rank+suit)
    deck.remove('Q\u2663') # remove a queen as the game requires
    return deck

def shuffle_deck(deck):
    '''(list of str)->None
       Shuffles the given list of strings representing the playing deck  
    '''
    random.shuffle(deck)

#####################################

def deal_cards(deck):

    dealer=[]
    other=[]

    half=len(deck)//2
    for j in range(half):
        dealer.append(deck[j])

    for j in range(half,len(deck)):
        other.append(deck[j])
      
    return (dealer, other)
          
def remove_pairs(l):

    no_pairs=[]
  
    for j in range(1,len(l)):
        if l[j-1][0]!=l[j][0]:
            no_pairs.append(l[j])
          
    random.shuffle(no_pairs)
    return no_pairs

def play_game():
     '''()->None
     This function plays the game'''
  
     deck=make_deck()
     shuffle_deck(deck)
     tmp=deal_cards(deck)

     dealer=tmp[0]
     human=tmp[1]

     print("Hello. My name is Robot and I am the dealer.")
     print("Welcome to my card game!")
     print("Your current deck of cards is:")
     print_deck(human)
     print("Do not worry. I cannot see the order of your cards")

     print("Now discard all the pairs from your deck. I will do the same.")
     wait_for_player()
    
     dealer=remove_pairs(dealer)
     human=remove_pairs(human)
  
# main
play_game()
 
Last edited by a moderator:
32,519
4,237
I am having trouble removing the same cards from my hand in my game of oldMaid. this is my source:
Mod note: Added code tags to preserve indentation, and modified code slightly (replacing index i in arrays with j.
Python:
    deck=[]
    suits = ['\u2660', '\u2661', '\u2662', '\u2663']
    ranks = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
    for suit in suits:
        for rank in ranks:
            deck.append(rank+suit)
    deck.remove('Q\u2663') # remove a queen as the game requires
    return deck

def shuffle_deck(deck):
    '''(list of str)->None
       Shuffles the given list of strings representing the playing deck
    '''
    random.shuffle(deck)

#####################################

def deal_cards(deck):

    dealer=[]
    other=[]

    half=len(deck)//2
    for j in range(half):
        dealer.append(deck[j])

    for j in range(half,len(deck)):
        other.append(deck[j])
   
    return (dealer, other)
       
def remove_pairs(l):

    no_pairs=[]
 
    for j in range(1,len(l)):
        if l[j-1][0]!=l[j][0]:
            no_pairs.append(l[j])
       
    random.shuffle(no_pairs)
    return no_pairs

def play_game():
     '''()->None
     This function plays the game'''
 
     deck=make_deck()
     shuffle_deck(deck)
     tmp=deal_cards(deck)

     dealer=tmp[0]
     human=tmp[1]

     print("Hello. My name is Robot and I am the dealer.")
     print("Welcome to my card game!")
     print("Your current deck of cards is:")
     print_deck(human)
     print("Do not worry. I cannot see the order of your cards")

     print("Now discard all the pairs from your deck. I will do the same.")
     wait_for_player()
 
     dealer=remove_pairs(dealer)
     human=remove_pairs(human)
 
# main
play_game()
In the future, please use code tags, especially with Python code, where indentation is crucial.

What I did was add tags like this:
[code=python]
<Some Python code>
[/code]
I also modified your code slightly, replacing array indexes of i with j. The reason for this is that our system thinks that arr[i] means that it should display arr, and then start displaying in italics.

Regarding your question, please give more details. Where in the code are you seeing the problem?

Also, single-letter variables are OK for loop control variables, but not OK for any other purpose. In your remove_pairs() function, what does l (letter el) represent?
 

Ibix

Science Advisor
Insights Author
4,977
3,288
Suggestion: use a debugger or add a command so that, at the beginning of remove_pairs, you can see the cards you passed in.
 
32,519
4,237

Want to reply to this thread?

"Programming an OldMaid Card Game python" You must log in or register to reply here.

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving
Top