我正在尝试在python中创建一个基本的二十一点游戏,我想创建一个名为Deck
的新列表。我希望Deck
在一个列表中拥有所有可能的套装/等级配对(即心脏的王牌,心脏的2,心脏的3等),这样我就可以在random.shuffle
中开始“交易”或.pop
风格。
如何将这两个列表配对或者我必须自己输入?
以下是当前代码:
print ("Welcome to the Blackjack Table! May I have your name?")
user_name = input("Please enter your name:")
print ("Welcome to the table {}. Let's deal!".format(user_name))
import random
suits = ["Heart", "Diamond", "Spade", "Club"]
ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
values = {'A':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'J':10, 'Q':10, 'K':10,}
deck =
答案 0 :(得分:2)
使用嵌套list comprehension将每个等级与每个套装配对。
deck = [(rank, suit) for rank in ranks for suit in suits]
itertools.product
可以用来完成同样的事情:
import itertools
deck = list(itertools.product(ranks, suits))
答案 1 :(得分:1)
所以你要做的就是拿出每件套装并将它与每个等级配对。下面的代码与两个嵌套的for loops完全相同:
deck = [] # create an empty list
for suit in suits:
for rank in ranks:
deck.append((suit, rank)) # append a tuple to the list
print len(deck) # prints 52, as expected
更加pythonic的方式是使用list comprehension。它的速度要快一点,但可能更少(或更直观)。
deck = [(suit, rank) for suit in suits for rank in ranks]