I am a total newbie to programming. I was hoping to learn how to write a program that prints out a string representation of a random card from a deck of playing cards. The programs should use either “A”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “J”, “Q”, or “K” for the value of the card and either “c”, “h”, “s”, “d” for the suit. So, if the program randomly selects the jack of clubs, it should display Jc. Using
one tuple to represent all of the possible card values and another tuple for the possible suits. Thanks
iuessele
- 8 Contributors
- forum8 Replies
- 25 Views
- 9 Years Discussion Span
- comment Latest Post by alexander.selin.7
BearofNH 104
I use 'T' instead of '10', but you can change this as needed
import random
rank = random.choice( ('A','2','3','4','5','6','7','8','9','T','J','Q','K') )
suit = random.choice( ('c','d','h','s') )
card = rank + suit
print card # or print(card) for Python >= 2.6
vegaseat
commented:
nice solution! +11
vegaseat 1,720
Nice solution by BearofNH.
Just a note, you can use print(card) with Python25 too.
Stefano Mtangoo 455
for more info on random module:
http://docs.python.org/library/random.html
http://effbot.org/librarybook/random.htm
mn_kthompson 3
Another idea that might be useful is to start with one list of all the unused cards in the deck (AC, 2C, 3C, etc). Randomly select cards from the list and put them into another list called used_cards and remove them from the list of unused cards.
I'm not sure what the OP is trying to do, so it might not matter, but the code from BearofNH could return the same card more than once. Not such a big deal if you're playing 21 against the computer, but that would be a problem if you have a whole table of blackjack players and five aces show up. It would completely wreak havoc on hearts.
One thing I would avoid is creating the list of unused cards like I mentioned above, getting a random sample and putting it into a list of used cards like I mentioned, but not removing it from the master list. If you're playing a game the distributes every card in the deck you might find your performance blows near the end of the deck because your random sample keeps pulling a card that is already in use and has to do the sample again.
I also suppose that you don't need to maintain the list of used cards because everything that isn't in the list of unused cards is obviously in use. I suggested doing it that way because when it gets to the end of the hand it would be really easy to put those cards back in the deck: unused_card_list += used_card_list and used_card_list = [].
unused_cards = ['AS', '2S', '3S', etc...]
used_cards = []
player_1_hand = []
player_2_hand = []
# deal five cards to player 1
for i in range(5):
drawn_card = random.choice(unused_cards)
used_cards.append(drawn_card)
unused_cards=[f for f in unused_cards if f not in used_cards]
player_1_hand.append(drawn_card)
# repeat the process for player 2
for i in range(5):
drawn_card = random.choice(unused_cards)
used_cards.append(drawn_card)
player_2_hand.append(drawn_card)
unused_cards=[f for f in unused_cards if f not in used_cards]
print player_1_hand
print player_2_hand
Murtan 317
I like using random.shuffle() on the unused cards (or deck) and then you can just pop() a random card off the unused list.
If you need to keep a used cards list, you can append the card you just got.
When it is time to shuffle again, you can refill the unused cards and random.shuffle() again. This would also work with more than one deck of cards if it was desired.
Kristopherr
I too used random.shuffle() after creating a deck, then pop the cards out as you would deal them in a real card game.
import random
#creating the deck of cards
cards = ['AS', 'KS', 'QS', 'JS', '10S', '9S', '8S', '7S', '6S', '5S', '4S', '3S', '2S',\
'AD', 'KD', 'QD', 'JD', '10D', '9D', '8D', '7D', '6D', '5D', '4D', '3D', '2D',\
'AC', 'KC', 'QC', 'JC', '10C', '9C', '8C', '7C', '6C', '5C', '4C', '3C', '2C',\
'AH', 'KH', 'QH', 'JH', '10H', '9H', '8H', '7H', '6H', '5H', '4H', '3H', '2H']
#for this example I have 2 hands
hand1 = []
hand2 = []
#shuffle the cards
random.shuffle(cards)
num = input('How many cards to deal to each player? ')
while num > 0:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
num = num - 1
print 'hand one is: '
print hand1
print 'hand two is: '
print hand2
print 'the cards remaining in the deck are: '
print cards
Edited
by Kristopherr: n/a
vegaseat 1,720
Mildly more 'pythonic' ...
# an example of a deck of cards and drawing a random hand
import random
def new_deck():
"""
create a deck of cards
suit: club=C, diamond=D, heart=H spade=S
rank: ace=A, 10=T, jack=J, queen=Q, king=K, numbers=2..9
ace of spade would be AS, 8 of heart would be 8H and so on
return a list of a full deck of cards
"""
rs = [rank + suit for rank in "A23456789TJQK" for suit in "CDHS"]
return rs
def draw_cards(n, cards_list):
"""
randomly draw n cards from the deck (cards_list)
remove those cards from the deck
since object cards_list is by reference, it will change too
return a list of n cards
"""
random.shuffle(cards_list)
return [cards_list.pop() for k in range(n)]
# new deck
cards_list = new_deck()
print("New deck = %s cards" % len(cards_list)) # test
# draw n cards per hand
n = 5
# draw the hands
hand1 = draw_cards(n, cards_list)
hand2 = draw_cards(n, cards_list)
print('-'*40)
# show the 2 hands
print("hand1 = %s" % hand1)
print("hand2 = %s" % hand2)
print('-'*40)
print("New deck = %s cards" % len(cards_list)) # test
"""my random result -->
New deck = 52 cards
----------------------------------------
hand1 = ['4C', 'JH', '9H', 'TC', '4H']
hand2 = ['TH', 'KC', '5D', '6D', 'KD']
----------------------------------------
New deck = 42 cards
"""
alexander.selin.7
I'm using Kristopherr's structure:
import random
creating the deck of cards
cards = ['AS', 'KS', 'QS', 'JS', '10S', '9S', '8S', '7S', '6S', '5S', '4S', '3S', '2S',\
'AD', 'KD', 'QD', 'JD', '10D', '9D', '8D', '7D', '6D', '5D', '4D', '3D', '2D',\
'AC', 'KC', 'QC', 'JC', '10C', '9C', '8C', '7C', '6C', '5C', '4C', '3C', '2C',\
'AH', 'KH', 'QH', 'JH', '10H', '9H', '8H', '7H', '6H', '5H', '4H', '3H', '2H']
player = input('How many players? ')
hand1 = []
hand2 = []
hand3 = []
hand4 = []
hand5 = []
hand6 = []
hand7 = []
hand8 = []
hand9 = []
hand10 = []
hand11 = []
hand12 = []
hand13 = []
hand14 = []
hand15 = []
#shuffle the cards
random.shuffle(cards)
num = input('How many cards to deal to each player? ')
while num > 0:
if player == 1:
hand1.append(cards.pop(0))
if player == 2:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
if player == 3:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
if player == 4:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
if player == 5:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
if player == 6:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
if player == 7:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
if player == 8:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
if player == 9:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
hand9.append(cards.pop(0))
if player == 10:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
hand9.append(cards.pop(0))
hand10.append(cards.pop(0))
if player == 11:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
hand9.append(cards.pop(0))
hand10.append(cards.pop(0))
hand11.append(cards.pop(0))
if player == 12:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
hand9.append(cards.pop(0))
hand10.append(cards.pop(0))
hand11.append(cards.pop(0))
hand12.append(cards.pop(0))
if player == 13:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
hand9.append(cards.pop(0))
hand10.append(cards.pop(0))
hand11.append(cards.pop(0))
hand12.append(cards.pop(0))
hand13.append(cards.pop(0))
if player == 14:
hand1.append(cards.pop(0))
hand2.append(cards.pop(0))
hand3.append(cards.pop(0))
hand4.append(cards.pop(0))
hand5.append(cards.pop(0))
hand6.append(cards.pop(0))
hand7.append(cards.pop(0))
hand8.append(cards.pop(0))
hand9.append(cards.pop(0))
hand10.append(cards.pop(0))
hand11.append(cards.pop(0))
hand12.append(cards.pop(0))
hand13.append(cards.pop(0))
hand14.append(cards.pop(0))
num = num - 1
if player == 1:
print hand1
if player == 2:
print hand1
print hand2
if player == 3:
print hand1
print hand2
print hand3
if player == 4:
print hand1
print hand2
print hand3
print hand4
if player == 5:
print hand1
print hand2
print hand3
print hand4
print hand5
if player == 6:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
if player == 7:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
if player == 8:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
if player == 9:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
print hand9
if player == 10:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
print hand9
print hand10
if player == 11:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
print hand9
print hand10
print hand11
if player == 12:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
print hand9
print hand10
print hand11
print hand12
if player == 13:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
print hand9
print hand10
print hand11
print hand12
print hand13
if player == 14:
print hand1
print hand2
print hand3
print hand4
print hand5
print hand6
print hand7
print hand8
print hand9
print hand10
print hand11
print hand12
print hand13
print hand14
print 'the cards remaining in the deck are: '
print cards
I'm trying to make it draw a card while someone has a hand of any number cards, for instance 5. I want to make it ask "How many cards do you want" i'll put in a number, and it will give me the respective cards.
BTW this ISN'T homework