如何编写这个Python代码更短?

CRA*_*OLO 1 python for-loop blackjack

我正在做一个modified blackjack game.只能使用2到9张牌.在这个牌组中没有数十张,面牌或牌照.

首先,我创建了变量套牌,它采用了一个空列表.
然后我创建了4 for loops以将卡片列表附加到卡片组.

我想知道是否有更短的方式来编写以下内容:

import random

deck = []
for list_of_cards in range(2, 10):
    spades = 'spades'
    list_of_spades = str(list_of_cards) + ' of' + ' ' + spades
    deck.append(list_of_spades)
for list_of_cards in range(2, 10):
    clubs = 'clubs'
    list_of_clubs = str(list_of_cards) + ' of' + ' ' + clubs
    deck.append(list_of_clubs)
for list_of_cards in range(2, 10):
    diamonds = 'diamonds'
    list_of_diamonds = str(list_of_cards) + ' of' + ' ' + diamonds
    deck.append(list_of_diamonds)
for list_of_cards in range(2, 10):
    hearts = 'hearts'
    list_of_hearts = str(list_of_cards) + ' of' + ' ' + hearts
    deck.append(list_of_hearts)
Run Code Online (Sandbox Code Playgroud)

结果就像我想要的那样,是:

['2 of spades', '3 of spades', '4 of spades', '5 of spades', '6 of spades', '7 of spades', '8 of spades', '9 of spades', '2 of clubs', '3 of clubs', '4 of clubs', '5 of clubs', '6 of clubs', '7 of clubs', '8 of clubs', '9 of clubs', '2 of diamonds', '3 of diamonds', '4 of diamonds', '5 of diamonds', '6 of diamonds', '7 of diamonds', '8 of diamonds', '9 of diamonds', '2 of hearts', '3 of hearts', '4 of hearts', '5 of hearts', '6 of hearts', '7 of hearts', '8 of hearts', '9 of hearts']
Run Code Online (Sandbox Code Playgroud)

由于我是Python的新手,我假设有一种方法可以将它写得更短.谢谢您的帮助!

Doo*_*nob 5

你为什么需要4个循环?为什么你需要创建那些无用的字符串?(+ ' of' + ' ' + spades' of spades'......一样)(我也修了一些其他东西)

deck = []
for n in range(2, 10):
    deck.append('%i of spades' % n)
    deck.append('%i of hearts' % n)
    deck.append('%i of diamonds' % n)
    deck.append('%i of clubs' % n)
Run Code Online (Sandbox Code Playgroud)

或者,使用嵌套循环:

deck = []
for n in range(2, 10):
    for s in ['spades', 'hearts', 'diamonds', 'clubs']:
        deck.append('%i of %s' % (n, s))
Run Code Online (Sandbox Code Playgroud)