0

one tuple to represent all of the possible card values and another tuple for the possible suits. Thanks

Answered # Generating a random card from a deck with python.

Featured Reply BearofNH 104 Stefano Mtangoo 441 mn_kthompson 3 Murtan 317 Kristopherr vegaseat 1,720 alexander.selin.7

0

one tuple to represent all of the possible card values and another tuple for the possible suits. Thanks

2

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
```

0

for more info on random module:

http://docs.python.org/library/random.html

http://effbot.org/librarybook/random.htm

0

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
```

0

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.

0

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 6 Years Ago by Kristopherr*: n/a

0

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
"""
```

0

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

This question has already been answered. Start a new discussion instead.

Recommended Articles

Help! I want to create a java program that finds the highest even integer among the values entered by the user. Stop asking values when a value less than 1 have been entered. If no even integer is entered, display "No Even Integer"

Here is the sample output that I ...

Hello All ...

Iam Getting An Error With try to excecute the stored procedure .

I have Have Sql database , the stored procedure like so :

```
USE [MPRS]
GO
/****** Object: StoredProcedure [dbo].[Search_Licenses_By_Number] Script Date: 26-Nov-16 8:06:52 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE ...
```

I don’t want at this stage work on a big separate project as I've already got plenty ...