432,510 Members | 1,821 Online
Need help? Post your question and get tips & solutions from a community of 432,510 IT Pros & Developers. It's quick & easy.

# How to create a deck of cards

 P: 39 Hi there. Thanks for your help. I am experimenting with lists and dictionaries and would like to make a dictionary of playing cards as my eventual outcome. I know I can write it out by hand but this is an excercise so I can learn about data etc. (this is not homework, I'm just learning python. What I have accomplished so far. I have managed to make a nested list of the name of the card, and its associated value. i.e. [['2 of hearts', 2] etc.. Here is my code. I would like to know if there are any suggestions to improve upon it. Thanks Miguel PS I know that the Ace has more than one value but I will work on that soon enough. Expand|Select|Wrap|Line Numbers ##Declare a basic list of items that all cards will have cards = [['2',2], ['3',3], ['4',4],             ['5',5], ['6',6], ['7',7], ['8',8], ['9',9],             ['10',10], ['Jack',10], ['Queen',10], ['King',10], ['Ace',11]]   ##declare a separate list for each suit hearts = [] clubs = [] spades =[] diamonds =[]   ##Now create the list of cards for each suit for x,y in cards:     hearts_row=[]     clubs_row=[]     spades_row=[]     diamonds_row=[]     for item in cards[0][0]:         hearts_row.append(x + ' of hearts')         hearts_row.append(y)           clubs_row.append(x + ' of clubs')         clubs_row.append(y)           spades_row.append(x + ' of spades')         spades_row.append(y)           diamonds_row.append(x + ' of diamonds')         diamonds_row.append(y)       hearts.append(hearts_row)     clubs.append(hearts_row)     spades.append(hearts_row)     diamonds.append(hearts_row)     ##combine all suits into one deck     deck = hearts + clubs + spades + diamonds ##Print Deck print (deck)     Here is my output! [['2 of hearts', 2], ['3 of hearts', 3], ['4 of hearts', 4], ['5 of hearts', 5], ['6 of hearts', 6], ['7 of hearts', 7], ['8 of hearts', 8], ['9 of hearts', 9], ['10 of hearts', 10], ['Jack of hearts', 10], ['Queen of hearts', 10], ['King of hearts', 10], ['Ace of hearts', 11], ['2 of hearts', 2], ['3 of hearts', 3], ['4 of hearts', 4], ['5 of hearts', 5], ['6 of hearts', 6], ['7 of hearts', 7], ['8 of hearts', 8], ['9 of hearts', 9], ['10 of hearts', 10], ['Jack of hearts', 10], ['Queen of hearts', 10], ['King of hearts', 10], ['Ace of hearts', 11], ['2 of hearts', 2], ['3 of hearts', 3], ['4 of hearts', 4], ['5 of hearts', 5], ['6 of hearts', 6], ['7 of hearts', 7], ['8 of hearts', 8], ['9 of hearts', 9], ['10 of hearts', 10], ['Jack of hearts', 10], ['Queen of hearts', 10], ['King of hearts', 10], ['Ace of hearts', 11], ['2 of hearts', 2], ['3 of hearts', 3], ['4 of hearts', 4], ['5 of hearts', 5], ['6 of hearts', 6], ['7 of hearts', 7], ['8 of hearts', 8], ['9 of hearts', 9], ['10 of hearts', 10], ['Jack of hearts', 10], ['Queen of hearts', 10], ['King of hearts', 10], ['Ace of hearts', 11]] Sep 12 '14 #1

Here you go buddy, this is the easier way of doing it.

I'll walk you through the thought process:

1. First outline what you have: Card values, card suites:

Expand|Select|Wrap|Line Numbers
1. card_values = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
2. card_suites = ['Hearts', 'Clubs', 'Diomands', 'Spades']
3.
2. Then you need to combine these lists (multiply them), but still leave them in a list. You know you need to loop both lists, which means you have two for-loops. In python, list comprehension is a great way to do it. It's hard to understand at first (it was for me) but eventually you'll get it the more you practice it.

Expand|Select|Wrap|Line Numbers
1. result = [[v + ' of ' + s,v] for s in card_suites for v in card_values]
2.
Your output in result looks like this:

Expand|Select|Wrap|Line Numbers
1. [[v + ' of ' + s,v] for s in card_suites for v in card_values]
3.
The whole thing in only three lines of code!
Expand|Select|Wrap|Line Numbers
1. values = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
2. suites = ['Hearts', 'Clubs', 'Diomands', 'Spades']
3. deck = [[v + ' of ' + s,v] for s in suites for v in values]
4.
You might say you're missing the values for Jack Queen and King! Ah! I'll leave this as an exercise to you, but if you can't figure it out, I'll help you here or post another question. HINT: Turn the value list into a dict.